1

私の質問は:(子)凍結ノードのバージョンをどのように読み取るのですか?
詳細:
-次の状況を想像してみましょう:ノードAには2つの子ノードBとノードCがあります。
-3つのノードはすべてバージョン管理可能なノードです(ミックスインタイプ)
-ノードAには1.0から1.6までの7つのバージョンがあるとします:バージョン1.2ノードBを追加し、バージョン1.4でノードCを追加しまし
た。バージョン1.5でノードAの「出力」を出力するルーチンがあります。

 //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? 
 }

ありがとうございました。

4

1 に答える 1

3

親の履歴の各バージョンには、バージョンが作成されたとき(たとえば、親ノードがチェックインされたとき)に存在していた親のスナップショットを表す「凍結ノード」が含まれます。このフリーズされたノードには、子のスナップショット(子がバージョン管理可能でなかった場合)または「nt:versionedChild」ノード(子がバージョン管理可能だった場合)のいずれかである子ノードが含まれます。この" nt:versionedChild"ノードには、子のバージョン履歴jcr:childVersionHistoryを指す単一の""REFERENCEプロパティが含まれています。

JSR-283仕様のセクション3.13.10には、この構造を示す非常に優れた図が含まれています。

nt:versionedChild「 」ノードは子のバージョン履歴内の特定のバージョンを指していないこと注意してください。つまり、親がチェックインされたときに存在していた子のバージョンを判別する必要があります。結局のところ、この場合はバージョン管理可能です子、親および子のバージョン履歴は独立しており、ノードは独立してチェックインされます。(この理由は、アプリケーションが1回のセッションで親ノードと子ノードの両方を変更してから、親をチェックインしてから子をチェックインするか、子をチェックインしてから親をチェックインすることができるという事実に起因する場合もあります。 。)

これを行う1つの方法は、子のバージョン履歴で各バージョンの作成日を確認することです。これは、親が作成されたときに存在していた子バージョンのみを示すため、理想的ではありません。タイムスタンプの比較は、バージョン管理された子の前または後に親がチェックインされたかどうかに依存するため、これはあいまいになる可能性があります。アプリケーション内には、これらのあいまいさを回避するのに役立つ規則がある場合があります。

おそらく、より良いオプションは、バージョンラベルを使用し、親バージョンと子バージョンに同じラベルを適用することです。(これは、後でではなく、ノードにチェックインした直後に行う方がおそらく簡単です。)次に、親の特定のバージョンを取得したら、そのラベルを取得し、それを使用して、子のバージョンで対応する子のバージョンを見つけます。履歴(を使用VersionHistory.getVersionByLabel(String))。

于 2012-10-19T12:45:03.473 に答える