Websphere事务管理器和数据源迁移到Atomikos和Hikari:回滚不起作用

时间:2017-06-22 02:42:18

标签: spring transactions websphere hikaricp atomikos

我们正在尝试将Websphere迁移到Tomcat,其中需要迁移两个基本组件。我们将连接池管理迁移到Hikari,将事务管理迁移到Atomikos。 Hibernate不是由Spring管理的,数据源也不是由spring管理的。春天通过注入atomikos实现来提供事务管理。

             

<bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.J2eeUserTransaction">
    <property name="transactionTimeout" value="180"/>
</bean>

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"
    depends-on="atomikosTransactionManager,atomikosUserTransaction">
    <property name="transactionManager" ref="atomikosTransactionManager" />
    <property name="userTransaction" ref="atomikosUserTransaction" />
    <property name="allowCustomIsolationLevels" value="true" />
</bean>

Hibernate配置文件单独加载,并提供Hikari数据源和事务配置类,如下所示: com.atomikos.icatch.jta.hibernate3.TransactionManagerLookup

我们没有更改hikari中的autocommit标志,我认为默认值为true。

Websphere事务管理器能够回滚任何会话更新,但上述配置无法执行。例如,对于以下代码,websphere事务管理器回滚事务:

Session session = null;
try{
userTransactionService.begin();
session = factory.getSession();
session.saveorUpdate(acccount);
session.flush();
String abc = null;
abc.length(); // line 8
userTransactionService.commit();
}
catch(Exception e){
 userTransactionService.rollback();
}

当通过Atomikos提供userTransaction且Hikari是数据源时,事务在第8行发生异常后不会回滚。

我甚至尝试过使用Websphere事务管理器和Hikari数据源,但事务仍然没有回滚。

我无法将Hikari中的自动提交设置为错误,因为在很多地方我们根本不使用事务管理器(开始)而只使用session.saveOrUpdate。对于websphere数据源,它会持久存储在数据库中,但在Hikari的情况下则不会持续存在(因为自动提交是错误的)。

请帮助解决如何实现与Websphere提供的功能相同的功能,不会影响系统中的大量代码。

0 个答案:

没有答案