Interface StoreManager

    • Method Detail

      • setContext

        void setContext​(StoreContext ctx)
        Set a reference to the corresponding context. This method will be called before the store manager is used. The store manager is responsible for pulling any necessary configuration data from the context, including the transaction mode and connection retain mode.
      • beginOptimistic

        void beginOptimistic()
        Notification that an optimistic transaction has started. This method does not replace the begin() method, which will still be called when a true data store transaction should begin.
      • rollbackOptimistic

        void rollbackOptimistic()
        Notification that an optimistic transaction was rolled back before a data store transaction ever began.
      • begin

        void begin()
        Begin a data store transaction. After this method is called, it is assumed that all further operations are operating in a single transaction that can be committed or rolled back. If optimistic transactions are in use, this method will only be called when the system requires a transactionally consistent connection due to a user request to flush or commit the transaction. In this case, it is possible that the optimistic transaction does not have the latest versions of all instances (i.e. another transaction has modified the same instances and committed since the optimistic transaction started). On commit, an exception must be thrown on any attempt to overwrite data for an instance with an older version.
        Since:
        0.2.5
      • commit

        void commit()
        Commit the current data store transaction.
      • rollback

        void rollback()
        Rollback the current data store transaction.
      • exists

        boolean exists​(OpenJPAStateManager sm,
                       java.lang.Object edata)
        Verify that the given instance exists in the data store; return false if it does not.
      • isCached

        boolean isCached​(java.util.List<java.lang.Object> oids,
                         java.util.BitSet edata)
        Verify that the given instance exists in the data store in memory; return false if it does not. When an object is found in memory the corresponding element of the BitSet is set to 1.
      • syncVersion

        boolean syncVersion​(OpenJPAStateManager sm,
                            java.lang.Object edata)
        Update the version information in the given state manager to the version stored in the data store.
        Parameters:
        sm - the instance to check
        edata - the current execution data, or null if not given to the calling method of the context
        Returns:
        true if the instance still exists in the datastore and is up-to-date, false otherwise
      • load

        boolean load​(OpenJPAStateManager sm,
                     java.util.BitSet fields,
                     FetchConfiguration fetch,
                     int lockLevel,
                     java.lang.Object edata)
        Load the given state manager. Note that any collection or map types loaded into the state manager will be proxied with the correct type; therefore the store manager does not have to load the same concrete collection/map types as the instance declares. However, array types must be consistent with the array type stored by the persistence capable instance. If this method is called during a data store transaction, the instance should be locked. If the given state manager does not have its version set already, version information can be loaded if desired through the OpenJPAStateManager.setVersion(java.lang.Object) method.
        Parameters:
        sm - the instance to load
        fields - set of fields to load; all field indexes in this set must be loaded; this set is mutable
        fetch - the fetch configuration to use when loading related objects
        lockLevel - attempt to load simple fields at this lock level; relations should be loaded at the read lock level of the fetch configuration
        edata - the current execution data, or null if not given to the calling method of the broker
        Returns:
        false if the object no longer exists in the database, true otherwise
      • beforeStateChange

        void beforeStateChange​(OpenJPAStateManager sm,
                               PCState fromState,
                               PCState toState)
        Notification that the given state manager is about to change its lifecycle state. The store manager is not required to do anything in this method, but some back ends may need to.
        Since:
        0.3.0
      • flush

        java.util.Collection<java.lang.Exception> flush​(java.util.Collection<OpenJPAStateManager> sms)
        Flush the given state manager collection to the datastore, returning a collection of exceptions encountered during flushing. The given collection may include states that do not require data store action, such as persistent-clean instances or persistent-dirty instances that have not been modified since they were last flushed. For datastore updates and inserts, the dirty, non-flushed fields of each state should be flushed. New instances without an assigned object id should be given one via OpenJPAStateManager.setObjectId(java.lang.Object). New instances with value-strategy fields that have not been assigned yet should have their fields set. Datastore version information should be updated during flush, and the state manager's version indicator updated through the OpenJPAStateManager.setNextVersion(java.lang.Object) method. The current version will roll over to this next version upon successful commit.
        See Also:
        org.apache.openjpa.util.ApplicationIds#assign()
      • getManagedType

        java.lang.Class<?> getManagedType​(java.lang.Object oid)
        Return the persistent class for the given data store identity value. If the given value is not a datastore identity object, return null.
        Since:
        0.3.0
      • getDataStoreIdType

        java.lang.Class<?> getDataStoreIdType​(ClassMetaData meta)
        Return the class used by this StoreManager for datastore identity values. The given metadata may be null, in which case the return value should the common datastore identity class for all classes, or null if this store manager does not use a common identity class.
      • copyDataStoreId

        java.lang.Object copyDataStoreId​(java.lang.Object oid,
                                         ClassMetaData meta)
        Copy the given object id value. Use the described type of the given metadata, which may be a subclass of the given oid's described type.
      • newDataStoreId

        java.lang.Object newDataStoreId​(java.lang.Object oidVal,
                                        ClassMetaData meta)
        Create a new unique datastore identity for the given type from the given oid value (presumably pk, stringified oid, or oid instance).
      • getClientConnection

        java.lang.Object getClientConnection()
        Return a connection to the data store suitable for client use. If this method is called during a data store transaction, thie connection must be transactional. If no connection is in use, this method should create one to return.
      • retainConnection

        void retainConnection()
        Instruct the store to retain a connection for continued use. This will be invoked automatically based on the user's configured connection retain mode.
      • releaseConnection

        void releaseConnection()
        Instruct the store to release a retained connection. This will be invoked automatically based on the user's configured connection retain mode.
      • cancelAll

        boolean cancelAll()
        Cancel all pending data store statements.
        Returns:
        true if any statements cancelled, false otherwise
        Since:
        0.3.1
      • executeExtent

        ResultObjectProvider executeExtent​(ClassMetaData meta,
                                           boolean subclasses,
                                           FetchConfiguration fetch)
        Return a provider for all instances of the given candidate class, optionally including subclasses. The given candidate may be an unmapped type with mapped subclasses. If the provider is iterated within a data store transaction, returned instances should be locked.
      • newQuery

        StoreQuery newQuery​(java.lang.String language)
        Return a query implementation suitable for this store. If the query is iterated within a data store transaction, returned instances should be locked. Return null if this store does not support native execution of the given language. OpenJPA can execute JPQL in memory even without back end support.
        Parameters:
        language - the query language
      • newFetchConfiguration

        FetchConfiguration newFetchConfiguration()
        Return a fetch configuration suitable for this runtime. Typically will be or extend FetchConfigurationImpl.
      • compareVersion

        int compareVersion​(OpenJPAStateManager state,
                           java.lang.Object v1,
                           java.lang.Object v2)
        Compare the two version objects.
        Parameters:
        state - the state manager for the object
        v1 - the first version object to compare
        v2 - the second version object to compare
        Returns:
      • close

        void close()
        Free any resources this store manager is using.
        Specified by:
        close in interface Closeable
        Since:
        0.2.5