Apache Jackrabbit - 重复节点?

Posted

技术标签:

【中文标题】Apache Jackrabbit - 重复节点?【英文标题】:Apache Jackrabbit - Duplicate Node? 【发布时间】:2011-08-28 03:52:57 【问题描述】:

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

root.addNode("hello");

我完全期待第二个添加会抛出 ItemExistsException as described here,但它没有。

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

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

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

session.save(); 

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

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

【问题讨论】:

【参考方案1】:

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

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

...

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

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

【讨论】:

以上是关于Apache Jackrabbit - 重复节点?的主要内容,如果未能解决你的问题,请参考以下文章

如何学习使用内容存储库和 Apache JackRabbit?

Apache Jackrabbit 和 Jackrabbit Oak 有啥区别?

如何在不关闭 Jackrabbit 的情况下备份 apache Jackrabbit 存储库?

apache jackrabbit 实现 webdav 客户端怎么设置主体

Apache Jackrabbit Oak 1.5.9 发布

如何在 jackrabbit 中获取旧版本节点的属性?