2011-05-18 69 views
4

使用Apache兔崽子,我创建了两个节点在完全相同的路径Apache Jackrabbit - 重复节点?

root.addNode("hello"); 

我满以为第二除了抛出ItemExistsExceptionas described here,但事实并非如此。

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

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

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

session.save(); 

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

这是怎么回事?这是一个错误还是偏离规范的Jackrabbit的某些功能?

回答

4

你看到的是同名兄弟姐妹,这是Jackrabbit和JCR的一个特色。大卫Nuescheler,JSR-170的主要开发人员在Jackrabbit WIKI写道:

虽然同名兄弟(SNS)已经被引入规范允许用而设计的,并表示通过XML,因此数据结构的兼容性对于JCR来说是非常有价值的,SNS会为存储库带来大量的开销和复杂性。

...

对于XML的进口或与现有的XML SNS互动或许必要和有益的,但我从来没有使用SNS,也绝不会在我的“绿色领域”的数据模型。

所以基本上,你有相同的名称兄弟姐妹来容纳XML数据,你可以有多个相同名称的元素的原因。我已经看到了Day的CQ WCM中使用的同名名字,但是他们的整体使用似乎不受欢迎。