org.exolab.castor.persist

Class ClassMolder

public class ClassMolder extends 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 Summary
booleanresolversHaveBeenReset
True if all ResolverStrategy have been reset.
boolean_isKeyGenUsed
Is a key kenerator used for the base class?
Constructor Summary
ClassMolder(DatingService ds, AbstractMappingLoader loader, LockEngine lock, ClassDescriptor clsDesc, Persistence persist)
Creates an instance of this class.
Method Summary
voidaddDependent(ClassMolder dep)
Mutator method to add a dependent ClassMolder
voidaddExtendent(ClassMolder ext)
Mutator method to add a extent ClassMolder
Identitycreate(TransactionContext tx, OID oid, DepositBox locker, Object object)
Create an object of the base class with specified identity into the persistence storage.
voiddelete(TransactionContext tx, OID oid)
Delete an object of the base type from the persistence storage.
voidexpireCache(TransactionContext tx, ObjectLock locker)
Inspect the fields stored in the object passed as an argument for contained objects.
AccessModegetAccessMode(AccessMode txMode)
Get the effective accessMode of the the base type
IdentitygetActualIdentity(TransactionContext tx, Object o)
Get the identity from a object of the base type
IdentitygetActualIdentity(ClassLoader loader, Object o)
Get the identity from a object of the base type
PropertiesgetCacheParams()
Returns the active cache parameters
CallbackInterceptorgetCallback()
Get the callback interceptor of the base type
ClassDescriptorgetClassDescriptor()
ClassMoldergetDepends()
Get the depends class' ClassMolder
ClassMoldergetExtends()
Get the extends class' ClassMolder
FieldMolder[]getFields()
Get the FieldMolder of the fields of the base type, except the identity fields.
IdentitygetIdentity(TransactionContext tx, Object o)
Get the identity from a object of the base type If object isn't persistent and key generator is used, returns null
FieldMolder[]getIds()
Get the FieldMolders of the identity fields
ClassgetJavaClass(ClassLoader loader)
Get the base class of this ClassMolder given a ClassLoader
LockEnginegetLockEngine()
Get the LockEngine which this ClassMolder belongs to.
StringgetName()
Get the fully qualified name of the base type of this ClassMolder
StringgetNamedQuery(String name)
Returns the actual (OQL) statement for the specified named query.
PersistencegetPersistence()
Get the Persisetence of the base type
intgetPriority()
Determines the create priority of the data object class represented by this ClassMolder.
booleanisAssignableFrom(Class cls)
check if the current ClassModlder is assignable from the class instance.
booleanisDefaultIdentity(Identity identity)
Test if the specified identity is the default value of the type.
booleanisDependent()
Return true if the base type of this ClassMolder is an dependent class.
booleanisKeyGeneratorUsed()
Return true if a key generator is used for the base type of this ClassMolder
booleanisKeyGenUsed()
Return true if a key generator is used for the base type of this ClassMolder
Objectload(TransactionContext tx, OID oid, DepositBox locker, ProposedEntity proposedObject, AccessMode suggestedAccessMode)
Load an object with specified identity from the persistent storage.
Objectload(TransactionContext tx, OID oid, DepositBox locker, ProposedEntity proposedObject, AccessMode suggestedAccessMode, QueryResults results)
voidmarkCreate(TransactionContext tx, OID oid, DepositBox locker, Object object)
Walk the object model and mark object that should be created.
voidmarkDelete(TransactionContext tx, OID oid, DepositBox locker, Object object)
Prepare to delete an object with the specified identity.
ObjectnewInstance(ClassLoader loader)
Return a new instance of the base class with the provided ClassLoader object
booleanpreStore(TransactionContext tx, OID oid, DepositBox locker, Object object, int timeout)
Check the object for modification.
booleanremoveRelation(TransactionContext tx, Object object, ClassMolder relatedMolder, Object relatedObject)
Remove the reference of a related object from an object of the base class.
voidresetResolvers()
voidrevertObject(TransactionContext tx, OID oid, DepositBox locker, Object object)
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.
voidsetDepends(ClassMolder dep)
Mutator method to set the depends ClassMolder
voidsetExtends(ClassMolder ext)
Mutator method to set the extends ClassMolder
voidsetFieldsNull(Object object)
Set all persistence fields of object of the base type to null.
voidsetIdentity(TransactionContext tx, Object object, Identity identity)
Set the identity into an object
voidsetPersistence(Persistence persist)
Mutator method to set the PersistenceEngine of
voidstore(TransactionContext tx, OID oid, DepositBox locker, Object object)
Store a data object into the persistent storage of the base class of this ClassMolder.
StringtoString()
booleanupdate(TransactionContext tx, OID oid, DepositBox locker, Object object, AccessMode suggestedAccessMode)
Update the object which loaded or created in the other transaction to the persistent storage.
voidupdateCache(TransactionContext tx, OID oid, DepositBox locker, Object object)
Update the dirty checking cache.

Field Detail

resolversHaveBeenReset

