Class ClassMolder


  • public class ClassMolder
    extends java.lang.Object
    ClassMolder is a 'binder' for one type of data object and its corresponding Persistence. For example, when ClassMolder is asked to load an object, it acquires the field values from Persistence and binds them into the target object.

    It resolves relations via TransactionContext and subsequently binds these related objects into the target object, too.

    Apart from loading, ClassMolder is also responsible for storing, removing, creating an object to and from a persistence storage, as well as reverting an object to its previous state.

    Each instance of ClassMolder deals with exactly one persistable type, interacts with one instance of Persistent and belongs to one LockEngine.

    Author:
    Thomas Yip, Bruce Snyder, Werner Guttmann
    • Field Detail

      • _isKeyGenUsed

        public boolean _isKeyGenUsed
        Is a key kenerator used for the base class?
    • Constructor Detail

      • ClassMolder

        ClassMolder​(DatingService ds,
                    ClassDescriptorResolver classDescriptorResolver,
                    LockEngine lock,
                    ClassDescriptor classDescriptor,
                    Persistence persistenceEngine)
             throws java.lang.ClassNotFoundException,
                    MappingException
        Creates an instance of this class.
        Parameters:
        ds - is the helper class for resolving depends and extends relationship among all the ClassMolder in the same LockEngine.
        classDescriptorResolver - ClassDescriptorResolver instance
        lock - the lock engine.
        classDescriptor - the classDescriptor for the base class.
        persistenceEngine - the Persistence for the base class.
        Throws:
        java.lang.ClassNotFoundException - If a class cannot be loaded.
        MappingException - if an error occurred with analyzing the mapping information.
    • Method Detail

      • removeRelation

        public boolean removeRelation​(TransactionContext tx,
                                      java.lang.Object object,
                                      ClassMolder relatedMolder,
                                      java.lang.Object relatedObject)
        Remove the reference of a related object from an object of the base class.

        If the related object is PersistanceCapable, the field will be set null. If the related object is a Collection, then the related object will be removed from the Collection.

        If any changed occurred, transactionContext.markModified will be called, to indicate the object is modified.

        It method will iterate through all of the object's field and try to remove all the occurrence.

        Parameters:
        tx - the TransactionContext of the transaction in action
        object - the target object of the base type of this ClassMolder
        relatedMolder - the ClassMolder of the related object to be removed from the object
        relatedObject - the object to be removed
      • getPriority

        public int getPriority()
        Determines the create priority of the data object class represented by this ClassMolder. Concpetually, this method determines the order of which data object should be created. A priority of 0 indicates that an object represented by this ClassMolder can be created independently, without having to consider any other data object. This method should only be called after DatingService is closed.
      • create

        public Identity create​(TransactionContext tx,
                               OID oid,
                               DepositBox locker,
                               java.lang.Object object)
                        throws PersistenceException
        Create an object of the base class with specified identity into the persistence storage.
        Parameters:
        tx - transaction in action
        oid - the object identity of the object to be created.
        locker - the dirty checking cache of the object
        object - the object to be created
        Returns:
        the identity of the object
        Throws:
        PersistenceException
      • markCreate

        public void markCreate​(TransactionContext tx,
                               OID oid,
                               DepositBox locker,
                               java.lang.Object object)
                        throws PersistenceException
        Walk the object model and mark object that should be created.
        Parameters:
        tx - transaction in action
        oid - the object identity of the object to be created.
        locker - the dirty checking cache of the object
        object - the object to be created
        Throws:
        PersistenceException
      • preStore

        public boolean preStore​(TransactionContext tx,
                                OID oid,
                                DepositBox locker,
                                java.lang.Object object,
                                int timeout)
                         throws PersistenceException
        Check the object for modification. If dpendent object is dereferenced, it method will remove the object thru the transaction. If an related object is dereferenced, it method will make sure the formally object will be dereferenced from the other side as well. This method is called in prepare (for commit) state of the transaction. This method indicates if the object needed to be persist or cache should be update using TransactionContext.markDelete.
        Parameters:
        tx - transaction in action
        oid - the object identity of the object
        locker - the dirty check cache for the object
        object - the data object to be checked
        timeout - timeout of updating the lock if needed
        Returns:
        true if the object is modified
        Throws:
        PersistenceException
      • store

        public void store​(TransactionContext tx,
                          OID oid,
                          DepositBox locker,
                          java.lang.Object object)
                   throws PersistenceException
        Store a data object into the persistent storage of the base class of this ClassMolder.
        Parameters:
        tx - Transaction in action
        oid - the object identity of the stored object
        locker - the dirty check cache of the object
        object - the object to be stored
        Throws:
        PersistenceException - If identity is missing for storage or the identity is modified
      • update

        public boolean update​(TransactionContext tx,
                              OID oid,
                              DepositBox locker,
                              java.lang.Object object,
                              AccessMode suggestedAccessMode)
                       throws PersistenceException
        Update the object which loaded or created in the other transaction to the persistent storage.
        Parameters:
        tx - Transaction in action
        oid - the object identity of the stored object
        locker - the dirty check cache of the object
        object - the object to be stored
        Returns:
        boolean true if the updating object should be created
        Throws:
        PersistenceException
      • updateCache

        public void updateCache​(TransactionContext tx,
                                OID oid,
                                DepositBox locker,
                                java.lang.Object object)
        Update the dirty checking cache. This method is called after a transaction completed successfully.
        Parameters:
        tx - - transaction in action
        oid - - object's identity of the target object
        locker - - the dirty checking cache of the target object
        object - - the target object
      • delete

        public void delete​(TransactionContext tx,
                           OID oid)
                    throws PersistenceException
        Delete an object of the base type from the persistence storage. All object to be deleted by this method will be markDelete before it method is called.
        Parameters:
        tx - - transaction in action
        oid - - the object identity of the target object
        Throws:
        PersistenceException
      • markDelete

        public void markDelete​(TransactionContext tx,
                               OID oid,
                               DepositBox locker,
                               java.lang.Object object)
                        throws PersistenceException
        Prepare to delete an object with the specified identity. If any sub-object should be deleted along with the target object, it should be deleted by this method.
        Parameters:
        tx - - transaction in action
        oid - - object's identity of the target object
        locker - - the dirty checking cache of the target object
        object - - the target object
        Throws:
        PersistenceException
      • revertObject

        public void revertObject​(TransactionContext tx,
                                 OID oid,
                                 DepositBox locker,
                                 java.lang.Object object)
                          throws PersistenceException
        Revert the object back to the state of begining of the transaction If the object is loaded, it will be revert as it was loaded. If the object is created, it will be revert as it was just created.
        Parameters:
        tx - - transaction in action
        oid - - the object identity of the target object
        locker - - the dirty checking cache of the target object
        object - - the target object
        Throws:
        PersistenceException
      • newInstance

        public java.lang.Object newInstance​(java.lang.ClassLoader loader)
                                     throws java.lang.InstantiationException,
                                            java.lang.IllegalAccessException,
                                            java.lang.ClassNotFoundException
        Return a new instance of the base class with the provided ClassLoader object.
        Parameters:
        loader - the ClassLoader object to use to create a new object.
        Returns:
        Object the object reprenseted by this ClassMolder, and instanciated with the provided ClassLoader instance.
        Throws:
        java.lang.ClassNotFoundException
        java.lang.IllegalAccessException
        java.lang.InstantiationException
      • getAccessMode

        public AccessMode getAccessMode​(AccessMode txMode)
        Get the effective accessMode of the the base type.
        Parameters:
        txMode - - the default transaction accessMode.
        Returns:
        the effective acessMode of the base type.
      • getCallback

        public CallbackInterceptor getCallback()
        Get the callback interceptor of the base type.
      • isDefaultIdentity

        public boolean isDefaultIdentity​(Identity identity)
        Test if the specified identity is the default value of the type.
      • getIdentity

        public Identity getIdentity​(TransactionContext tx,
                                    java.lang.Object o)
        Get the identity from a object of the base type. If object isn't persistent and key generator is used, returns null.
        Parameters:
        tx - the transaction context.
        o - - object of the base type.
        Returns:
        return an Object[] which contains the identity of the object.
      • getActualIdentity

        public Identity getActualIdentity​(TransactionContext tx,
                                          java.lang.Object o)
        Get the identity from a object of the base type.
        Parameters:
        tx - the transaction context.
        o - - object of the base type.
        Returns:
        return an Object[] which contains the identity of the object.
      • getActualIdentity

        public Identity getActualIdentity​(java.lang.ClassLoader loader,
                                          java.lang.Object o)
        Get the identity from a object of the base type.
        Parameters:
        loader - the current class loader.
        o - - object of the base type.
        Returns:
        return an Object[] which contains the identity of the object.
      • getPersistence

        public Persistence getPersistence()
        Get the Persisetence of the base type.
      • getJavaClass

        public java.lang.Class<?> getJavaClass​(java.lang.ClassLoader loader)
        Get the base class of this ClassMolder given a ClassLoader.
        Parameters:
        loader - the classloader.
        Returns:
        the Class instance.
      • isAssignableFrom

        public boolean isAssignableFrom​(java.lang.Class<?> cls)
        check if the current ClassModlder is assignable from the class instance.
        Parameters:
        cls - the Class to check the assignation
        Returns:
        true if assignable
      • getName

        public java.lang.String getName()
        Get the fully qualified name of the base type of this ClassMolder.
      • getExtends

        public ClassMolder getExtends()
        Get the extends class' ClassMolder.
      • getDepends

        public ClassMolder getDepends()
        Get the depends class' ClassMolder.
      • getLockEngine

        public LockEngine getLockEngine()
        Get the LockEngine which this ClassMolder belongs to.
      • getCacheParams

        public java.util.Properties getCacheParams()
        Returns the active cache parameters.
        Returns:
        Active cache parameters.
      • isDependent

        public boolean isDependent()
        Return true if the base type of this ClassMolder is an dependent class.
      • addExtendent

        void addExtendent​(ClassMolder ext)
        Mutator method to add a extent ClassMolder.
      • addDependent

        void addDependent​(ClassMolder dep)
        Mutator method to add a dependent ClassMolder.
      • setExtends

        void setExtends​(ClassMolder ext)
        Mutator method to set the extends ClassMolder.
      • setDepends

        void setDepends​(ClassMolder dep)
        Mutator method to set the depends ClassMolder.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • isKeyGenUsed

        public boolean isKeyGenUsed()
        Return true if a key generator is used for the base type of this ClassMolder.
      • isKeyGeneratorUsed

        public boolean isKeyGeneratorUsed()
        Return true if a key generator is used for the base type of this ClassMolder.
      • resetResolvers

        public void resetResolvers()
      • getNamedQuery

        public java.lang.String getNamedQuery​(java.lang.String name)
        Returns the actual (OQL) statement for the specified named query.
        Parameters:
        name - Named query name.
        Returns:
        The actual (OQL) statement.
      • getNamedNativeQuery

        public NamedNativeQuery getNamedNativeQuery​(java.lang.String name)
        Returns the actual (SQL) statement for the specified named native query.
        Parameters:
        name - Named query name.
        Returns:
        The actual (SQL) statement.