1

在我们的测试服务器中,我们要删除节点。我们使用下面的代码

        Repository repository = .... ;
        Session session = null;
        session = repository.login(new SimpleCredentials(getApplicationName(), getPassword().toCharArray()));

        JcrTools jcrTools = new JcrTools();

        if (!session.nodeExists(fileInfo.getRealPath())) {
            return;
        }
        Node node = session.getNode(fileInfo.getRealPath());
        //delete children nodes if exists  
        jcrTools.removeAllChildren(node);
        //delete all properties include mixins  
        PropertyIterator pIt = node.getProperties();
        while (pIt.hasNext()) {
            javax.jcr.Property property = pIt.nextProperty();
            property.remove();
        }
        node.remove();
        session.save();
        session.logout();

该方法有效,我们看到文件已从 modeshape-explorer Web 应用程序中删除。但我们也看到二进制文件位于存储库的二进制文件夹中,因此节点并没有被物理删除,磁盘使用情况也不会改变。可能是什么问题?

4

1 回答 1

3

未使用的二进制值最终将在后台线程中删除,默认情况下每天执行一次。

您可以通过存储库的 JSON 配置轻松配置它。例如:

{
  ...
  "garbageCollection" : {
    "threadPool" : "modeshape-gc-pool",
    "initialTime" : "00:00",
    "intervalInHours" : 24,
  }
  ...
}

上面显示的值是默认值,但显然您可以更改它们并仅包含那些有意义的非默认字段。

于 2014-08-21T14:29:24.840 回答