Class LockServiceImpl

    • Nested Class Summary

      • Nested classes/interfaces inherited from interface org.alfresco.repo.policy.Policy

        Policy.Arg
    • Constructor Summary

      Constructors 
      Constructor Description
      LockServiceImpl()  
    • Method Summary

      All Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method Description
      void afterCommit()
      Invoked after transaction commit.
      void afterRollback()
      Invoked after transaction rollback.
      void beforeCommit​(boolean readOnly)
      Called before a transaction is committed.
      void beforeCompletion()
      Invoked before transaction commit/rollback.
      void beforeDeleteNode​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Ensures that node is not locked.
      void beforeUpdateNode​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Ensures that node is not locked.
      void checkForLock​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Checks to see if the current user has access to the specified node.
      void enableLocks()
      After calling suspendLocks turn the locks back on.
      void flush()  
      java.lang.String getAdditionalInfo​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Retrieve the additional lock info associated with a node ref.
      BehaviourFilter getBehaviourFilter()  
      CopyBehaviourCallback getCopyCallback​(org.alfresco.service.namespace.QName classRef, CopyDetails copyDetails)
      Called for all types and aspects before copying a node.
      int getEphemeralExpiryThreshold()  
      java.util.List<org.alfresco.service.cmr.repository.NodeRef> getLocks​(org.alfresco.service.cmr.repository.StoreRef storeRef)
      Deprecated.
      Uses search and does not report on ephemeral locks.
      java.util.List<org.alfresco.service.cmr.repository.NodeRef> getLocks​(org.alfresco.service.cmr.repository.StoreRef storeRef, LockType lockType)
      Deprecated.
      Uses search and does not report on ephemeral locks.
      LockState getLockState​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Retrieve the lock properties for the given NodeRef.
      LockStatus getLockStatus​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Gets the lock status for the node reference relative to the current user.
      LockStatus getLockStatus​(org.alfresco.service.cmr.repository.NodeRef nodeRef, java.lang.String userName)
      Gets the lock status for a node and a user name
      LockType getLockType​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Gets the lock type for the node indicated.
      <M extends Trait>
      ExtendedTrait<M>
      getTrait​(java.lang.Class<? extends M> traitAPI)  
      void init()
      Initialise methods called by Spring framework
      boolean isLocked​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Indicates if the node is locked for the current user.
      boolean isLockedAndReadOnly​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Indicates if the node is locked AND it's *not* a WRITE_LOCK for the current user.
      void lock​(java.util.Collection<org.alfresco.service.cmr.repository.NodeRef> nodeRefs, LockType lockType, int timeToExpire)
      Places a lock on all the nodes referenced in the passed list.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType)
      Places a lock on a node.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType, int timeToExpire)
      Places a persistent lock on a node.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType, int timeToExpire, boolean lockChildren)
      Places a lock on a node and optionally on all its children.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime)
      Places a lock on a node.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, boolean lockChildren)
      Places a lock on a node and optionally on all its children.
      void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, LockType lockType, int timeToExpire, Lifetime lifetime, java.lang.String additionalInfo)
      Places a lock on a node.
      void onCreateChildAssociation​(org.alfresco.service.cmr.repository.ChildAssociationRef childAssocRef, boolean isNewNode)
      Ensures that the parent is not locked.
      void onCreateVersion​(org.alfresco.service.namespace.QName classRef, org.alfresco.service.cmr.repository.NodeRef versionableNode, java.util.Map<java.lang.String,​java.io.Serializable> versionProperties, PolicyScope nodeDetails)
      OnCreateVersion behaviour for the lock aspect
      void onMoveNode​(org.alfresco.service.cmr.repository.ChildAssociationRef oldChildAssocRef, org.alfresco.service.cmr.repository.ChildAssociationRef newChildAssocRef)
      Called when a node has been moved.
      void setAuthenticationService​(AuthenticationService authenticationService)  
      void setBehaviourFilter​(BehaviourFilter behaviourFilter)  
      void setEphemeralExpiryThreshold​(int threshSecs)
      Specifies the maximum expiry time for which a request for an ephemeral lock will be honoured.
      void setLockableAspectInterceptor​(LockableAspectInterceptor lockableAspectInterceptor)  
      void setLockStore​(LockStore lockStore)  
      void setNodeService​(org.alfresco.service.cmr.repository.NodeService nodeService)  
      void setPolicyComponent​(PolicyComponent policyComponent)  
      void setSearchService​(org.alfresco.service.cmr.search.SearchService searchService)  
      void setTenantService​(org.alfresco.repo.tenant.TenantService tenantService)  
      void suspendLocks()
      Allow the current transaction to update a node despite any locks that may be on it.
      void unlock​(java.util.Collection<org.alfresco.service.cmr.repository.NodeRef> nodeRefs)
      Removes a lock on the nodes provided.
      void unlock​(org.alfresco.service.cmr.repository.NodeRef nodeRef)
      Removes the lock on a node; if there is no lock then nothing is done.
      void unlock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, boolean lockChildren)
      Removes the lock on a node and optional on its children.
      void unlock​(org.alfresco.service.cmr.repository.NodeRef nodeRef, boolean unlockChildren, boolean allowCheckedOut)
      Removes the lock on a node and optional on its children.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • MAX_EPHEMERAL_LOCK_SECONDS

        public static final int MAX_EPHEMERAL_LOCK_SECONDS
        See Also:
        Constant Field Values
    • Constructor Detail

      • LockServiceImpl

        public LockServiceImpl()
    • Method Detail

      • setNodeService

        public void setNodeService​(org.alfresco.service.cmr.repository.NodeService nodeService)
      • setTenantService

        public void setTenantService​(org.alfresco.repo.tenant.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​(org.alfresco.service.cmr.search.SearchService searchService)
      • init

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

        public void lock​(org.alfresco.service.cmr.repository.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:
        LockService.lock(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.lock.LockType, int)
      • lock

        public void lock​(org.alfresco.service.cmr.repository.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:
        LockService.lock(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.lock.LockType, int, Lifetime, String)
      • lock

        public void lock​(org.alfresco.service.cmr.repository.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:
        LockService.lock(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.lock.LockType, int, Lifetime, boolean)
      • lock

        public void lock​(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                         LockType lockType,
                         int timeToExpire,
                         Lifetime lifetime,
                         java.lang.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:
        LockService.lock(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.lock.LockType, int, Lifetime, String)
      • lock

        public void lock​(org.alfresco.service.cmr.repository.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:
        LockService.lock(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.lock.LockType, int, boolean)
      • lock

        public void lock​(java.util.Collection<org.alfresco.service.cmr.repository.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:
        LockService.lock(java.util.Collection, org.alfresco.service.cmr.lock.LockType, int)
      • unlock

        public void unlock​(org.alfresco.service.cmr.repository.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:
        LockService.unlock(NodeRef)
      • unlock

        public void unlock​(org.alfresco.service.cmr.repository.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:
        LockService.unlock(org.alfresco.service.cmr.repository.NodeRef, boolean)
      • unlock

        public void unlock​(org.alfresco.service.cmr.repository.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:
        LockService.unlock(NodeRef, boolean, boolean)
      • unlock

        public void unlock​(java.util.Collection<org.alfresco.service.cmr.repository.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:
        LockService.unlock(Collection)
      • getLockStatus

        public LockStatus getLockStatus​(org.alfresco.service.cmr.repository.NodeRef nodeRef,
                                        java.lang.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:
        LockService.getLockStatus(NodeRef)
      • getLockType

        public LockType getLockType​(org.alfresco.service.cmr.repository.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:
        LockService.getLockType(NodeRef)
      • checkForLock

        public void checkForLock​(org.alfresco.service.cmr.repository.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​(org.alfresco.service.cmr.repository.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:
        checkForLock(NodeRef)
      • onCreateVersion

        public void onCreateVersion​(org.alfresco.service.namespace.QName classRef,
                                    org.alfresco.service.cmr.repository.NodeRef versionableNode,
                                    java.util.Map<java.lang.String,​java.io.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 java.util.List<org.alfresco.service.cmr.repository.NodeRef> getLocks​(org.alfresco.service.cmr.repository.StoreRef storeRef)
        Deprecated.
        Uses search and does not report on ephemeral locks.
      • isLocked

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

        public boolean isLockedAndReadOnly​(org.alfresco.service.cmr.repository.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 java.util.List<org.alfresco.service.cmr.repository.NodeRef> getLocks​(org.alfresco.service.cmr.repository.StoreRef storeRef,
                                                                                    LockType lockType)
        Deprecated.
        Uses search and does not report on ephemeral locks.
      • onMoveNode

        public void onMoveNode​(org.alfresco.service.cmr.repository.ChildAssociationRef oldChildAssocRef,
                               org.alfresco.service.cmr.repository.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 java.lang.String getAdditionalInfo​(org.alfresco.service.cmr.repository.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​(org.alfresco.service.cmr.repository.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)
      • 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
      • 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()