有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

我正在使用Spring3.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"/>

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


共 (1) 个答案

  1. # 1 楼答案

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

    这是我的示例配置,它为我工作。当然,现在我们可能会使用@Configuration而不是xml。使用Spring数据、JTA、MySQL以及XA驱动程序和Neo4j,这一切都起到了作用。Neo4j的具体内容被省略了

    Spring数据在这里也可能对您有所帮助

    这是一个开始

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