Client-Browser Server-A Server-B Lock-Request -> AbstractWebdavServlet.doLock DavResourceImpl.lock org.apache.jackrabbit.jcr2spi.JcrLockManager.lock org.apache.jackrabbit.jcr2spi.NodeImpl.lock org.apache.jackrabbit.jcr2spi.lock.LockManagerImpl.lock org.apache.jackrabbit.jcr2spi.WorkspaceManager.execute(org.apache.jackrabbit.jcr2spi.operation.LockOperation) org.apache.jackrabbit.jcr2spi.WorkspaceManager.visit(org.apache.jackrabbit.jcr2spi.operation.LockOperation) org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.lock -> AbstractWebdavServlet.doLock DefaultItemCollection.lock org.apache.jackrabbit.core.lock.SessionLockManager.lock org.apache.jackrabbit.core.lock.XALockImpl org.apache.jackrabbit.core.lock.LockManagerImpl.internalLock ActiveLock lock = new JcrActiveLock(jcrLock) getSession().addReference() JcrActiveLock.getToken LockTokenMapper.getDavLocktoken org.apache.jackrabbit.core.lock.XALockImpl.getLockToken -> 0089610c-02e5-43cd-bfec-3a90361350f4-0 return OPENPREFIX + Text.escape(0089610c-02e5-43cd-bfec-3a90361350f4-0) //opaquelocktoken:dccce564-412e-11e1-b969-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4-0 String lockToken = request.getLockToken -> opaquelocktoken:dccce564-412e-11e1-b969-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4-0 org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.retrieveLockInfo Lock jcrLock <- org.apache.jackrabbit.jcr2spi.lock.LockManagerImpl$LockImpl@f1d6954e ActiveLock activeLock = new JcrActiveLock(jcrLock) response.setHeader -> activeLock.getLockToken LockTokenManager.getDavLocktoken (org.apache.jackrabbit.jcr2spi.lock.LockManagerImpl$LockImpl).getLockToken updateLockInfo Lockstate.realoadLockInfo wspManager.getLockInfo org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.getLockInfo org.apache.jackrabbit.spi2dav.RepositoryServiceImpl.retrieveLockInfo AbstractWebdavServlet.doPropFind -> LOCKDISCOVERY org.apache.jackrabbit.webdav.jcr.AbstractResource.initProperties properties.add(new LockDiscovery(getLocks())); org.apache.jackrabbit.webdav.jcr.AbstractResource.getLocks // write lock (either exclusive or session-scoped). getLock(Type.WRITE, Scope.EXCLUSIVE); org.apache.jackrabbit.webdav.jcr.DefaultItemCollection.getLock jcrLock -> org.apache.jackrabbit.core.lock.XALockImpl ActiveLock lock = new JcrActiveLock(jcrLock); org.apache.jackrabbit.webdav.jcr.lock.JcrActiveLock.toXml org.apache.jackrabbit.webdav.jcr.lock.JcrActiveLock.getToken LockTokenMapper.getDavLocktoken return SESSPREFIX + Text.escape(lock.getNode().getIdentifier()); //opaquelocktoken:4403ef44-4124-11e1-b965-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4 return new org.apache.jackrabbit.spi2dav.LockInfoImpl() activeLock -> org.apache.jackrabbit.webdav.lock.LockDiscovery$ALockImpl [D:locktoken: null] [[#text: opaquelocktoken:4403ef44-4124-11e1-b965-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4]] nodeId -> 0089610c-02e5-43cd-bfec-3a90361350f4 sessionLockTokens -> [opaquelocktoken:dccce564-412e-11e1-b969-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4-0] getLockInfo (org.apache.jackrabbit.spi2dav.LockInfoImpl).getLockToken isSessionScoped -> false ((org.apache.jackrabbit.webdav.lock.LockDiscovery$ALockImpl)activeLock).getToken return opaquelocktoken:4403ef44-4124-11e1-b965-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4 return OPENPREFIX + Text.escape(opaquelocktoken:4403ef44-4124-11e1-b965-00059a3c7a00:0089610c-02e5-43cd-bfec-3a90361350f4)