|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.exolab.castor.persist.ObjectLock
public final class ObjectLock
Read/write locks and lock synchronization on an object. Each object is required to have one ObjectLock which at any given time may be unlocked, write locked by one transaction, or read locked by one or more transactions.
In order to obtain a lock, the transaction must call one of the acquire, passing itself, the lock type and the lock timeout. The transaction must attempt to obtain only one lock at any given time by synchronizing all calls to one of the acquire. If the transaction has acquired a read lock it may attempt to re-acquire the read lock. If the transaction attempts to acquire a write lock the lock will be upgraded.
A read lock cannot be acquired while there is a write lock on the
object, and a write lock cannot be acquired while there is one or
more read locks. If a lock cannot be acquired, the transaction
will hold until the lock is available or timeout occurs. If timeout
occured (or a dead lock has been detected), LockNotGrantedException
is thrown. If the object has been delete
while waiting for the lock, ObjectDeletedException
is
thrown.
When the lock is acquired, the locked object is returned.
The transaction must call release(org.castor.persist.TransactionContext)
when the lock is no
longer required, allowing other transactions to obtain a lock. The
transaction must release all references to the object prior to
calling release(org.castor.persist.TransactionContext)
.
If the object has been deleted, the transaction must call delete(org.castor.persist.TransactionContext)
instead of release(org.castor.persist.TransactionContext)
.
TransactionContext
Field Summary | |
---|---|
protected static short |
ACTION_CREATE
|
protected static short |
ACTION_READ
|
protected static short |
ACTION_UPDATE
|
protected static short |
ACTION_WRITE
|
Constructor Summary | |
---|---|
ObjectLock(OID oid)
Create a new lock for the specified object. |
|
ObjectLock(OID oid,
java.lang.Object[] object,
long timeStamp)
|
Method Summary | |
---|---|
void |
expire()
Indicate that object needs to be expired from the cache. |
void |
expired()
Indicate that object has been removed from the cache. |
java.lang.Object[] |
getObject()
|
java.lang.Object[] |
getObject(TransactionContext tx)
Get the object from the DespositBox, only the transaction have the read or write lock can get it. |
OID |
getOID()
Return the object's OID. |
long |
getTimeStamp()
Get the time of the most recent call on setObject(Object)}. |
void |
setObject(TransactionContext tx,
java.lang.Object[] object,
long timeStamp)
Set an object into the DespositBox, only a transaction has the write lock may call it method or IllegalArgumentException will be thrown. |
void |
setTimeStamp(long timeStamp)
Set new timestamp for this object. |
java.lang.String |
toString()
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
protected static final short ACTION_READ
protected static final short ACTION_WRITE
protected static final short ACTION_CREATE
protected static final short ACTION_UPDATE
Constructor Detail |
---|
public ObjectLock(OID oid)
oid
- The object to create a lock forpublic ObjectLock(OID oid, java.lang.Object[] object, long timeStamp)
Method Detail |
---|
public OID getOID()
getOID
in interface DepositBox
public java.lang.Object[] getObject()
public void expire()
public void expired()
public void setObject(TransactionContext tx, java.lang.Object[] object, long timeStamp)
DepositBox
setObject
in interface DepositBox
tx
- the transaction in actionobject
- to be store into deposit boxtimeStamp
- to be stored into deposit boxpublic java.lang.Object[] getObject(TransactionContext tx)
DepositBox
getObject
in interface DepositBox
tx
- the transaction in action
public long getTimeStamp()
DepositBox
getTimeStamp
in interface DepositBox
public void setTimeStamp(long timeStamp)
DepositBox
setTimeStamp
in interface DepositBox
timeStamp
- The new timestamp for this object.public java.lang.String toString()
toString
in class java.lang.Object
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |