0

我们有一些第三方代码,他们在其中执行以下操作

  1. 项目清单

    创建用户事务,例如

     txn = (UserTransaction)ctx.lookup( "UserTransaction" );
     txn.begin(  );
    
  2. 做一些持久化到数据库(通过 JPA)到 MySQL 数据库的工作

  3. txn.commit()

他们有异常块,但没有一个调用txn.rollback. 良好的编码习惯说,如果发生异常,他们需要调用回滚,但我的问题是如果 txn 未提交,并且发生异常,他们不调用回滚的负面影响是什么?

4

2 回答 2

4

交易保持活动状态,直到您commit()rollback()它。它将继续持有锁,您最终可能会阻塞您的应用程序(实际上是数据库)。

于 2010-05-19T16:50:35.287 回答
1

IMO JTA 事务最终应该超时(基于设置或默认的 transactionTimeout)并且应该自动回滚。

于 2012-11-06T12:48:52.810 回答