org.apache.jackrabbit.core.lock
Class XALockManager

java.lang.Object
  extended by org.apache.jackrabbit.core.lock.XALockManager
All Implemented Interfaces:
InternalXAResource, LockManager

public class XALockManager
extends Object
implements LockManager, InternalXAResource

Session-local lock manager that implements the semantical changes inside transactions. This manager validates lock/unlock operations inside its view of the locking space.


Constructor Summary
XALockManager(LockManagerImpl lockMgr)
          Create a new instance of this class.
 
Method Summary
 void addLockToken(SessionImpl session, String lt)
          Invoked by a session to inform that a lock token has been added.
 void afterOperation(TransactionContext tx)
          Invoked after one of the InternalXAResource.prepare(org.apache.jackrabbit.core.TransactionContext), InternalXAResource.commit(org.apache.jackrabbit.core.TransactionContext) or InternalXAResource.rollback(org.apache.jackrabbit.core.TransactionContext) method has been called.
 void associate(TransactionContext tx)
          Associate this resource with a transaction.
 void beforeOperation(TransactionContext tx)
          Invoked before one of the InternalXAResource.prepare(org.apache.jackrabbit.core.TransactionContext), InternalXAResource.commit(org.apache.jackrabbit.core.TransactionContext) or InternalXAResource.rollback(org.apache.jackrabbit.core.TransactionContext) method is called.
 void checkLock(NodeImpl node)
          Check whether the node given is locked by somebody else than the current session.
 void checkLock(Path path, Session session)
          Check whether the path given is locked by somebody else than the session described.
 void checkUnlock(Session session, NodeImpl node)
          Returns true if the specified session is allowed to unlock the node; otherwise returns false.
 void commit(TransactionContext tx)
          Commit transaction.
 boolean differentXAEnv(LockInfo info)
          Return a flag indicating whether a lock info belongs to a different XA environment.
 Lock getLock(NodeImpl node)
          Returns the Lock object that applies to a node.
 Lock[] getLocks(SessionImpl session)
          Returns all locks owned by the specified session.
 boolean holdsLock(NodeImpl node)
          Returns true if the node given holds a lock; otherwise returns false.
 boolean isLocked(NodeImpl node)
          Returns true if this node is locked either as a result of a lock held by this node or by a deep lock on a node above this node; otherwise returns false
 Lock lock(NodeImpl node, boolean isDeep, boolean isSessionScoped)
          Lock a node.
 Lock lock(NodeImpl node, boolean isDeep, boolean isSessionScoped, long timoutHint, String ownerInfo)
          Lock a node.
 void prepare(TransactionContext tx)
          Prepare transaction.
 void removeLockToken(SessionImpl session, String lt)
          Invoked by a session to inform that a lock token has been removed.
 void rollback(TransactionContext tx)
          Rollback transaction.
 void unlock(NodeImpl node)
          Removes the lock on a node given by its path.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

XALockManager

public XALockManager(LockManagerImpl lockMgr)
Create a new instance of this class.

Parameters:
lockMgr - lockMgr global lock manager
Method Detail

lock

public Lock lock(NodeImpl node,
                 boolean isDeep,
                 boolean isSessionScoped)
          throws LockException,
                 RepositoryException
Lock a node. Checks whether the node is not locked and then returns a lock object for this node.

Specified by:
lock in interface LockManager
Parameters:
node - node
isDeep - whether the lock applies to this node only
isSessionScoped - whether the lock is session scoped
Returns:
lock object
Throws:
LockException - if this node already is locked, or some descendant node is locked and isDeep is true
RepositoryException
See Also:
Node.lock(boolean, boolean)

lock

public Lock lock(NodeImpl node,
                 boolean isDeep,
                 boolean isSessionScoped,
                 long timoutHint,
                 String ownerInfo)
          throws LockException,
                 RepositoryException
Description copied from interface: LockManager
Lock a node. Checks whether the node is not locked and then returns a lock object for this node.

Specified by:
lock in interface LockManager
Parameters:
node - Node to create the lock for.
isDeep - whether the lock applies to this node only
isSessionScoped - whether the lock is session scoped
timoutHint - Desired lock timeout in seconds.
ownerInfo - Optional string acting as information about the owner.
Returns:
the lock.
Throws:
LockException - if this node already is locked, or some descendant node is locked and isDeep is true
RepositoryException
See Also:
LockManager.lock(NodeImpl, boolean, boolean, long, String)

getLock

public Lock getLock(NodeImpl node)
             throws LockException,
                    RepositoryException
Returns the Lock object that applies to a node. This may be either a lock on this node itself or a deep lock on a node above this node.

Specified by:
getLock in interface LockManager
Parameters:
node - node
Returns:
lock object
Throws:
LockException - if this node is not locked
RepositoryException
See Also:
Node.getLock()

getLocks

public Lock[] getLocks(SessionImpl session)
                throws RepositoryException
Returns all locks owned by the specified session.

Specified by:
getLocks in interface LockManager
Parameters:
session - session
Returns:
an array of lock objects
Throws:
RepositoryException - if an error occurs
See Also:
SessionImpl.getLocks()

unlock

