Class LockManagerImpl

    • Method Detail

      • close

        public void close()
        Close this lock manager. Writes back all changes.
      • copyOpenScopedLocksFrom

        public void copyOpenScopedLocksFrom​(LockManagerImpl source)
        Helper method that copies all the active open-scoped locks from the given source to this lock manager. This method is used when backing up repositories, and only works correctly when the source lock manager belongs to the original copy of the workspace being backed up.
        Parameters:
        source - source lock manager
        See Also:
        RepositoryCopier
      • getLockInfo

        public LockInfo getLockInfo​(NodeId id)
                             throws RepositoryException
        Return the most appropriate lock information for a node. This is either the lock info for the node itself, if it is locked, or a lock info for one of its parents, if that is deep locked.
        Returns:
        lock info or null if node is not locked
        Throws:
        RepositoryException - if an error occurs
      • 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(String, boolean, boolean, long, String)
      • unlock

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

        In order to prevent deadlocks from within the synchronous dispatching of events, content modifications should not be made from within code sections that hold monitors. (see #JCR-194)

        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()
      • 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
      • checkLock

        protected void checkLock​(LockInfo info,
                                 Session session)
                          throws LockException,
                                 RepositoryException
        Check whether a lock info allows access to a session. May be overridden by subclasses to allow access to nodes for sessions other than the lock holder itself.

        Default implementation allows access to the lock holder only.

        Parameters:
        info - info to check
        session - session
        Throws:
        LockException - if write access to the specified path is not allowed
        RepositoryException - if some other error occurs
      • checkUnlock

        protected void checkUnlock​(LockInfo info,
                                   Session session)
                            throws LockException,
                                   RepositoryException
        Check whether a session is allowed to unlock a node. May be overridden by subclasses to allow this to sessions other than the lock holder itself.

        Default implementation allows unlocking to the lock holder only.

        Parameters:
        info - info to check
        session - session
        Throws:
        LockException - if unlocking is denied
        RepositoryException - if some other error occurs
      • beginUpdate

        public void beginUpdate()
        Start an update operation. This will acquire the lock on the lock map and disable saving the lock map file.
      • endUpdate

        public void endUpdate()
        End an update operation. This will save the lock map file and release the lock on the lock map.
      • cancelUpdate

        public void cancelUpdate()
        Cancel an update operation. This will release the lock on the lock map.
      • writeLockProperties

        protected void writeLockProperties​(NodeImpl node,
                                           String lockOwner,
                                           boolean isDeep)
                                    throws RepositoryException
        Add the lock related properties to the target node.
        Parameters:
        node -
        lockOwner -
        isDeep -
        Throws:
        RepositoryException
      • setEventChannel

        public void setEventChannel​(LockEventChannel eventChannel)
        Set a lock event channel
        Parameters:
        eventChannel - lock event channel
      • toString

        public String toString()
        Dump contents of path map and elements included to a string.
        Overrides:
        toString in class Object