|
||||||||
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
Nested Class Summary | |
---|---|
(package private) static class |
ObjectLock.LinkedTx
Object uses to hold a linked list of transactions holding write locks or waiting for a read/write lock. |
Field Summary | |
---|---|
(package private) static short |
ACTION_CREATE
|
(package private) static short |
ACTION_READ
|
(package private) static short |
ACTION_UPDATE
|
(package private) static short |
ACTION_WRITE
|
(package private) static int |
idcount
|
(package private) static int[] |
lock
|
Constructor Summary | |
---|---|
ObjectLock(CacheEntry entry)
|
|
ObjectLock(OID oid)
Create a new lock for the specified object. |
Method Summary | |
---|---|
(package private) void |
acquireCreateLock(TransactionContext tx)
|
(package private) void |
acquireLoadLock(TransactionContext tx,
boolean write,
int timeout)
|
(package private) void |
acquireUpdateLock(TransactionContext tx,
int timeout)
|
(package private) void |
confirm(TransactionContext tx,
boolean succeed)
|
(package private) void |
delete(TransactionContext tx)
Informs the lock that the object has been deleted by the transaction holding the write lock. |
(package private) void |
enter()
Indicate that a transaction is interested in this lock. |
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)}. |
(package private) boolean |
hasLock(TransactionContext tx,
boolean write)
Returns true if the transaction holds a read or write lock on the object. |
(package private) void |
invalidate(TransactionContext tx)
|
(package private) boolean |
isDisposable()
Return true if this object can be safely disposed. |
(package private) boolean |
isEntered()
Return true if there is any transaction called enter() ,
but not yet called leave() . |
(package private) boolean |
isExclusivelyOwned(TransactionContext tx)
|
(package private) boolean |
isExpired()
Return true if this entry has been expired from the cache |
(package private) boolean |
isFree()
Return true if and only if this lock can be safely disposed |
(package private) void |
leave()
Indicate that a transaction is not interested to change the state of this lock anymore. |
(package private) void |
release(TransactionContext tx)
Releases a lock on the object previously acquired. |
void |
setObject(TransactionContext tx,
java.lang.Object object)
Set an object into the DespositBox, only a transaction has the write lock may call it method or IllegalArgumentException will be thrown. |
(package private) void |
setOID(OID oid)
Set OID of this lock to new value. |
java.lang.String |
toString()
|
(package private) void |
upgrade(TransactionContext tx,
int timeout)
Acquires a lock on the object on behalf of the specified transaction. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
static final short ACTION_READ
static final short ACTION_WRITE
static final short ACTION_CREATE
static final short ACTION_UPDATE
static int idcount
static final int[] lock
Constructor Detail |
---|
public ObjectLock(OID oid)
oid
- The object to create a lock forpublic ObjectLock(CacheEntry entry)
Method Detail |
---|
public OID getOID()
void setOID(OID oid)
void enter()
void leave()
boolean isEntered()
enter()
,
but not yet called leave()
.
boolean isDisposable()
boolean hasLock(TransactionContext tx, boolean write)
tx
- The transactionwrite
- True if must have a write lock
boolean isFree()
boolean isExclusivelyOwned(TransactionContext tx)
boolean isExpired()
public java.lang.Object getObject()
public void expire()
public void expired()
void acquireLoadLock(TransactionContext tx, boolean write, int timeout) throws LockNotGrantedException, ObjectDeletedWaitingForLockException
LockNotGrantedException
ObjectDeletedWaitingForLockException
void acquireCreateLock(TransactionContext tx) throws LockNotGrantedException
LockNotGrantedException
void acquireUpdateLock(TransactionContext tx, int timeout) throws LockNotGrantedException, ObjectDeletedException, ObjectDeletedWaitingForLockException
LockNotGrantedException
ObjectDeletedException
ObjectDeletedWaitingForLockException
public void setObject(TransactionContext tx, java.lang.Object object)
DepositBox
setObject
in interface DepositBox
tx
- the transaction in actionobject
- to be store 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
void confirm(TransactionContext tx, boolean succeed)
void upgrade(TransactionContext tx, int timeout) throws LockNotGrantedException, ObjectDeletedWaitingForLockException
LockNotGrantedException
is thrown. If the object has
been deleted while waiting for a lock, a ObjectDeletedException
is thrown. To prevent dead locks, a
transaction must only call this method for any given object
from a single thread and must mark the lock it is trying to
acquire and return it from a call to TransactionContext.getWaitOnLock()
if the call to this method
has not returned yet. If a read lock is available for the
transaction and a write lock is requested, the read lock is
cancelled whether or not the write is acquired.
tx
- The transaction requesting the locktimeout
- Timeout waiting to acquire lock (in milliseconds),
zero for no waiting
LockNotGrantedException
- Lock could not be granted in
the specified timeout or a dead lock has been detected
ObjectDeletedWaitingForLockException
- The object has
been deleted while waiting for the lockvoid release(TransactionContext tx)
tx
- The transaction that holds the lockvoid delete(TransactionContext tx)
ObjectDeletedException
.
tx
- The transaction that holds the lock
java.lang.RuntimeException
- Attempt to delete object without
acquiring a write lockvoid invalidate(TransactionContext tx)
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 |