我已经使用下面的代码锁定了一个节点
ocm.lock("/path1", true, true);这里的第三个参数为true,表示它是一个Open-scoped Locks.
并且它被成功锁定。
但是现在我正在编写一个新的Java程序来解锁一个节点。
boolean b1 = ocm.isLocked("/path1");
System.out.println(b1); // RETURNS TRUE.
Node n = session.getNode("/path1");
Lock l = n.getLock();
ocm.unlock("/path1", l.getLockToken());但我在这里得到了一个例外。并且它不会解锁节点。
ERROR [main] ObjectContentManagerImpl.java:957 Cannot unlock path: /path1 Jcr user: admin has no lock token to do this. Lock was placed with user: admin
Exception in thread "main" org.apache.jackrabbit.ocm.exception.IllegalUnlockException
at org.apache.jackrabbit.ocm.manager.impl.ObjectContentManagerImpl.unlock(ObjectContentManagerImpl.java:958)
at ocm.UnlockNode.main(UnlockNode.java:36)如何解锁节点?
我的UnlockNode.java代码。
Repository repository = new URLRemoteRepository("http://localhost:8083/rmi");
Session session = repository.login(new SimpleCredentials("admin","admin".toCharArray()));
Mapper mapper = new AnnotationMapperImpl(classes);
ObjectContentManager ocm = new ObjectContentManagerImpl(session, mapper);
LockManager lm = session.getWorkspace().getLockManager();
lm.addLockToken("a096a79c-5edf-4a17-baa4-aba01f8013d8-J");
boolean b1 = ocm.isLocked("/path1");
System.out.println(b1);
try {
ocm.unlock("/path1","a096a79c-5edf-4a17-baa4-aba01f8013d8-J");
}catch (Exception e) {
System.out.println(e);
}谢谢。
发布于 2012-11-27 17:24:02
听起来你是想从另一个会话中获取锁...
java.lang.String getLockToken()
可以返回此锁的锁令牌。如果该锁是开放作用域的,并且当前会话持有该锁的锁令牌,或者存储库选择将该锁令牌公开给当前会话,则此方法将返回该锁令牌。否则,此方法将返回null。
要么在锁定后获取锁定令牌,然后将其存储起来,要么使用checkUnlock()方法编写您自己的LockManager,该方法可以执行您想要的操作。
https://stackoverflow.com/questions/13562656
复制相似问题