0

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

我正在使用 Spring 3.2。我已将 Jackrabbit JCA 适配器部署到 JBoss (7.1.1)。我在配置 xml 中有这些行:

<bean id="txManager"
      class="org.springframework.transaction.jta.JtaTransactionManager"></bean>

<tx:annotation-driven transaction-manager="txManager"
                      proxy-target-class="true"/>

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

4

1 回答 1

2

这是相当棘手的设置。一个问题是 spring 自动使用“transactionManager”作为默认名称,这会导致问题。尽管同步不匹配的数据源很快就会成为一场噩梦,但绝对值得付出努力。

这是对我有用的示例配置。当然,现在我们可能会使用 @Configuration 而不是 xml。这使用 Spring Data、JTA、带有 XA 驱动程序的 MySQL 和 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> 
于 2013-09-02T23:06:04.247 回答