我使用Jackrabbit存储文件(数据存储)和Hibernate几乎所有其他东西。我不知道很多事务等,但我知道我想要这两个事务的全局事务,以便一个例外回滚一切。目前数据库的东西被回滚,但Jackrabbit不是。
我使用的是Spring 3.2。我已经将Jackrabbit JCA适配器部署到JBoss(7.1.1)。我在config xml中有这些行:
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager"></bean>
<tx:annotation-driven transaction-manager="txManager"
proxy-target-class="true"/>
然而,这似乎还不够。有人能给我一些关于我需要阅读的内容的线索/在哪里可以找到相关信息吗?如果其中一个资源提供者发生了某些事情,我需要回滚所有内容。
答案 0 :(得分:2)
设置起来非常棘手。一个问题是弹簧自动使用'transactionManager'作为默认名称导致问题。尽管同步不匹配的数据源很快就会成为一场噩梦,但绝对值得付出努力。
这是我的示例配置对我有用。当然现在我们可能会使用@Configuration而不是xml。这使用了Spring Data,JTA,MySQL和XA驱动程序以及Neo4j。 Neo4j具体的东西已被省略。
Spring Data也可以为您提供帮助。
这是一个首发......
<tx:annotation-driven transaction-manager="xaTransactionManager" />
<bean id="xaTransactionManager" class="some.type.of.ChainedTransactionManager">
<constructor-arg>
<list>
<ref bean="jpaTransactionManager"/>
<ref bean="otherTransactionManager"/>
</list>
</constructor-arg>
</bean>
<bean id="jpaTransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="localContainerEntityManagerFactoryBean"/>
</bean>
<bean id="otherTransactionManager" class="other.type.of.jta.TransactionManager">
<property name="transactionManager" ref="otherTransactionManagerService"/>
</bean>