동일한 클러스터의 다른 인스턴스에서 실행되는 JCR 노드에 콘텐츠를 추가 할 때 나는 실용적인 해결책을 찾기 위해 애를 먹고 있습니다.다중 클러스터 환경에서 JCR 잠금
here "여러 클러스터 노드가 동일한 노드에 쓸 때 해당 노드를 먼저 잠 가야합니다"라고 설명했습니다.
내가했던,하지만 난 여전히 아래와 같은 오래된 항목 예외를 얻을 :
javax.jcr.InvalidItemStateException: Unable to update a stale item: item.save()
at org.apache.jackrabbit.core.ItemSaveOperation.perform(ItemSaveOperation.java:262)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.ItemImpl.perform(ItemImpl.java:91)
at org.apache.jackrabbit.core.ItemImpl.save(ItemImpl.java:329)
at org.apache.jackrabbit.core.session.SessionSaveOperation.perform(SessionSaveOperation.java:65)
at org.apache.jackrabbit.core.session.SessionState.perform(SessionState.java:216)
at org.apache.jackrabbit.core.SessionImpl.perform(SessionImpl.java:361)
at org.apache.jackrabbit.core.SessionImpl.save(SessionImpl.java:812)
가 나는 또한 노드에게 here을 고정하는 방법에 대한 제안 된 접근 방식을 따르
(17.10 잠금 및 트랜잭션 참조) 여기이 과정이 두 개의 서로 다른 인스턴스에서 실행 될 수 있습니다
session.getRootNode().addNode("one").addMixin("mix:lockable");
session.save();
session.getWorkspace().getLockManager().lock("/one", true, true, 5000, session.getUserID());
session.save();// usually it explodes here
session.getNode("/one").addNode("two").addMixin("mix:lockable");
session.save();
session.getWorkspace().getLockManager().unlock("/one");
을 잠 온다 내 코드의 단순화 된 버전입니다 (CLU stered).
위의 코드에서 볼 수 있듯이 노드에 추가 된 잠금을 저장하려고 시도한 후에 폭발합니다. 그러나 이는 이전에 공유 한 link에 명시된 권장 사항입니다. 두 노드가 같은 노드에 잠금을 추가하려고했기 때문에 이것이 왜 폭발하는지 이해합니다. 예 1 잠금 다음 예 2 잠금 추가 첨가하여 경우에 따라서, 그리고 INSTANCE1 잠금이 노드에 부가 될 때, 두 등록 정보 (lockIsDeep : lockOwner 및 JCR JCR)을 첨가하여 노드를 수정 인스턴스 2이 잠금 장치를 추가하여 노드를 수정 했으므로 오래된 항목을 저장하려고 시도 했으므로 ... 어떻게 이런 일이 발생하지 않도록할까요?
많은 도움을 주셔서 감사합니다.
어쩌면
언제 새로 고침을 수행 하시겠습니까? 저장하기 직전이나 잠금 전에? 또한 문서 [여기] (https://docs.adobe.com/content/docs/en/spec/jsr170/javadocs/jcr-2.0/javax/jcr/Item.html#refresh (boolean))에는 모든 새로 고침 (false)이 적용되면 현재 세션에 대한 변경 사항이 지워집니다. 하지만 내 문제는 다른 세션에서 적용된 변경 사항과 관련이 있다고 생각하십니까? – zalis
저장하기 전에. 노드가 이미 수정 된 경우에는 사용할 수 없게됩니다. 어쩌면 맞을지도 모르겠지만, 실제로 새로 고침이 현재 세션에서 수정을 보류중인 모든 "재설정"사실을 오해했습니다. 솔직히 말해서 클러스터 환경에서 Jackrabbit을 사용한 적이 한번도 없습니다. – Nico