boolean resolversHaveBeenReset
True if all ResolverStrategy have been reset.

_isKeyGenUsed

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

Constructor Detail

ClassMolder

ClassMolder(DatingService ds, AbstractMappingLoader loader, LockEngine lock, ClassDescriptor clsDesc, Persistence persist)
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. loader the mapping loader. lock the lock engine. clsDesc the classDescriptor for the base class. persist the Persistence for the base class.

Throws: ClassNotFoundException If a class cannot be loaded. MappingException if an error occured with analysing the mapping information.

Method Detail

addDependent

void addDependent(ClassMolder dep)
Mutator method to add a dependent ClassMolder

addExtendent

void addExtendent(ClassMolder ext)
Mutator method to add a extent ClassMolder

create

public Identity create(TransactionContext tx, OID oid, DepositBox locker, Object object)
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

delete

public void delete(TransactionContext tx, OID oid)
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

expireCache

public void expireCache(TransactionContext tx, ObjectLock locker)
Inspect the fields stored in the object passed as an argument for contained objects. Request an expireCache for each contained object.

Parameters: tx The TransactionContext locker The object that contains the fields to be inspected

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

getActualIdentity

public Identity getActualIdentity(TransactionContext tx, 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(ClassLoader loader, 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

getCacheParams

public Properties getCacheParams()
Returns the active cache parameters

Returns: Active cache parameters

getCallback

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

getClassDescriptor

public ClassDescriptor getClassDescriptor()

getDepends

public ClassMolder getDepends()
Get the depends class' ClassMolder

getExtends

public ClassMolder getExtends()
Get the extends class' ClassMolder

getFields

public FieldMolder[] getFields()
Get the FieldMolder of the fields of the base type, except the identity fields.

getIdentity

public Identity getIdentity(TransactionContext tx, 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

getIds

public FieldMolder[] getIds()
Get the FieldMolders of the identity fields

getJavaClass

public Class getJavaClass(ClassLoader loader)
Get the base class of this ClassMolder given a ClassLoader

Parameters: loader the classloader

Returns: the Class instance

getLockEngine

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

getName

public String getName()
Get the fully qualified name of the base type of this ClassMolder

getNamedQuery

public String getNamedQuery(String name)
Returns the actual (OQL) statement for the specified named query.

Parameters: name Named query name.

Returns: The actual (OQL) statement

getPersistence

public Persistence getPersistence()
Get the Persisetence of the base type

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.

isAssignableFrom

public boolean isAssignableFrom(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

isDefaultIdentity

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

isDependent

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

isKeyGeneratorUsed

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

isKeyGenUsed

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

load

public Object load(TransactionContext tx, OID oid, DepositBox locker, ProposedEntity proposedObject, AccessMode suggestedAccessMode)
Load an object with specified identity from the persistent storage.

Parameters: tx the TransactionContext in action oid the object identity of the desired object locker the DepositBox of the object which is used to store the dirty checking cache of the object. suggestedAccessMode the acessMode for the object

Returns: the object stamp for the object in the persistent storage

load

public Object load(TransactionContext tx, OID oid, DepositBox locker, ProposedEntity proposedObject, AccessMode suggestedAccessMode, QueryResults results)

markCreate

public void markCreate(TransactionContext tx, OID oid, DepositBox locker, Object object)
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

markDelete

public void markDelete(TransactionContext tx, OID oid, DepositBox locker, Object object)
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

newInstance

public Object newInstance(ClassLoader loader)
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: ClassNotFoundException IllegalAccessException InstantiationException

preStore

public boolean preStore(TransactionContext tx, OID oid, DepositBox locker, Object object, int timeout)
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

removeRelation

public boolean removeRelation(TransactionContext tx, Object object, ClassMolder relatedMolder, 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 occured, transactionContext.markModified will be called, to indicate the object is modified.

It method will iterate thur 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

resetResolvers

public void resetResolvers()

revertObject

public void revertObject(TransactionContext tx, OID oid, DepositBox locker, Object object)
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

setDepends

void setDepends(ClassMolder dep)
Mutator method to set the depends ClassMolder

setExtends

void setExtends(ClassMolder ext)
Mutator method to set the extends ClassMolder

setFieldsNull

public void setFieldsNull(Object object)
Set all persistence fields of object of the base type to null.

Parameters: object - target object

setIdentity

public void setIdentity(TransactionContext tx, Object object, Identity identity)
Set the identity into an object

Parameters: tx the transaction context object the object to set the identity identity the new identity for the object

setPersistence

public void setPersistence(Persistence persist)
Mutator method to set the PersistenceEngine of

store

public void store(TransactionContext tx, OID oid, DepositBox locker, Object object)
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

toString

public String toString()

update

public boolean update(TransactionContext tx, OID oid, DepositBox locker, Object object, AccessMode suggestedAccessMode)
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

updateCache

public void updateCache(TransactionContext tx, OID oid, DepositBox locker, 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

Intalio Inc. (C) 1999-2006. All rights reserved http://www.intalio.com