public void unlock(NodeImpl node)
            throws LockException,
                   RepositoryException
Removes the lock on a node given by its path.

Specified by:
unlock in interface LockManager
Parameters:
node - node
Throws:
LockException - if this node is not locked or the session does not have the correct lock token
RepositoryException
See Also:
Node.unlock()

holdsLock

public boolean holdsLock(NodeImpl node)
                  throws RepositoryException
Returns true if the node given holds a lock; otherwise returns false.

Specified by:
holdsLock in interface LockManager
Parameters:
node - node
Returns:
true if the node given holds a lock; otherwise returns false
Throws:
RepositoryException - If an exception occurs.
See Also:
Node.holdsLock()

isLocked

public boolean isLocked(NodeImpl node)
                 throws RepositoryException
Returns true if this node is locked either as a result of a lock held by this node or by a deep lock on a node above this node; otherwise returns false

Specified by:
isLocked in interface LockManager
Parameters:
node - node
Returns:
true if this node is locked either as a result of a lock held by this node or by a deep lock on a node above this node; otherwise returns false
Throws:
RepositoryException - If an exception occurs.
See Also:
Node.isLocked()

checkLock

public void checkLock(NodeImpl node)
               throws LockException,
                      RepositoryException
Check whether the node given is locked by somebody else than the current session. Access is allowed if the node is not locked or if the session itself holds the lock to this node, i.e. the session contains the lock token for the lock.

Specified by:
checkLock in interface LockManager
Parameters:
node - node to check
Throws:
LockException - if write access to the specified node is not allowed
RepositoryException - if some other error occurs

checkLock

public void checkLock(Path path,
                      Session session)
               throws LockException,
                      RepositoryException
Check whether the path given is locked by somebody else than the session described. Access is allowed if the node is not locked or if the session itself holds the lock to this node, i.e. the session contains the lock token for the lock.

Specified by:
checkLock in interface LockManager
Parameters:
path - path to check
session - session
Throws:
LockException - if write access to the specified path is not allowed
RepositoryException - if some other error occurs

checkUnlock

public void checkUnlock(Session session,
                        NodeImpl node)
                 throws LockException,
                        RepositoryException
Returns true if the specified session is allowed to unlock the node; otherwise returns false.

Specified by:
checkUnlock in interface LockManager
Parameters:
session - session
node - node
Throws:
LockException - if write access to the specified path is not allowed
RepositoryException - if some other error occurs

addLockToken

public void addLockToken(SessionImpl session,
                         String lt)
                  throws RepositoryException
Invoked by a session to inform that a lock token has been added.

Specified by:
addLockToken in interface LockManager
Parameters:
session - session that has a added lock token
lt - added lock token
Throws:
LockException
RepositoryException

removeLockToken

public void removeLockToken(SessionImpl session,
                            String lt)
                     throws RepositoryException
Invoked by a session to inform that a lock token has been removed.

Specified by:
removeLockToken in interface LockManager
Parameters:
session - session that has a removed lock token
lt - removed lock token
Throws:
LockException
RepositoryException

associate

public void associate(TransactionContext tx)
Associate this resource with a transaction. All further operations on the object should be interpreted as part of this transaction and changes recorded in some attribute of the transaction context.

Specified by:
associate in interface InternalXAResource
Parameters:
tx - transaction context, if null disassociate

beforeOperation

public void beforeOperation(TransactionContext tx)
Invoked before one of the InternalXAResource.prepare(org.apache.jackrabbit.core.TransactionContext), InternalXAResource.commit(org.apache.jackrabbit.core.TransactionContext) or InternalXAResource.rollback(org.apache.jackrabbit.core.TransactionContext) method is called.

Specified by:
beforeOperation in interface InternalXAResource
Parameters:
tx - transaction context

prepare

public void prepare(TransactionContext tx)
             throws TransactionException
Prepare transaction. The transaction is identified by a transaction context.

Specified by:
prepare in interface InternalXAResource
Parameters:
tx - transaction context
Throws:
TransactionException - if an error occurs

commit

public void commit(TransactionContext tx)
Commit transaction. The transaction is identified by a transaction context. If the method throws, other resources get their changes rolled back.

This will finish the update and unlock the shared lock manager.

Specified by:
commit in interface InternalXAResource
Parameters:
tx - transaction context

rollback

public void rollback(TransactionContext tx)
Rollback transaction. The transaction is identified by a transaction context.

This will undo all updates and unlock the shared lock manager.

Specified by:
rollback in interface InternalXAResource
Parameters:
tx - transaction context.

afterOperation

public void afterOperation(TransactionContext tx)
Invoked after one of the InternalXAResource.prepare(org.apache.jackrabbit.core.TransactionContext), InternalXAResource.commit(org.apache.jackrabbit.core.TransactionContext) or InternalXAResource.rollback(org.apache.jackrabbit.core.TransactionContext) method has been called.

Specified by:
afterOperation in interface InternalXAResource
Parameters:
tx - transaction context

differentXAEnv

public boolean differentXAEnv(LockInfo info)
Return a flag indicating whether a lock info belongs to a different XA environment.



Copyright © 2004-2010 The Apache Software Foundation. All Rights Reserved.