Class LockServiceImpl
- All Implemented Interfaces:
CopyServicePolicies.OnCopyNodePolicy,NodeServicePolicies.BeforeDeleteNodePolicy,NodeServicePolicies.BeforeUpdateNodePolicy,NodeServicePolicies.OnCreateChildAssociationPolicy,NodeServicePolicies.OnMoveNodePolicy,AssociationPolicy,ClassPolicy,Policy,TransactionListener,VersionServicePolicies.OnCreateVersionPolicy,LockService,Extensible,org.alfresco.util.transaction.TransactionListener
- Author:
- Roy Wetherall
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.alfresco.repo.policy.Policy
Policy.Arg -
Field Summary
FieldsFields inherited from interface org.alfresco.repo.copy.CopyServicePolicies.OnCopyNodePolicy
ARG_0, ARG_1, QNAMEFields inherited from interface org.alfresco.service.cmr.lock.LockService
TIMEOUT_INFINITYFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.BeforeUpdateNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnCreateChildAssociationPolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnMoveNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.version.VersionServicePolicies.OnCreateVersionPolicy
QNAME -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidInvoked after transaction commit.voidInvoked after transaction rollback.voidbeforeCommit(boolean readOnly) Called before a transaction is committed.voidInvoked before transaction commit/rollback.voidbeforeDeleteNode(NodeRef nodeRef) Ensures that node is not locked.voidbeforeUpdateNode(NodeRef nodeRef) Ensures that node is not locked.voidcheckForLock(NodeRef nodeRef) Checks to see if the current user has access to the specified node.voidAfter calling suspendLocks turn the locks back on.voidflush()getAdditionalInfo(NodeRef nodeRef) Retrieve the additional lock info associated with a node ref.getCopyCallback(QName classRef, CopyDetails copyDetails) Called for all types and aspects before copying a node.intDeprecated.Uses search and does not report on ephemeral locks.Deprecated.Uses search and does not report on ephemeral locks.getLockState(NodeRef nodeRef) Retrieve the lock properties for the given NodeRef.getLockStatus(NodeRef nodeRef) Gets the lock status for the node reference relative to the current user.getLockStatus(NodeRef nodeRef, String userName) Gets the lock status for a node and a user namegetLockType(NodeRef nodeRef) Gets the lock type for the node indicated.<M extends Trait>
ExtendedTrait<M>voidinit()Initialise methods called by Spring frameworkbooleanIndicates if the node is locked for the current user.booleanisLockedAndReadOnly(NodeRef nodeRef) Indicates if the node is locked AND it's *not* a WRITE_LOCK for the current user.voidlock(Collection<NodeRef> nodeRefs, LockType lockType, int timeToExpire) Places a lock on all the nodes referenced in the passed list.voidPlaces a lock on a node.voidPlaces apersistentlock on a node.voidPlaces a lock on a node and optionally on all its children.voidPlaces a lock on a node.voidPlaces a lock on a node and optionally on all its children.voidlock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, String additionalInfo) Places a lock on a node.voidonCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode) Ensures that the parent is not locked.voidonCreateVersion(QName classRef, NodeRef versionableNode, Map<String, Serializable> versionProperties, PolicyScope nodeDetails) OnCreateVersion behaviour for the lock aspectvoidonMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef) Called when a node has been moved.voidsetAuthenticationService(AuthenticationService authenticationService) voidsetBehaviourFilter(BehaviourFilter behaviourFilter) voidsetEphemeralExpiryThreshold(int threshSecs) Specifies the maximum expiry time for which a request for an ephemeral lock will be honoured.voidsetLockableAspectInterceptor(LockableAspectInterceptor lockableAspectInterceptor) voidsetLockStore(LockStore lockStore) voidsetNodeService(NodeService nodeService) voidsetPolicyComponent(PolicyComponent policyComponent) voidsetSearchService(SearchService searchService) voidsetTenantService(TenantService tenantService) voidAllow the current transaction to update a node despite any locks that may be on it.voidunlock(Collection<NodeRef> nodeRefs) Removes a lock on the nodes provided.voidRemoves the lock on a node; if there is no lock then nothing is done.voidRemoves the lock on a node and optional on its children.voidRemoves the lock on a node and optional on its children.
-
Field Details
-
MAX_EPHEMERAL_LOCK_SECONDS
public static final int MAX_EPHEMERAL_LOCK_SECONDS- See Also:
-
-
Constructor Details
-
LockServiceImpl
public LockServiceImpl()
-
-
Method Details
-
setNodeService
-
setTenantService
-
setLockStore
-
setPolicyComponent
-
setLockableAspectInterceptor
-
setAuthenticationService
-
setSearchService
-
init
public void init()Initialise methods called by Spring framework -
lock
Description copied from interface:LockServicePlaces a lock on a node.The lock prevents any other user or process from comitting updates to the node until the lock is released.
The lock will be owned by the current user.
A lock made with this call will never expire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock type- See Also:
-
lock
Description copied from interface:LockServicePlaces apersistentlock on a node.The lock prevents any other user or process from comitting updates to the node until the lock is released.
The lock will be owned by the current user.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock typetimeToExpire- the number of seconds before the locks expires.- See Also:
-
lock
Description copied from interface:LockServicePlaces a lock on a node.The lock prevents any other user or process from comitting updates to the node until the lock is released.
The lock will be owned by the current user.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock typetimeToExpire- the number of seconds before the locks expires.lifetime- allows persistent or ephemeral locks to be specified.- See Also:
-
lock
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, boolean lockChildren) Description copied from interface:LockServicePlaces a lock on a node and optionally on all its children.The lock prevents any other user or process from committing updates to the node until the lock is released.
The lock will be owned by the current user.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock typetimeToExpire- the number of seconds before the locks expires.lifetime- allows persistent or ephemeral locks to be specified.lockChildren- if true indicates that all the children (and grandchildren, etc) of the node will also be locked, false otherwise- See Also:
-
lock
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, String additionalInfo) Description copied from interface:LockServicePlaces a lock on a node.The lock prevents any other user or process from comitting updates to the node until the lock is released.
The lock will be owned by the current user.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock typetimeToExpire- the number of seconds before the locks expires.lifetime- allows persistent or ephemeral locks to be specified.additionalInfo- additional lock data stored alongside core lock data such as timeToExpire. NOTE: only valid for ephemeral locks.- See Also:
-
lock
public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, boolean lockChildren) throws UnableToAquireLockException Description copied from interface:LockServicePlaces a lock on a node and optionally on all its children.The lock prevents any other user or process from committing updates to the node until the lock is released.
The lock will be owned by the current user.
If any one of the child locks can not be taken then an exception will be raised and all locks cancelled.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRef- a reference to a nodelockType- the lock typetimeToExpire- the number of seconds before the locks expires.lockChildren- if true indicates that all the children (and grandchildren, etc) of the node will also be locked, false otherwise- Throws:
UnableToAquireLockException- thrown if the lock could not be obtained- See Also:
-
lock
public void lock(Collection<NodeRef> nodeRefs, LockType lockType, int timeToExpire) throws UnableToAquireLockException Description copied from interface:LockServicePlaces a lock on all the nodes referenced in the passed list.The lock prevents any other user or process from comitting updates to the node until the lock is released.
The lock will be owned by the current user.
If the time to expire is 0 then the lock will never expire. Otherwise the timeToExpire indicates the number of seconds before the lock expires. When a lock expires the lock is considered to have been released.
If the node is already locked and the current user is the lock owner then the lock will be renewed with the passed timeToExpire.
- Specified by:
lockin interfaceLockService- Parameters:
nodeRefs- a list of node referenceslockType- the type of lock being createdtimeToExpire- the number of seconds before the locks expires.- Throws:
UnableToAquireLockException- thrown if the lock could not be obtained- See Also:
-
unlock
Description copied from interface:LockServiceRemoves the lock on a node; if there is no lock then nothing is done.The user must have sufficient permissions to remove the lock (ie: be the owner of the lock or have admin rights) and the node must not be checked out. Otherwise an exception will be raised.
- Specified by:
unlockin interfaceLockService- Parameters:
nodeRef- a reference to a node- Throws:
UnableToReleaseLockException- thrown if the lock could not be released- See Also:
-
unlock
Description copied from interface:LockServiceRemoves the lock on a node and optional on its children.The user must have sufficient permissions to remove the lock(s) (ie: be the owner of the lock(s) or have admin rights) and the node(s) must not be checked out. Otherwise an exception will be raised.
If one of the child nodes is not locked then it will be ignored and the process continue without error.
If the lock on any one of the child nodes cannot be released then an exception will be raised.
- Specified by:
unlockin interfaceLockService- Parameters:
nodeRef- a node referencelockChildren- if true then all the children (and grandchildren, etc) of the node will also be unlocked, false otherwise- Throws:
UnableToReleaseLockException- thrown if the lock could not be released- See Also:
-
unlock
public void unlock(NodeRef nodeRef, boolean unlockChildren, boolean allowCheckedOut) throws UnableToReleaseLockException Description copied from interface:LockServiceRemoves the lock on a node and optional on its children.The user must have sufficient permissions to remove the lock(s) (ie: be the owner of the lock(s) or have admin rights) otherwise an exception will be raised.
If one of the child nodes is not locked then it will be ignored and the process continue without error.
If the lock on any one of the child nodes cannot be released then an exception will be raised.
- Specified by:
unlockin interfaceLockService- Parameters:
nodeRef- a node referenceunlockChildren- if true then all the children (and grandchildren, etc) of the node will also be unlocked, false otherwiseallowCheckedOut- is it permissable for a node to be a checked out node?- Throws:
UnableToReleaseLockException- thrown if the lock could not be released- See Also:
-
unlock
Description copied from interface:LockServiceRemoves a lock on the nodes provided.The user must have sufficient permissions to remove the locks (ie: be the owner of the locks or have admin rights) otherwise an exception will be raised.
If one of the nodes is not locked then it will be ignored and the process will continue without an error.
If the lock on any one of the nodes cannot be released than an exception will be raised and the process rolled back.
- Specified by:
unlockin interfaceLockService- Parameters:
nodeRefs- the node references- Throws:
UnableToReleaseLockException- thrown if the lock could not be released- See Also:
-
getLockStatus
Description copied from interface:LockServiceGets the lock status for the node reference relative to the current user.- Specified by:
getLockStatusin interfaceLockService- Parameters:
nodeRef- the node reference- Returns:
- the lock status
- See Also:
-
getLockStatus
Gets the lock status for a node and a user name- Specified by:
getLockStatusin interfaceLockService- Parameters:
nodeRef- the node referenceuserName- the user name- Returns:
- the lock status
- See Also:
-
getLockType
Description copied from interface:LockServiceGets the lock type for the node indicated.Returns null if the node is not locked.
Throws an exception if the node does not have the lock aspect.
- Specified by:
getLockTypein interfaceLockService- Parameters:
nodeRef- the node reference- Returns:
- the lock type, null is returned if the object in question has no lock
- See Also:
-
checkForLock
Checks to see if the current user has access to the specified node.If the node is locked by another user then a NodeLockedException is thrown.
Gets the user reference from the current session.
- Specified by:
checkForLockin interfaceLockService- Parameters:
nodeRef- the node reference- Throws:
NodeLockedException- thrown if the node is locked by someone else. This is based on the lock status of the lock, the user ref and the lock type.
-
onCreateChildAssociation
Ensures that the parent is not locked.- Specified by:
onCreateChildAssociationin interfaceNodeServicePolicies.OnCreateChildAssociationPolicy- Parameters:
childAssocRef- the child association that has been createdisNewNode- true if the node is new or false if the node is being linked in- See Also:
-
beforeUpdateNode
Ensures that node is not locked.- Specified by:
beforeUpdateNodein interfaceNodeServicePolicies.BeforeUpdateNodePolicy- Parameters:
nodeRef- reference to the node being updated- See Also:
-
beforeDeleteNode
Ensures that node is not locked.- Specified by:
beforeDeleteNodein interfaceNodeServicePolicies.BeforeDeleteNodePolicy- Parameters:
nodeRef- the node reference- See Also:
-
getCopyCallback
Description copied from interface:CopyServicePolicies.OnCopyNodePolicyCalled for all types and aspects before copying a node.- Specified by:
getCopyCallbackin interfaceCopyServicePolicies.OnCopyNodePolicy- Parameters:
classRef- the type or aspect qualified namecopyDetails- the details of the impending copy- Returns:
- Returns
DoNothingCopyBehaviourCallback - See Also:
-
onCreateVersion
public void onCreateVersion(QName classRef, NodeRef versionableNode, Map<String, Serializable> versionProperties, PolicyScope nodeDetails) OnCreateVersion behaviour for the lock aspectEnsures that the property values of the lock aspect are not 'frozen' in the version store.
- Specified by:
onCreateVersionin interfaceVersionServicePolicies.OnCreateVersionPolicy- Parameters:
classRef- the class referenceversionableNode- the versionable node referenceversionProperties- the version propertiesnodeDetails- the details of the node to be versioned
-
getLocks
Deprecated.Uses search and does not report on ephemeral locks. -
isLocked
Indicates if the node is locked for the current user.- Specified by:
isLockedin interfaceLockService- Returns:
-
isLockedAndReadOnly
Indicates if the node is locked AND it's *not* a WRITE_LOCK for the current user.- Specified by:
isLockedAndReadOnlyin interfaceLockService- Returns:
-
getLocks
Deprecated.Uses search and does not report on ephemeral locks. -
onMoveNode
Description copied from interface:NodeServicePolicies.OnMoveNodePolicyCalled when a node has been moved.- Specified by:
onMoveNodein interfaceNodeServicePolicies.OnMoveNodePolicy- Parameters:
oldChildAssocRef- the child association reference prior to the movenewChildAssocRef- the child association reference after the move
-
suspendLocks
public void suspendLocks()Description copied from interface:LockServiceAllow the current transaction to update a node despite any locks that may be on it.Used for the system to be able to update locked nodes.
- Specified by:
suspendLocksin interfaceLockService
-
enableLocks
public void enableLocks()Description copied from interface:LockServiceAfter calling suspendLocks turn the locks back on.- Specified by:
enableLocksin interfaceLockService
-
getAdditionalInfo
Description copied from interface:LockServiceRetrieve the additional lock info associated with a node ref.- Specified by:
getAdditionalInfoin interfaceLockService- Parameters:
nodeRef- NodeRef- Returns:
- Additional info string or null
-
getLockState
Description copied from interface:LockServiceRetrieve the lock properties for the given NodeRef.Do NOT use the returned information to determine the actual state of a lock, use
LockService.getLockStatus(NodeRef)and other LockService methods for this purpose.The returned data is intended for information purposes only, e.g. returning the timeout in a WebDAV response.
- Specified by:
getLockStatein interfaceLockService- Parameters:
nodeRef- NodeRef- Returns:
- LockState
-
setBehaviourFilter
-
getBehaviourFilter
-
flush
public void flush()- Specified by:
flushin interfaceTransactionListener
-
beforeCommit
public void beforeCommit(boolean readOnly) Description copied from interface:TransactionListenerCalled before a transaction is committed.All transaction resources are still available.
- Specified by:
beforeCommitin interfaceTransactionListener- Specified by:
beforeCommitin interfaceorg.alfresco.util.transaction.TransactionListener- Parameters:
readOnly- true if the transaction is read-only
-
beforeCompletion
public void beforeCompletion()Description copied from interface:TransactionListenerInvoked before transaction commit/rollback. Will be called afterTransactionListener.beforeCommit(boolean)even ifTransactionListener.beforeCommit(boolean)failed.All transaction resources are still available.
- Specified by:
beforeCompletionin interfaceTransactionListener- Specified by:
beforeCompletionin interfaceorg.alfresco.util.transaction.TransactionListener
-
afterCommit
public void afterCommit()Description copied from interface:TransactionListenerInvoked after transaction commit.Any exceptions generated here will only be logged and will have no effect on the state of the transaction.
Although all transaction resources are still available, this method should be used only for cleaning up resources after a commit has occured.
- Specified by:
afterCommitin interfaceTransactionListener- Specified by:
afterCommitin interfaceorg.alfresco.util.transaction.TransactionListener
-
afterRollback
public void afterRollback()Description copied from interface:TransactionListenerInvoked after transaction rollback.Any exceptions generated here will only be logged and will have no effect on the state of the transaction.
Although all transaction resources are still available, this method should be used only for cleaning up resources after a rollback has occured.
- Specified by:
afterRollbackin interfaceTransactionListener- Specified by:
afterRollbackin interfaceorg.alfresco.util.transaction.TransactionListener
-
setEphemeralExpiryThreshold
public void setEphemeralExpiryThreshold(int threshSecs) Description copied from interface:LockServiceSpecifies the maximum expiry time for which a request for an ephemeral lock will be honoured. Requests for ephemeral locks with expiry times greater than this value will be automatically converted to a request for a persistent lock.- Specified by:
setEphemeralExpiryThresholdin interfaceLockService- Parameters:
threshSecs- int
-
getEphemeralExpiryThreshold
public int getEphemeralExpiryThreshold() -
getTrait
- Specified by:
getTraitin interfaceExtensible
-