如何解决Jackrabbit JCR(BundleFsPersistenceManager)中的不一致问题

时间:2016-12-17 10:40:05

标签: jackrabbit

我们正在制作中使用 JackRabbit 。不幸的是,我们在存储库中存在一些不一致的情况,这使得数据不可读:

ERROR ResourceServiceImpl - RepositoryException to JCR javax.jcr.PathNotFoundException: 1661b5c

spring bean配置如下所示:

  <bean id="repository" class="org.apache.jackrabbit.core.RepositoryImpl" destroy-method="shutdown">
    <constructor-arg index="0" ref="config" />
  </bean>
  <bean id="config" class="org.apache.jackrabbit.core.config.RepositoryConfig" factory-method="create">
    <constructor-arg index="0" ref="jcrXml"/>
    <constructor-arg index="1" value="${instance.repository}" />
  </bean>

  <bean id="jcrXml" class="com.example.misc.InputStreamBeanFactory" factory-method="createStream">
    <constructor-arg value="/jackrabbit-repository.xml" />
  </bean>
  <bean name="jcrSession" factory-bean="repository" factory-method="login" scope="session" destroy-method="logout" />   

workspaces.xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?><Workspace name="default">
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
        <param name="path" value="${wsp.home}"/>
    </FileSystem>
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.BundleFsPersistenceManager"/>
</Workspace>

根据我所学到的(太晚)here,上面配置的 BundleFsPersistenceManager 可能会变得不一致。这里也写了这应该 NOT 用于生产。嗯,它现在正在生产中,之前没有人注意到这一点,我们想交换它。但首先我们必须迁移数据,因此我们需要修复它。

我的问题:有没有办法解决这个问题,还是这些数据丢失了?

我的第二个问题:我们可以做些什么来避免将来出现这些问题?

1 个答案:

答案 0 :(得分:0)

可以在Adobe CQ - Repository Inconsistency上的持久性管理器上设置其他check..参数的一些注释(使用Jackrabbit)。 Magnolia - JCR Troubles有一个脚本示例,用于搜索和删除损坏的节点。我已经看到了一种方法,它结合了这个脚本的逻辑(用java编写),并且检查参数允许存储库重新启动并运行足够长的时间来获取内容。

为了避免将来出现问题 - 您希望进行不使用RDBMS的独立设置 - 我建议org.apache.jackrabbit.core.persistence.pool.DerbyPersistenceManager

    <PersistenceManager class="org.apache.jackrabbit.core.persistence.pool.DerbyPersistenceManager">
      <param name="url" value="jdbc:derby:${wsp.home}/db;create=true"/>
      <param name="schemaObjectPrefix" value="${wsp.name}_"/>
    </PersistenceManager>