Class LockServiceImpl

java.lang.Object
org.alfresco.repo.lock.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

Simple Lock service implementation
Author:
Roy Wetherall
  • Field Details

    • MAX_EPHEMERAL_LOCK_SECONDS

      public static final int MAX_EPHEMERAL_LOCK_SECONDS
      See Also:
  • Constructor Details

    • LockServiceImpl

      public LockServiceImpl()
  • Method Details

    • setNodeService

      public void setNodeService(NodeService nodeService)
    • setTenantService

      public void setTenantService(TenantService tenantService)
    • setLockStore

      public void setLockStore(LockStore lockStore)
    • setPolicyComponent

      public void setPolicyComponent(PolicyComponent policyComponent)
    • setLockableAspectInterceptor

      public void setLockableAspectInterceptor(LockableAspectInterceptor lockableAspectInterceptor)
    • setAuthenticationService

      public void setAuthenticationService(AuthenticationService authenticationService)
    • setSearchService

      public void setSearchService(SearchService searchService)
    • init

      public void init()
      Initialise methods called by Spring framework
    • lock

      public void lock(NodeRef nodeRef, LockType lockType)
      Description copied from interface: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      See Also:
    • lock

      public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire)
      Description copied from interface: LockService
      Places a persistent 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      timeToExpire - the number of seconds before the locks expires.
      See Also:
    • lock

      public void lock(NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime)
      Description copied from interface: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      timeToExpire - 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: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      timeToExpire - 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: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      timeToExpire - 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: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      lockType - the lock type
      timeToExpire - 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: LockService
      Places 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:
      lock in interface LockService
      Parameters:
      nodeRefs - a list of node references
      lockType - the type of lock being created
      timeToExpire - the number of seconds before the locks expires.
      Throws:
      UnableToAquireLockException - thrown if the lock could not be obtained
      See Also:
    • unlock

      public void unlock(NodeRef nodeRef) throws UnableToReleaseLockException
      Description copied from interface: LockService
      Removes 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:
      unlock in interface LockService
      Parameters:
      nodeRef - a reference to a node
      Throws:
      UnableToReleaseLockException - thrown if the lock could not be released
      See Also:
    • unlock

      public void unlock(NodeRef nodeRef, boolean lockChildren) throws UnableToReleaseLockException
      Description copied from interface: LockService
      Removes 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:
      unlock in interface LockService
      Parameters:
      nodeRef - a node reference
      lockChildren - 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: LockService
      Removes 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:
      unlock in interface LockService
      Parameters:
      nodeRef - a node reference
      unlockChildren - if true then all the children (and grandchildren, etc) of the node will also be unlocked, false otherwise
      allowCheckedOut - 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

      public void unlock(Collection<NodeRef> nodeRefs) throws UnableToReleaseLockException
      Description copied from interface: LockService
      Removes 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:
      unlock in interface LockService
      Parameters:
      nodeRefs - the node references
      Throws:
      UnableToReleaseLockException - thrown if the lock could not be released
      See Also:
    • getLockStatus

      public LockStatus getLockStatus(NodeRef nodeRef)
      Description copied from interface: LockService
      Gets the lock status for the node reference relative to the current user.
      Specified by:
      getLockStatus in interface LockService
      Parameters:
      nodeRef - the node reference
      Returns:
      the lock status
      See Also:
    • getLockStatus

      public LockStatus getLockStatus(NodeRef nodeRef, String userName)
      Gets the lock status for a node and a user name
      Specified by:
      getLockStatus in interface LockService
      Parameters:
      nodeRef - the node reference
      userName - the user name
      Returns:
      the lock status
      See Also:
    • getLockType

      public LockType getLockType(NodeRef nodeRef)
      Description copied from interface: LockService
      Gets 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:
      getLockType in interface LockService
      Parameters:
      nodeRef - the node reference
      Returns:
      the lock type, null is returned if the object in question has no lock
      See Also:
    • checkForLock

      public void checkForLock(NodeRef nodeRef) throws NodeLockedException
      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:
      checkForLock in interface LockService
      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

      public void onCreateChildAssociation(ChildAssociationRef childAssocRef, boolean isNewNode)
      Ensures that the parent is not locked.
      Specified by:
      onCreateChildAssociation in interface NodeServicePolicies.OnCreateChildAssociationPolicy
      Parameters:
      childAssocRef - the child association that has been created
      isNewNode - true if the node is new or false if the node is being linked in
      See Also:
    • beforeUpdateNode

      public void beforeUpdateNode(NodeRef nodeRef)
      Ensures that node is not locked.
      Specified by:
      beforeUpdateNode in interface NodeServicePolicies.BeforeUpdateNodePolicy
      Parameters:
      nodeRef - reference to the node being updated
      See Also:
    • beforeDeleteNode

      public void beforeDeleteNode(NodeRef nodeRef)
      Ensures that node is not locked.
      Specified by:
      beforeDeleteNode in interface NodeServicePolicies.BeforeDeleteNodePolicy
      Parameters:
      nodeRef - the node reference
      See Also:
    • getCopyCallback

      public CopyBehaviourCallback getCopyCallback(QName classRef, CopyDetails copyDetails)
      Description copied from interface: CopyServicePolicies.OnCopyNodePolicy
      Called for all types and aspects before copying a node.
      Specified by:
      getCopyCallback in interface CopyServicePolicies.OnCopyNodePolicy
      Parameters:
      classRef - the type or aspect qualified name
      copyDetails - 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 aspect

      Ensures that the property values of the lock aspect are not 'frozen' in the version store.

      Specified by:
      onCreateVersion in interface VersionServicePolicies.OnCreateVersionPolicy
      Parameters:
      classRef - the class reference
      versionableNode - the versionable node reference
      versionProperties - the version properties
      nodeDetails - the details of the node to be versioned
    • getLocks

      @Deprecated public List<NodeRef> getLocks(StoreRef storeRef)
      Deprecated.
      Uses search and does not report on ephemeral locks.
    • isLocked

      public boolean isLocked(NodeRef nodeRef)
      Indicates if the node is locked for the current user.
      Specified by:
      isLocked in interface LockService
      Returns:
    • isLockedAndReadOnly

      public boolean isLockedAndReadOnly(NodeRef nodeRef)
      Indicates if the node is locked AND it's *not* a WRITE_LOCK for the current user.
      Specified by:
      isLockedAndReadOnly in interface LockService
      Returns:
    • getLocks

      @Deprecated public List<NodeRef> getLocks(StoreRef storeRef, LockType lockType)
      Deprecated.
      Uses search and does not report on ephemeral locks.
    • onMoveNode

      public void onMoveNode(ChildAssociationRef oldChildAssocRef, ChildAssociationRef newChildAssocRef)
      Description copied from interface: NodeServicePolicies.OnMoveNodePolicy
      Called when a node has been moved.
      Specified by:
      onMoveNode in interface NodeServicePolicies.OnMoveNodePolicy
      Parameters:
      oldChildAssocRef - the child association reference prior to the move
      newChildAssocRef - the child association reference after the move
    • suspendLocks

      public void suspendLocks()
      Description copied from interface: LockService
      Allow 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:
      suspendLocks in interface LockService
    • enableLocks

      public void enableLocks()
      Description copied from interface: LockService
      After calling suspendLocks turn the locks back on.
      Specified by:
      enableLocks in interface LockService
    • getAdditionalInfo

      public String getAdditionalInfo(NodeRef nodeRef)
      Description copied from interface: LockService
      Retrieve the additional lock info associated with a node ref.

      Specified by:
      getAdditionalInfo in interface LockService
      Parameters:
      nodeRef - NodeRef
      Returns:
      Additional info string or null
    • getLockState

      public LockState getLockState(NodeRef nodeRef)
      Description copied from interface: LockService
      Retrieve 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:
      getLockState in interface LockService
      Parameters:
      nodeRef - NodeRef
      Returns:
      LockState
    • setBehaviourFilter

      public void setBehaviourFilter(BehaviourFilter behaviourFilter)
    • getBehaviourFilter

      public BehaviourFilter getBehaviourFilter()
    • flush

      public void flush()
      Specified by:
      flush in interface TransactionListener
    • beforeCommit

      public void beforeCommit(boolean readOnly)
      Description copied from interface: TransactionListener
      Called before a transaction is committed.

      All transaction resources are still available.

      Specified by:
      beforeCommit in interface TransactionListener
      Specified by:
      beforeCommit in interface org.alfresco.util.transaction.TransactionListener
      Parameters:
      readOnly - true if the transaction is read-only
    • beforeCompletion

      public void beforeCompletion()
      Description copied from interface: TransactionListener
      Invoked before transaction commit/rollback. Will be called after TransactionListener.beforeCommit(boolean) even if TransactionListener.beforeCommit(boolean) failed.

      All transaction resources are still available.

      Specified by:
      beforeCompletion in interface TransactionListener
      Specified by:
      beforeCompletion in interface org.alfresco.util.transaction.TransactionListener
    • afterCommit

      public void afterCommit()
      Description copied from interface: TransactionListener
      Invoked 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:
      afterCommit in interface TransactionListener
      Specified by:
      afterCommit in interface org.alfresco.util.transaction.TransactionListener
    • afterRollback

      public void afterRollback()
      Description copied from interface: TransactionListener
      Invoked 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:
      afterRollback in interface TransactionListener
      Specified by:
      afterRollback in interface org.alfresco.util.transaction.TransactionListener
    • setEphemeralExpiryThreshold

      public void setEphemeralExpiryThreshold(int threshSecs)
      Description copied from interface: LockService
      Specifies 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:
      setEphemeralExpiryThreshold in interface LockService
      Parameters:
      threshSecs - int
    • getEphemeralExpiryThreshold

      public int getEphemeralExpiryThreshold()
    • getTrait

      public <M extends Trait> ExtendedTrait<M> getTrait(Class<? extends M> traitAPI)
      Specified by:
      getTrait in interface Extensible