我想在使用 Apache Jackrabbit 存储库的 Spring webapp 上运行事务。 JackRabbit 然后使用关系数据库 (MySQL/PgSQL) 来存储文本数据。二进制数据存储到文件系统。
到目前为止,我已经有了 Jackrabbit bean 的功能配置:
<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>
repository.xml
文件中的其余 Jackrabbit 配置。
我必须做什么才能在 JackRabbit 存储库上成功运行事务?我应该使用哪种技术?
我在 Tomcat/Glassfish 上运行 Spring 3.1、Jackrabbit 2.3.3。而且我不想使用过时的 spring 模块。
最佳答案
我们使用与 Jencks 类似的设置(Jackrabbit、Spring、Tomcat)作为 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>
关于java - Apache Jackrabbit 和 Spring 中的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764524/