Package com.arjuna.ats.txoj
Class LockManager
- java.lang.Object
-
- com.arjuna.ats.arjuna.StateManager
-
- com.arjuna.ats.txoj.LockManager
-
public class LockManager extends StateManager
This class provides (transactional) concurrency control for application objects.- Since:
- JTS 1.0.
- Version:
- $Id: LockManager.java 2342 2006-03-30 13:06:17Z $
- Author:
- Mark Little (mark@arjuna.com)
- See Also:
StateManager
-
-
Field Summary
Fields Modifier and Type Field Description protected com.arjuna.ats.internal.txoj.LockConflictManagerconflictManagerstatic intdefaultRetryThe default retry value which will be used by setlock if no other value is given.static intdefaultSleepTimeThe default timeout value which will be used by setlock if no other value is given.protected static intDOZE_TIMEprotected booleanhasBeenLockedprotected com.arjuna.ats.internal.txoj.LockListlocksHeldprotected java.lang.ObjectlocksHeldLockObjectprotected LockStorelockStoreprotected java.lang.StringlockStoreTypeprotected java.util.concurrent.locks.ReentrantLockmutexprotected static booleannestedLockingprotected booleanobjectLockedprotected booleanstateLoadedprotected java.lang.StringsystemKeystatic intwaitTotalTimeoutBy default, threads which call setlock with conflicting locks will spin for the specified (or default) number of timeout and retry attempts, and then return failure if the lock could not be acquired.-
Fields inherited from class com.arjuna.ats.arjuna.StateManager
modifyingActions, objectModel, objectUid, usingActions
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedLockManager()protectedLockManager(int ot)protectedLockManager(int ot, int om)protectedLockManager(Uid storeUid)protectedLockManager(Uid storeUid, int ot)protectedLockManager(Uid storeUid, int ot, int om)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidcleanUp()protected booleandoRelease(Uid u, boolean all)voidfinalize()Cleanup.protected voidfreeState()protected booleaninitialise()protected booleanisAncestorOf(Lock heldLock)protected booleanloadState()protected intlockConflict(Lock otherLock)voidprint(java.io.PrintWriter strm)Print information about this instance on the specifiedPrintWriter.voidprintState(java.io.PrintWriter strm)Load state into object prior to doing the printing.booleanpropagate(Uid from, Uid to)Change lock ownership as nested action commits.booleanreleaseAll(Uid actionUid)Clear out all locks for a given action.booleanreleaselock(Uid lockUid)Release a SINGLE LOCK lock that has the given uid.intsetlock(Lock toSet)intsetlock(Lock toSet, int retry)intsetlock(Lock toSet, int retry, int sleepTime)protected voidterminate()This method *must* be called in the finalizer of every object.java.lang.Stringtype()Overload StateManager.type()protected booleanunloadState()-
Methods inherited from class com.arjuna.ats.arjuna.StateManager
activate, activate, cleanup, createLists, deactivate, deactivate, deactivate, destroy, disable, forgetAction, get_uid, getMutex, getObjectModel, getStore, getStoreRoot, loadObjectState, lockMutex, modified, objectType, packHeader, persist, rememberAction, restore_state, save_state, setStatus, setupStore, setupStore, setupStore, status, tryLockMutex, unlockMutex, unpackHeader
-
-
-
-
Field Detail
-
defaultRetry
public static final int defaultRetry
The default retry value which will be used by setlock if no other value is given.
-
defaultSleepTime
public static final int defaultSleepTime
The default timeout value which will be used by setlock if no other value is given. Milliseconds.
-
waitTotalTimeout
public static final int waitTotalTimeout
By default, threads which call setlock with conflicting locks will spin for the specified (or default) number of timeout and retry attempts, and then return failure if the lock could not be acquired. If the *retry* period is set to this value, then such threads will sleep for their total wait period and be signalled if the lock is released within this period of time.- Since:
- JTS 2.1.
- See Also:
setlock(com.arjuna.ats.txoj.Lock), Constant Field Values
-
lockStoreType
protected java.lang.String lockStoreType
-
systemKey
protected java.lang.String systemKey
-
locksHeld
protected com.arjuna.ats.internal.txoj.LockList locksHeld
-
locksHeldLockObject
protected final java.lang.Object locksHeldLockObject
-
lockStore
protected LockStore lockStore
-
stateLoaded
protected boolean stateLoaded
-
hasBeenLocked
protected boolean hasBeenLocked
-
objectLocked
protected boolean objectLocked
-
mutex
protected java.util.concurrent.locks.ReentrantLock mutex
-
conflictManager
protected com.arjuna.ats.internal.txoj.LockConflictManager conflictManager
-
DOZE_TIME
protected static final int DOZE_TIME
- See Also:
- Constant Field Values
-
nestedLocking
protected static final boolean nestedLocking
-
-
Constructor Detail
-
LockManager
protected LockManager(Uid storeUid)
-
LockManager
protected LockManager(Uid storeUid, int ot)
-
LockManager
protected LockManager(Uid storeUid, int ot, int om)
-
LockManager
protected LockManager()
-
LockManager
protected LockManager(int ot)
-
LockManager
protected LockManager(int ot, int om)
-
-
Method Detail
-
finalize
public void finalize() throws java.lang.ThrowableCleanup. Note we grab the semaphore before destroying the lock store to ensure the store is deleted cleanly.- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable
-
propagate
public boolean propagate(Uid from, Uid to)
Change lock ownership as nested action commits. All locks owned by the committing action have their owners changed to be the parent of the committing action. BasicAction ensures this is only called at nested commit. This function works by copying the old LockList pointer and then creating a new held lock list. Locks are then moved from the old to the new, propagating en route.
-
releaseAll
public final boolean releaseAll(Uid actionUid)
Clear out all locks for a given action. Should be triggered automatically at top-level commit but is also user callable so is potentially dangerous.
-
releaselock
public final boolean releaselock(Uid lockUid)
Release a SINGLE LOCK lock that has the given uid. Breaks two-phase locking rules so watch out!
-
setlock
public final int setlock(Lock toSet)
-
setlock
public final int setlock(Lock toSet, int retry)
-
setlock
public int setlock(Lock toSet, int retry, int sleepTime)
-
print
public void print(java.io.PrintWriter strm)
Print information about this instance on the specifiedPrintWriter.- Overrides:
printin classStateManager
-
printState
public void printState(java.io.PrintWriter strm)
Load state into object prior to doing the printing.
-
type
public java.lang.String type()
Overload StateManager.type()- Overrides:
typein classStateManager
-
terminate
protected void terminate()
This method *must* be called in the finalizer of every object. It ensures that any necessary cleanup work is done in the event that the object goes out of scope within a transaction.- Overrides:
terminatein classStateManager
-
cleanUp
protected final void cleanUp()
-
doRelease
protected boolean doRelease(Uid u, boolean all)
-
freeState
protected final void freeState()
-
initialise
protected final boolean initialise()
-
isAncestorOf
protected final boolean isAncestorOf(Lock heldLock)
-
loadState
protected boolean loadState()
-
lockConflict
protected final int lockConflict(Lock otherLock)
-
unloadState
protected final boolean unloadState()
-
-