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



我使用Jackrabbit来存储文件(数据存储)和Hibernate几乎所有其他内容。我不知道很多事务等等,但我知道我想要这两个的全局事务,这样异常就可以回滚所有事务。目前数据库的内容已经回滚,但Jackrabbit没有。

我使用的是Spring 3.2。我已经将JackrabbitJCA适配器部署到JBoss(7.1.1)

<bean id="txManager"
      class="org.springframework.transaction.jta.JtaTransactionManager"></bean>
<tx:annotation-driven transaction-manager="txManager"
                      proxy-target-class="true"/>

然而,这似乎还不够。有人能给我一些线索,告诉我需要读什么/在哪里可以找到这方面的信息吗?如果某个资源提供者出现问题,我需要回滚所有内容。

设置起来相当棘手。其中一个问题是spring自动使用"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> 

最新更新