1

以下のコードを使用してノードをロックしました

ocm.lock("/path1", true, true);

ここで、3 番目の引数は 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);
}

ありがとう。

4

1 に答える 1

0

別のセッションからロックを取得しようとしているようです...

java.lang.String getLockToken()

このロックのロック トークンを返す場合があります。このロックがオープン スコープであり、現在のセッションがこのロックのロック トークンを保持しているか、リポジトリがロック トークンを現在のセッションに公開することを選択している場合、このメソッドはそのロック トークンを返します。それ以外の場合、このメソッドは null を返します。

ロック後にロックトークンを取得して後で保存するか、必要な処理を行う checkUnlock() メソッドを使用して独自の LockManager を記述します。

于 2012-11-27T09:24:02.167 に答える