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 客户端怎么设置主体