Транзакции в Apache Jackrabbit и Spring - PullRequest
1 голос
/ 07 января 2012

Я хочу запускать транзакции в моем веб-приложении Spring, которое использует хранилище Apache Jackrabbit. Затем JackRabbit использует реляционную базу данных (MySQL / PgSQL) для текстовых данных. Двоичные данные хранятся в файловой системе.

Пока у меня есть эта функциональная конфигурация бобов Jackrabbit:

<bean id="sessionFactory" class="com.example.MyJcrSessionFactory">
    <constructor-arg index="0" ref="repository"/>
    <constructor-arg index="1" ref="jcrCredentials"/>
</bean>

<bean id="repository" class="org.apache.jackrabbit.core.RepositoryImpl">
    <constructor-arg index="0" ref="config" />
</bean>

<bean id="config" class="org.apache.jackrabbit.core.config.RepositoryConfig" factory-method="create">
    <constructor-arg index="0" type="java.io.InputStream" value="classpath:jackrabbit/repository.xml"/>
    <constructor-arg index="1" type="java.lang.String" value="/tmp/repository" />
</bean>

<bean id="jcrCredentials" class="javax.jcr.SimpleCredentials">
    <constructor-arg index="0" type="java.lang.String" value="..." />
    <constructor-arg index="1" type="char[]" value="..." />
</bean>

И остальная часть конфигурации Jackrabbit в файле repository.xml.

Что мне нужно сделать, чтобы успешно выполнять транзакции в хранилище JackRabbit? Какую технологию я должен использовать?

Я использую Spring 3.1, Jackrabbit 2.3.3 на Tomcat / Glassfish. И я не хочу использовать устаревшие пружинные модули.

1 Ответ

3 голосов
/ 28 февраля 2012

Мы используем аналогичную настройку (Jackrabbit, Spring, Tomcat) с Jencks в качестве поставщика JCA.

Вот пример конфигурации:

<bean id="txManagerJencks" class="org.jencks.factory.TransactionManagerFactoryBean" />

<bean id="pooledConnectionManagerJcr" class="org.jencks.factory.ConnectionManagerFactoryBean">
    <property name="transactionManager">
        <ref local="txManagerJencks" />
    </property>
    <property name="transaction" value="xa" />
    <property name="poolMinSize" value="1"/>
    <property name="poolMaxSize" value="5"/>
    <property name="connectionMaxIdleMinutes" value="5" />      
</bean>

<bean id="repositoryManagedConnectionFactory" class="org.apache.jackrabbit.jca.JCAManagedConnectionFactory" destroy-method="finalize">
    <property name="homeDir" value="${jackrabbit.homeDir}/jackrabbit" />
    <property name="configFile" value="classpath:repository.xml" />
</bean>

<bean id="repository"
    class="org.springframework.jca.support.LocalConnectionFactoryBean" >
    <property name="managedConnectionFactory">
        <ref local="repositoryManagedConnectionFactory" />
    </property>
    <property name="connectionManager">
        <ref local="pooledConnectionManagerJcr" />
    </property>
</bean>
...