4

Apache Jackrabbit を使用して、まったく同じパスに 2 つのノードを作成しました

root.addNode("hello");

ItemExistsException here で説明されているように、2番目の追加がスローされることを完全に期待していましたが、そうではありませんでした。

ノードのパスを印刷して何が起こっているのかを確認 /helloすると、最初のノードと /hello[2]2 番目のノードが表示されます

さらに、ノードを削除すると、セッションを保存する前にノードの存在を確認するテストに合格しますが、セッションを保存した後、同じ条件の 2 回目のテストに失敗します。

session.getNode("/hello").remove(); 
assertFalse(session.nodeExists("/hello"));

session.save(); 

assertFalse(session.nodeExists("/hello"));

何が起きてる?これは、Jackrabbit の仕様から逸脱したバグまたは何らかの機能ですか?

4

1 に答える 1

4

表示されているのは、JackrabbitとJCRの機能であるSameNameSiblingsです。JSR-170のリード開発者であるDavidNueschelerは、JackrabbitWIKIに次のように書いています。

同じ名前の兄弟(SNS)が仕様に導入され、XML用に設計および表現されたデータ構造との互換性が確保されたため、JCRにとって非常に価値がありますが、SNSにはリポジトリのかなりのオーバーヘッドと複雑さが伴います。

..。

XMLのインポートまたは既存のXMLSNSとの対話には、必要かつ有用な場合がありますが、SNSを使用したことはなく、「グリーンフィールド」データモデルで使用することもありません。

つまり、基本的に、同じ名前の複数の要素を持つことができるXMLデータに対応するために同じ名前の兄弟がいる理由です。DayのCQWCMで使用されている同じ名前のシビリングを見たことがありますが、全体的に使用することはお勧めできません。

于 2011-05-18T16:08:28.177 に答える