public final class ObjectLock extends Object implements DepositBox
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
Modifier and Type | Field and Description |
---|---|
protected static short |
ACTION_CREATE |
protected static short |
ACTION_READ |
protected static short |
ACTION_UPDATE |
protected static short |
ACTION_WRITE |
Constructor and Description |
---|
ObjectLock(OID oid)
Create a new lock for the specified object.
|
ObjectLock(OID oid,
Object[] object,
long version) |
Modifier and Type | Method and Description |
---|---|
void |
expire()
Indicate that object needs to be expired from the cache.
|
void |
expired()
Indicate that object has been removed from the cache.
|
Object[] |
getObject() |
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 |
getVersion() |
void |
setObject(TransactionContext tx,
Object[] object,
long version)
Set an object into the DespositBox, only a transaction
has the write lock may call it method or IllegalArgumentException
will be thrown.
|
void |
setVersion(long version)
Sets the new version of this object.
|
String |
toString() |
protected static final short ACTION_READ
protected static final short ACTION_WRITE
protected static final short ACTION_CREATE
protected static final short ACTION_UPDATE
public ObjectLock(OID oid)
oid
- The object to create a lock forpublic OID getOID()
getOID
in interface DepositBox
public Object[] getObject()
public void expire()
public void expired()
public void setObject(TransactionContext tx, Object[] object, long version)
DepositBox
setObject
in interface DepositBox
tx
- the transaction in actionobject
- to be store into deposit boxversion
- of the object to be storedpublic Object[] getObject(TransactionContext tx)
DepositBox
getObject
in interface DepositBox
tx
- the transaction in actionpublic long getVersion()
getVersion
in interface DepositBox
public void setVersion(long version)
DepositBox
setVersion
in interface DepositBox
version
- a timestamp.Copyright © 2014. All rights reserved.