com.arjuna.ats.txoj
Class Lock

java.lang.Object
  extended bycom.arjuna.ats.arjuna.StateManager
      extended bycom.arjuna.ats.txoj.Lock

public class Lock
extends StateManager

Instances of this class (or derived user classes) are used when trying to set a lock. The default implementation provides a single-write/multiple-reader policy. However, by overridding the appropriate methods, other, type-specific concurrency control locks can be implemented.

Since:
JTS 1.0.
Version:
$Id: Lock.java 2342 2006-03-30 13:06:17Z $
Author:
Mark Little (mark@arjuna.com)

Field Summary
 
Fields inherited from class com.arjuna.ats.arjuna.StateManager
modifyingActions, objectName, objectUid, smAttributes, usingActions
 
Constructor Summary
Lock()
          Create a new lock.
Lock(int lm)
          Create a new Lock object and initialise it.
Lock(Uid storeUid)
          This is used when re-initialising a Lock after retrieval from the object store.
 
Method Summary
 void changeHierarchy(ActionHierarchy newOwner)
          Change the transaction hierarchy associated with the lock to that provided.
 boolean conflictsWith(Lock otherLock)
          Implementation of Lock conflict check.
 boolean equals(Lock otherLock)
          Are the two locks equal?
 boolean equals(java.lang.Object otherLock)
          Overrides Object.equals()
 void finalize()
          General clean up as Lock is deleted.
 ActionHierarchy getAllOwners()
           
 Uid getCurrentOwner()
           
 int getCurrentStatus()
           
protected  Lock getLink()
          Get the next lock in the chain.
 int getLockMode()
           
 boolean modifiesObject()
          Does this lock imply a modification of the object it is applied to? For example, a READ lock would return false, but a WRITE lock would return true.
 void print(java.io.PrintWriter strm)
          functions inherited from StateManager
 void propagate()
          Propagate the lock.
 boolean restore_state(InputObjectState os, int ot)
          Carefully restore the state of a Lock.
 boolean save_state(OutputObjectState os, int ot)
          Save the state of a lock object.
protected  void setLink(Lock pointTo)
          Set the next lock in the chain.
 java.lang.String toString()
          Overrides Object.toString()
 java.lang.String type()
          Overrides StateManager.type()
 
Methods inherited from class com.arjuna.ats.arjuna.StateManager
activate, activate, attributes, cleanup, deactivate, deactivate, deactivate, destroy, disable, forgetAction, get_uid, getMutex, getStore, getStoreRoot, loadObjectState, lockMutex, modified, ObjectType, packHeader, persist, rememberAction, setStatus, setupStore, setupStore, status, terminate, tryLockMutex, unlockMutex, unpackHeader
 
Methods inherited from class java.lang.Object
clone, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

Lock

public Lock()
Create a new lock.


Lock

public Lock(int lm)
Create a new Lock object and initialise it. Mode is based upon argument. The value of BasicAction.Current determines the values of the remainder of the fields. If there is no action running the owner field is set to be the application uid created when the application starts.


Lock

public Lock(Uid storeUid)
This is used when re-initialising a Lock after retrieval from the object store.

Method Detail

finalize

public void finalize()
              throws java.lang.Throwable
General clean up as Lock is deleted.

Overrides:
finalize in class StateManager
Throws:
java.lang.Throwable

getLockMode

public final int getLockMode()
Returns:
the mode this lock is currently in, e.g., LockMode.READ.

getCurrentOwner

public final Uid getCurrentOwner()
Returns:
the identity of the lock's current owner (the transaction id).

getAllOwners

public final ActionHierarchy getAllOwners()
Returns:
the transaction hierarchy associated with this lock.

getCurrentStatus

public final int getCurrentStatus()
Returns:
the lock's current status.

changeHierarchy

public final void changeHierarchy(ActionHierarchy newOwner)
Change the transaction hierarchy associated with the lock to that provided.


propagate

public final void propagate()
Propagate the lock.


modifiesObject

public boolean modifiesObject()
Does this lock imply a modification of the object it is applied to? For example, a READ lock would return false, but a WRITE lock would return true.

Returns:
true if this lock implies the object's state will be modified, false otherwise.

conflictsWith

public boolean conflictsWith(Lock otherLock)
Implementation of Lock conflict check. Returns TRUE if there is conflict FALSE otherwise. Does not take account of relationship in the atomic action hierarchy since this is a function of LockManager.

Returns:
true if this lock conflicts with the parameter, false otherwise.

equals

public boolean equals(java.lang.Object otherLock)
Overrides Object.equals()


equals

public boolean equals(Lock otherLock)
Are the two locks equal?

Returns:
true if the locks are equal, false otherwise.

toString

public java.lang.String toString()
Overrides Object.toString()


print

public void print(java.io.PrintWriter strm)
functions inherited from StateManager

Overrides:
print in class StateManager

restore_state

public boolean restore_state(InputObjectState os,
                             int ot)
Carefully restore the state of a Lock.

Overrides:
restore_state in class StateManager
Returns:
true if successful, false otherwise.

save_state

public boolean save_state(OutputObjectState os,
                          int ot)
Save the state of a lock object.

Overrides:
save_state in class StateManager
Returns:
true if successful, false otherwise.

type

public java.lang.String type()
Overrides StateManager.type()

Overrides:
type in class StateManager

getLink

protected Lock getLink()
Get the next lock in the chain.


setLink

protected void setLink(Lock pointTo)
Set the next lock in the chain.