You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2013/07/29 15:32:38 UTC
svn commit: r1508053 - in /jackrabbit/trunk:
jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java
jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Author: reschke
Date: Mon Jul 29 13:32:37 2013
New Revision: 1508053
URL: http://svn.apache.org/r1508053
Log:
JCR-3633: If header field sent with PROPFIND (for lock discovery)
Modified:
jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java
jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
Modified: jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java?rev=1508053&r1=1508052&r2=1508053&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/lock/OpenScopedLockTest.java Mon Jul 29 13:32:37 2013
@@ -18,8 +18,11 @@ package org.apache.jackrabbit.jcr2spi.lo
import javax.jcr.Node;
import javax.jcr.RepositoryException;
+import javax.jcr.Session;
import javax.jcr.lock.Lock;
import javax.jcr.lock.LockException;
+import javax.jcr.lock.LockManager;
+import javax.jcr.nodetype.NodeType;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -216,4 +219,64 @@ public class OpenScopedLockTest extends
throw e;
}
}
+
+ public void testIsLockedWhileAnotherLockIsPresent() throws Exception {
+
+ Session s = lockedNode.getSession();
+ LockManager lm = s.getWorkspace().getLockManager();
+
+ String l2token = null;
+ String l2path = null;
+
+ String path = lockedNode.getPath();
+ String lockToken = lock.getLockToken();
+ assertTrue(lm.isLocked(path));
+ assertTrue(lm.holdsLock(path));
+ lm.removeLockToken(lockToken);
+
+ Session anotherSession = null;
+ try {
+ // check lock is seen by new session
+ anotherSession = getHelper().getSuperuserSession();
+ LockManager anotherLockManager = anotherSession.getWorkspace().getLockManager();
+ assertTrue(anotherLockManager.isLocked(path));
+ assertTrue(anotherLockManager.holdsLock(path));
+
+ // create a second lock
+ Node l2node = anotherSession.getNode(path).getParent().addNode("second-lock");
+ l2node.addMixin(NodeType.MIX_LOCKABLE);
+ anotherSession.save();
+ l2path = l2node.getPath();
+
+ Lock l2 = anotherLockManager.lock(l2path, false, false, Long.MAX_VALUE, "foobar");
+ l2token = l2.getLockToken();
+ assertNotNull(l2token);
+ anotherSession.save();
+
+ anotherSession.refresh(false);
+ assertTrue(anotherLockManager.isLocked(path));
+ assertTrue(anotherLockManager.holdsLock(path));
+
+ // try to unlock the lock obtained from the other session
+ anotherLockManager.addLockToken(lockToken);
+ anotherLockManager.unlock(path);
+ anotherSession.save();
+
+ // unlock "my" lock
+ anotherLockManager.unlock(l2path);
+ anotherSession.save();
+ l2path = null;
+ }
+ finally {
+ if (anotherSession != null) {
+ anotherSession.logout();
+ }
+ if (l2path != null && l2token != null) {
+ superuser.refresh(false);
+ LockManager sulm = superuser.getWorkspace().getLockManager();
+ sulm.addLockToken(l2token);
+ sulm.unlock(l2path);
+ }
+ }
+ }
}
\ No newline at end of file
Modified: jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java?rev=1508053&r1=1508052&r2=1508053&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2dav/RepositoryServiceImpl.java Mon Jul 29 13:32:37 2013
@@ -1516,8 +1516,7 @@ public class RepositoryServiceImpl imple
try {
String uri = getItemUri(nodeId, sessionInfo);
method = new PropFindMethod(uri, nameSet, DEPTH_0);
- // TODO: not correct. pass tokens in order avoid new session to be created TOBEFIXED
- initMethod(method, sessionInfo, true);
+ initMethod(method, sessionInfo, false);
getClient(sessionInfo).executeMethod(method);
method.checkSuccess();