Class RDBMSAccess

  • All Implemented Interfaces:
    StorageAccessIF

    public class RDBMSAccess
    extends Object
    implements StorageAccessIF
    INTERNAL: A storage access implementation accessing relational databases using JDBC.
    • Constructor Detail

      • RDBMSAccess

        public RDBMSAccess​(String id,
                           RDBMSStorage storage,
                           boolean readonly)
    • Method Detail

      • getId

        public String getId()
        Description copied from interface: StorageAccessIF
        INTERNAL: Gets the storage access id. This id is unique for a given StorageIF instance.
        Specified by:
        getId in interface StorageAccessIF
      • isReadOnly

        public boolean isReadOnly()
        Description copied from interface: StorageAccessIF
        INTERNAL: Returns true if the storage access is read-only.
        Specified by:
        isReadOnly in interface StorageAccessIF
      • getConnection

        public Connection getConnection()
        INTERNAL: Returns the JDBC database connection used. It is important that this connection is neither closed, nor commited or rolled back. If this access has already been closed, a non-transactional read connection is requested from the storage. The connection is validated using validateConnection and renewed if not validated.
      • isSQLException

        protected boolean isSQLException​(Throwable e)
      • getHandler

        protected ClassAccessIF getHandler​(Class<?> type)
        INTERNAL: Gets up the handler class that is used to manage objects of the given class.
      • validate

        public boolean validate()
        Description copied from interface: StorageAccessIF
        INTERNAL: Returns true if the storage access is valid.
        Specified by:
        validate in interface StorageAccessIF
      • validateConnection

        protected boolean validateConnection​(Connection conn)
      • commit

        public void commit()
        Description copied from interface: StorageAccessIF
        INTERNAL: Commits the changes performed in the transaction.
        Specified by:
        commit in interface StorageAccessIF
      • abort

        public void abort()
        Description copied from interface: StorageAccessIF
        INTERNAL: Aborts all changes performed in the transaction.
        Specified by:
        abort in interface StorageAccessIF
      • close

        public void close()
        Description copied from interface: StorageAccessIF
        INTERNAL: Closes the storage access, which allows it to free its resources.
        Specified by:
        close in interface StorageAccessIF
      • flush

        public void flush()
        Description copied from interface: StorageAccessIF
        INTERNAL: Called when the transaction requires the transaction changes to be stored by the storage access (i.e. written to the database).

        This method exists mainly to allow storage access implementations to optimize its communication with data repositories. An example of this is writing transaction changes in batches to improve performance.

        Note that the transaction will always call this method at the end of its store method. It will do this so that it is sure that the changes will be visible inside the data repository.

        Specified by:
        flush in interface StorageAccessIF
      • loadObject

        public boolean loadObject​(AccessRegistrarIF registrar,
                                  IdentityIF identity)
        Description copied from interface: StorageAccessIF
        INTERNAL: Check for the existence of the object identity in the data repository. An exception will be thrown if the object does not exist. If it exists the access registrar will be notified.
        Specified by:
        loadObject in interface StorageAccessIF
        Returns:
        true if object was found in the data store, false otherwise.
      • loadField

        public Object loadField​(AccessRegistrarIF registrar,
                                IdentityIF identity,
                                int field)
        Description copied from interface: StorageAccessIF
        INTERNAL: Requests the loading of the specified field for the given object identity. An exception will be thrown if the object does not exist. If it exists the access registrar will be notified.
        Specified by:
        loadField in interface StorageAccessIF
        Returns:
        The value loaded for the specific field. Note that if the field is a reference field the identity will be returned, not the actual object. This is because the storage system does not deal with persistent object instances directly.
      • loadFieldMultiple

        public Object loadFieldMultiple​(AccessRegistrarIF registrar,
                                        Collection<IdentityIF> identities,
                                        IdentityIF current,
                                        Class<?> type,
                                        int field)
        Description copied from interface: StorageAccessIF
        INTERNAL: Requests the loading of the specified field for all the given object identities. An exception will be thrown if the current object does not exist. If it exists the access registrar will be notified.
        Specified by:
        loadFieldMultiple in interface StorageAccessIF
        Returns:
        The value loaded for the specific field. Note that if the field is a reference field the identity will be returned, not the actual object. This is because the storage system does not deal with persistent object instances directly.
      • createObject

        public void createObject​(ObjectAccessIF oaccess,
                                 Object object)
        Description copied from interface: StorageAccessIF
        INTERNAL: Called by the transaction when it requests the new object to be created in the data repository. The ObjectAccessIF object is used to access information about the object as needed.
        Specified by:
        createObject in interface StorageAccessIF
      • needsFlushing

        protected void needsFlushing​(FlushableIF handler)