同一事务Spring中的多个资源提供者

时间:2013-09-01 11:37:13

标签: java spring hibernate jackrabbit

我使用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"/>

然而,这似乎还不够。有人能给我一些关于我需要阅读的内容的线索/在哪里可以找到相关信息吗?如果其中一个资源提供者发生了某些事情,我需要回滚所有内容。

1 个答案:

答案 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>