事务管理不适用于JTA + Bitronix + 2个数据源

时间:2018-10-05 10:53:50

标签: java spring spring-transactions jbpm jta

我在Spring和Bitronix的嵌入式模式下使用JBPM进行事务管理。除了JBPM数据源,还有我正在使用JDBCTenmplate进行直接数据库查询的应用程序数据源。

在发生任何异常的情况下,我希望事务回滚(在应用程序数据库和JBPM数据库中)。应用程序数据库调用和JBPM调用都在单个事务中。但是,不会发生回滚。看来BTM无法识别应用程序数据源。请帮助纠正以下配置,以便事务管理可同时用于两个数据源。

代码和spring xml配置:

    @Transactional(propogation=Propagation.REQUIRED,     isolation=Isolation.REPEATABLE_READ, rollbackFor=Exception.class)

<bean id="datasource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName"       value="java:comp/env/jdbc/applicationOracleDataSource" />
</bean>

<bean id="jbpm_datasource"     class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/jdbc/jbpmOracleDataSource" />
</bean>

<bean id="jbpmEMF"     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <property name="persistenceUnitName" value="org.jbpm.persistence.spring.jta"/>
  <property name="persistenceXmlLocation" value="classpath:persistence.xml"/>
  <property name="datasource" value="jbpm_datasource"/>
</bean>

enter code here

<bean id="btmConfig" factory-method="getConfiguration"      class="bitronix.tm.TransactionManagerServices"></bean>

<bean id="BitronixTransactionManager" factory-method="getTransactionManager"
      class="bitronix.tm.TransactionManagerServices" depends-on="btmConfig"      destroy-method="shutdown" />

<bean id="jbpmTxManager"      class="org.springframework.transaction.jta.JtaTransactionManager">
  <property name="transactionManager" ref="BitronixTransactionManager" />
  <property name="userTransaction" ref="BitronixTransactionManager" />
  <property name="allowCustomeIsolationLevels" value="true" />
</bean>

0 个答案:

没有答案