4

使用 Apache Jackrabbit,我在完全相同的路径上创建了两个节点

root.addNode("hello");

我完全期待第二个添加会ItemExistsException 像这里描述的那样抛出一个,但事实并非如此。

当我打印出节点的路径以尝试查看发生了什么时,我看到 /hello了第一个节点和 /hello[2]第二个节点

此外,当我删除节点时,在我保存会话之前检查节点是否存在的测试通过,但是在我保存会话之后,相同条件的第二次测试失败

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

session.save(); 

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

这里发生了什么?这是一个错误还是 Jackrabbit 的某些功能偏离了规范?

4

1 回答 1

4

您看到的是同名兄弟姐妹,这是 Jackrabbit 和 JCR 的一个功能。JSR-170 的首席开发人员 David Nuescheler 在Jackrabbit WIKI中写道:

虽然同名兄弟 (SNS) 已被引入规范,以允许与为 XML 设计和表达的数据结构兼容,因此对 JCR 非常有价值,但 SNS 为存储库带来了大量开销和复杂性。

...

对于 XML 的导入或与现有 XML SNS 的交互可能是必要且有用的,但我从未使用过 SNS,并且永远不会在我的“绿地”数据模型中使用。

所以基本上,你有同名的兄弟姐妹来容纳 XML 数据的原因,你可以有多个同名的元素。我已经看到在 Day 的 CQ WCM 中使用了同名的兄弟姐妹,但总体上似乎不鼓励使用它们。

于 2011-05-18T16:08:28.177 回答