2016-12-17 4 views
0

Мы используем JackRabbit в производстве. К сожалению, у нас есть некоторые несоответствия в хранилищах, которые делают данные не нечитаемые: конфигурацияКак исправить несоответствие в Jackrabbit JCR (BundleFsPersistenceManager)

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

Пружинный боб выглядит следующим образом:

<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. Ну, теперь он в производстве, и никто этого раньше не заметил, и мы хотели бы обменять это. Однако сначала мы должны перенести данные, и по этой причине нам нужно их исправить.

Мой вопрос: Есть ли способ исправить это или эти данные потеряны навсегда?

Мой второй вопрос: Что мы можем сделать, чтобы избежать этих проблем в будущем?.

ответ

0

Есть некоторые примечания о дополнительных параметрах check.., которые можно задать на менеджерах персистентности на Adobe CQ - Repository Inconsistency (использует Jackrabbit). Magnolia - JCR Troubles имеет пример скрипта для поиска и удаления сломанных узлов. Я видел подход, который сочетал логику с этим скриптом (написанный в java), и проверяющие параметры позволяют репозиторию быть восстановленным и запущенным достаточно долго, чтобы получить содержимое.

Чтобы избежать проблем в будущем - где вы хотите автономную установку, не использующую РСУБД, я бы предложил 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>