Jackrabbit Oak 合并不保存更改

Posted

技术标签:

【中文标题】Jackrabbit Oak 合并不保存更改【英文标题】:Jackrabbit Oak merge not saving changes 【发布时间】:2018-01-17 10:30:56 【问题描述】:

我刚开始研究 Jackrabbit Oak 1.7.5,但无法保存更改 - 此测试在最后一个断言上失败:

public class JCRTest 

@Test
public void testCommit() throws CommitFailedException 
    final NodeStore ns = new MemoryNodeStore();
    final String imagesFolder = "images";
    NodeState rootState = ns.getRoot();

    //newly created store does not have nodes
    assertThat(rootState.getChildNode(imagesFolder).exists(), is(equalTo(false)));

    NodeBuilder rootBuilder = rootState.builder();
    //adding a node called 'images'
    rootBuilder.child(imagesFolder);

    //it is still not going to be shown since we are working in our own 'state'
    assertThat(rootState.getChildNode(imagesFolder).exists(), is(equalTo(false)));

    //merging the changes into root
    ns.merge(rootBuilder, EmptyHook.INSTANCE, CommitInfo.EMPTY);

    //expecting to see the 'images' folder
    assertThat(rootState.getChildNode(imagesFolder).exists(), is(equalTo(true)));


【问题讨论】:

所以...将最后一行更改为:assertThat(ns.getRoot().getChildNode(imagesFolder).exists(), is(equalTo(true))); 使其工作,但我仍然想了解其原因。 【参考方案1】:

NodeState(测试中的 rootState)是存储库的快照。合并更改后,您需要再次获取存储库的负责人(即在断言之前再次执行rootState = ns.getRoot())。

【讨论】:

以上是关于Jackrabbit Oak 合并不保存更改的主要内容,如果未能解决你的问题,请参考以下文章

Apache Jackrabbit Oak 1.5.9 发布

如何通过 WebDAV 访问 Jackrabbit Oak 存储库?

使用 Jackrabbit Oak 优于 MongoDB 的优势

Jackrabbit Oak:入门并通过 RMI 连接到独立存储库

Apache Jackrabbit OAK - 按节点路径跨集群分片 DocumentNodeStore

Jackrabbit Oak 删除节点不会释放磁盘空间