我试图使用bitronix事务管理器启用分布式事务。配置详细信息包括:Spring XA事务与Oracle JDBC驱动程序
- 使用OCI JDBC驱动程序和oracle.jdbc.xa.client.OracleXADataSource。此数据源由UCP连接池数据源环绕 - oracle.ucp.jdbc.PoolDataSourceImpl
- 使用Spring JdbcTemplate执行查询。
- 使用Bitronix事务管理器使用注解
我现在面临的问题是,使用的JdbcTemplate执行的查询未在交易被执行处理的分布式事务
<tx:annotation-driven transaction-manager="distributedTransactionManager"/>
<bean id="distributedTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManager" ref="bitronixTransactionManager"/>
<property name="userTransaction" ref="bitronixTransactionManager"/>
<property name="allowCustomIsolationLevels" value="true"/>
</bean>
<bean id="bitronixTransactionManager" factory-method="getTransactionManager"
class="bitronix.tm.TransactionManagerServices" depends-on="bitronixConfiguration"
destroy-method="shutdown">
</bean>
The data source is created as follows
PoolDataSourceImpl pds = new PoolDataSourceImpl();
try {
pds.setConnectionPoolName(dataSourceName);
pds.setConnectionFactoryClassName("oracle.jdbc.xa.client.OracleXADataSource");
pds.setConnectionFactoryProperties(getOracleDataSourceProperties());
pds.setDataSourceName(dataSourceName);
pds.setServerName("v-in-sd-tst-12");
pds.setPortNumber(1521);
pds.setUser("ForTestCasesAmit");
pds.setPassword("adept");
pds.setMinPoolSize(10);
pds.setMaxPoolSize(100);
pds.setMaxIdleTime(1800);
pds.startPool();
} catch (SQLException e) {
throw new RuntimeException("Cannot create project datasource " + dataSourceName, e);
}
return pds;
上,这可能是为什么查询不在事务中执行的原因有什么建议?
更新1
添加,其执行使用的JdbcTemplate查询和在末端抛出异常的方法
@Transactional(propagation = Propagation.REQUIRED)
public void execute() {
System.out.println("Starting with the service method");
jdbcTemplateForDSOne.update("UPDATE T1 SET COL1 = 'Date1' WHERE COL2 = 1");
jdbcTemplateForDSOne.update("UPDATE T1 SET COL1 = 'Start Date1' WHERE COL2 = 2");
waitForUserInput();
throw new RuntimeException("Rollback Now");
}
更新2
“在Oracle数据库10g之前的所有版本中,从XAConnection获取的连接上的默认自动落实状态为false。从Oracle数据库10g开始,默认状态是真实的。”
我使用Oracle 11g R2。任何想法配置更改应该而使用分布式事务进行有自动提交状态为假?
更新3
的交易,如果我使用bitronix汇集的数据源,而不是甲骨文UCP PoolDataSource工作。使用bitronix PoolingDataSource给了一个机会bitronix到自动提交状态设置为false。将调查更推测两者之间的区别。
我已经用spring注释的方法更新了这个问题。 – 2011-05-26 08:58:11