2012-10-19 2 views
1

제 질문은 : (자식) 고정 노드의 버전을 어떻게 읽습니까?
자세한 내용 : -
는 다음과 같은 상황을 상상할 수 있습니다 : 노드 A가 두 아이 노드 B와 노드 C.
- 모든 세 개의 노드가 버전 관리 노드 (믹스 인 유형이)
이다 -의 노드 A가 7 개 버전이 있다고 가정 해 봅시다 1.0에서 1.6까지 : 버전 1.2에서 노드 B를 추가했습니다. 버전 1.4에서 노드 C를 추가했습니다.
버전 1.5에서 노드 A의 "출력"을 인쇄하는 루틴이 있습니다.
(JCR) 고정 된 자식 노드의 버전

//I already obtained the Version object version associated to node A version 1.5 
NodeIterator nodeIterator = version.getNodes(); 
while (nodeIterator.hasNext()) { 
    Node currentNode = nodeIterator.nextNode(); 
    System.out.println("Node: "+currentNode.getPath()); 
    // I can see that some of the nodes correspond to children (versions) of 
    //node B and C ..how can I get their version? 
} 


감사합니다.

답변

3

부모 기록에있는 각 버전에는 버전 생성 당시 (예 : 부모 노드가 체크인되었을 때)의 부모 스냅 샷을 나타내는 "고정 노드"가 포함됩니다. 이 고정 노드에는 자식의 스냅 샷 (자식이 버전화할 수없는 경우) 또는 "nt : versionedChild"노드 (자식이 버전 가능할 경우) 중 하나 인 자식 노드가 포함됩니다. 이 "nt:versionedChild"노드에는 버전 기록을 가리키는 단일 "jcr:childVersionHistory"REFERENCE 속성이 있습니다.

Section 3.13.10의 JSR-283 사양에는이 구조를 보여주는 꽤 좋은 다이어그램이 들어 있습니다. 은 "nt:versionedChild"노드는 부모가 체크 된 시간에 존재하는 아이의 버전을 확인해야 함을 의미 아이의 버전 기록에서 특정 버전하지 점을 수행

참고. 결국 버전 관리가 가능한 하위 노드의 경우 부모 및 자식 버전 기록은 독립적이며 노드는 독립적으로 검사됩니다. (이유는 응용 프로그램이 단일 세션에서 부모 노드와 자식 노드를 모두 변경할 수 있다는 사실에서 유래 할 수 있습니다. 그 다음에 부모를 체크인 한 다음 자식을 체크인했거나 자식을 체크인 한 다음)

이렇게하는 한 가지 방법은 하위 버전 기록에서 각 버전의 생성 날짜를 보는 것입니다. 이는 부모가 생성되었을 당시에 어떤 자식 버전이 있었는지를 알려주기 때문에 이상적이지 않습니다. 타임 스탬프 비교는 부모가 버전이있는 자식 앞이나 뒤에 체크인되었는지 여부에 따라 달라 지므로 모호 할 수 있습니다. 응용 프로그램 내에서 이러한 모호성을 해결하는 데 도움이되는 규칙이있을 수 있습니다.

아마도 더 나은 옵션은 버전 라벨를 사용하여 상위 버전 및 하위 버전으로 같은 라벨을 적용하는 것입니다. (이것은 나중에 노드가 아닌 노드를 체크인 한 직후에 더 쉽게 할 수 있습니다.) 그런 다음 부모의 특정 버전을 얻으면 레이블을 가져 와서이를 사용하여 하위 버전에서 해당 하위 버전을 찾습니다 기록 (VersionHistory.getVersionByLabel(String) 사용).

+0

안녕 랜달, 답장을 보내 주셔서 감사합니다. 나는 ("jcr : childVersionHistory")와 함께 놀고 있었고 솔직히 말해 버전 히스토리가 아닌 버전으로 직접 갈 가능성이 있다면 나에게 소리가 더 좋을 것입니다. 당신이 말했듯이, 우리는 응용 프로그램에서 약간의 논리/컨벤션이 필요하지 않다면.) 나는 버전 라벨 아이디어 (고맙습니다!)를 좋아하고 그것을 채택 할 것입니다. – silverb77

+1

버전 기록을 직접 참조하는 것이 훨씬 더 효과적이라는 데 전적으로 동의합니다.그러나 스펙을 구현 한 후에 부모를 위해 새 버전을 작성할 때 어떤 하위 버전을 참조해야하는지 알지 못한다고 생각합니다. 예를 들어, 하위 항목은 상위 항목 바로 뒤에 체크인 할 수 있지만 상위 항목은 이전 하위 항목을 가리 킵니다. 엉망이 될 수 있습니다. –

관련 문제