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