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
.
addDependent
(package private) void addDependent(ClassMolder dep)
Mutator method to add a dependent ClassMolder.
addExtendent
(package private) void addExtendent(ClassMolder ext)
Mutator method to add a extent ClassMolder.
create
public Identity create(TransactionContext tx,
OID oid,
DepositBox locker,
Object object)
throws PersistenceException
Create an object of the base class with specified identity into the persistence storage.
tx
- transaction in actionoid
- the object identity of the object to be created.locker
- the dirty checking cache of the objectobject
- the object to be created
- the identity of the 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.
tx
- - transaction in actionoid
- - the object identity of the target object
getAccessMode
public AccessMode getAccessMode(AccessMode txMode)
Get the effective accessMode of the the base type.
txMode
- - the default transaction accessMode.
- the effective acessMode of the base type.
getActualIdentity
public Identity getActualIdentity(ClassLoader loader,
Object o)
Get the identity from a object of the base type.
loader
- the current class loader.o
- - object of the base type.
- return an Object[] which contains the identity of the object.
getActualIdentity
public Identity getActualIdentity(TransactionContext tx,
Object o)
Get the identity from a object of the base type.
tx
- the transaction context.o
- - object of the base type.
- return an Object[] which contains the identity of the object.
getCacheParams
public Properties getCacheParams()
Returns the active cache parameters.
getCallback
public CallbackInterceptor getCallback()
Get the callback interceptor of the base type.
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.
tx
- the transaction context.o
- - object of the base type.
- 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.
loader
- the classloader.
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.
- 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.
cls
- the Class to check the assignation
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.
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.
load
public Object load(TransactionContext tx,
OID oid,
DepositBox locker,
ProposedEntity proposedObject,
AccessMode suggestedAccessMode)
throws PersistenceException
Load an object with specified identity from the persistent storage.
tx
- the TransactionContext in actionoid
- the object identity of the desired objectlocker
- the DepositBox
of the object which is used to
store the dirty checking cache of the object.suggestedAccessMode
- the acessMode for the object
- the object stamp for the object in the persistent storage
markCreate
public void markCreate(TransactionContext tx,
OID oid,
DepositBox locker,
Object object)
throws PersistenceException
Walk the object model and mark object that should be created.
tx
- transaction in actionoid
- the object identity of the object to be created.locker
- the dirty checking cache of the objectobject
- the object to be created
markDelete
public void markDelete(TransactionContext tx,
OID oid,
DepositBox locker,
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.
tx
- - transaction in actionoid
- - object's identity of the target objectlocker
- - the dirty checking cache of the target objectobject
- - the target object
newInstance
public Object newInstance(ClassLoader loader)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException
Return a new instance of the base class with the provided ClassLoader object.
loader
- the ClassLoader object to use to create a new object.
- Object the object reprenseted by this ClassMolder, and instanciated with the
provided ClassLoader instance.
preStore
public boolean preStore(TransactionContext tx,
OID oid,
DepositBox locker,
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.
tx
- transaction in actionoid
- the object identity of the objectlocker
- the dirty check cache for the objectobject
- the data object to be checkedtimeout
- timeout of updating the lock if needed
- 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.
tx
- the TransactionContext of the transaction in actionobject
- the target object of the base type of this ClassMolderrelatedMolder
- the ClassMolder of the related object to be
removed from the objectrelatedObject
- the object to be removed
resetResolvers
public void resetResolvers()
revertObject
public void revertObject(TransactionContext tx,
OID oid,
DepositBox locker,
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.
tx
- - transaction in actionoid
- - the object identity of the target objectlocker
- - the dirty checking cache of the target objectobject
- - the target object
setDepends
(package private) void setDepends(ClassMolder dep)
Mutator method to set the depends ClassMolder.
setExtends
(package private) 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.
setIdentity
public void setIdentity(TransactionContext tx,
Object object,
Identity identity)
throws PersistenceException
Set the identity into an object.
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)
throws PersistenceException
Store a data object into the persistent storage of the base class of this
ClassMolder.
tx
- Transaction in actionoid
- the object identity of the stored objectlocker
- the dirty check cache of the objectobject
- the object to be stored
toString
public String toString()
update
public boolean update(TransactionContext tx,
OID oid,
DepositBox locker,
Object object,
AccessMode suggestedAccessMode)
throws PersistenceException
Update the object which loaded or created in the other transaction to
the persistent storage.
tx
- Transaction in actionoid
- the object identity of the stored objectlocker
- the dirty check cache of the objectobject
- the object to be stored
- 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.
tx
- - transaction in actionoid
- - object's identity of the target objectlocker
- - the dirty checking cache of the target objectobject
- - the target object