Places a lock on the node at absPath
. If successful, the node is said to hold the lock.
If isDeep
is true
then the lock applies to the specified node and all its descendant nodes; if false
, the lock applies only to the specified node. On a successful lock, the jcr:isDeep
property of the locked node is set to this value.
If isSessionScoped
is true
then this lock will expire upon the expiration of the current session (either through an automatic or explicit Session.logout
); if false, this lock does not expire until it is explicitly unlocked, it times out, or it is automatically unlocked due to a implementation-specific limitation.
The timeout parameter specifies the number of seconds until the lock times out (if it is not refreshed with Lock.refresh
in the meantime). An implementation may use this information as a hint or ignore it altogether. Clients can discover the actual timeout by inspecting the returned Lock
object.
The ownerInfo
parameter can be used to pass a string holding owner information relevant to the client. An implementation may either use or ignore this parameter. If it uses the parameter it must set the jcr:lockOwner
property of the locked node to this value and return this value on Lock.getLockOwner
. If it ignores this parameter the jcr:lockOwner
property (and the value returned by Lock.getLockOwner
) is set to either the value returned by Session.getUserID
of the owning session or an implementation-specific string identifying the owner.
The method returns a Lock
object representing the new lock. If the lock is open-scoped the returned lock will include a lock token. The lock token is also automatically added to the set of lock tokens held by the current session.
The addition or change of the properties jcr:isDeep
and jcr:lockOwner
are persisted immediately; there is no need to call save
.
It is possible to lock a node even if it is checked-in.
If this node is not of mixin node type mix:lockable
then an LockException
is thrown.
If this node is already locked (either because it holds a lock or a lock above it applies to it), a LockException
is thrown.
If isDeep
is true
and a descendant node of this node already holds a lock, then a LockException
is thrown.
If this node does not have a persistent state (has never been saved or otherwise persisted), a LockException
is thrown.
If the current session does not have sufficient privileges to place the lock, an AccessDeniedException
is thrown.
An UnsupportedRepositoryOperationException
is thrown if this implementation does not support locking.
An InvalidItemStateException is thrown if this node has pending unsaved changes.
A RepositoryException
is thrown if another error occurs.
@param absPath absolute path of node to be locked
@param isDeep if true
this lock will apply to this node and all its descendants; iffalse
, it applies only to this node.
@param isSessionScoped if true
, this lock expires with the current session; if false
itexpires when explicitly or automatically unlocked for some other reason.
@param timeoutHint desired lock timeout in seconds (servers are free toignore this value); specify {@link Long#MAX_VALUE} for no timeout.
@param ownerInfo a string containing owner informationsupplied by the client; servers are free to ignore this value.
@return A Lock
object containing a lock token.
@throws UnsupportedRepositoryOperationException if this implementation does not support locking.
@throws LockException if this node is not mix:lockable
or this node is already locked orisDeep
is true
and a descendant node of this node already holds a lock.
@throws AccessDeniedException if this session does not have permission to lock this node.
@throws InvalidItemStateException if this node has pending unsaved changes.
@throws RepositoryException if another error occurs.
|
|
|
|
|
|