JTA事务:如果发生异常但未在事务上调用回滚会发生什么?

时间:2010-05-19 16:14:40

标签: java mysql transactions jta

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

  1. 列出项目

    创建用户交易,例如

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

  3. txn.commit()

  4. 他们有异常块,但没有人调用txn.rollback。 良好的编码实践表明,如果发生异常,他们需要调用回滚,但我的问题是 如果未提交txn,并且发生异常,那么它们的负面影响是什么,而不是调用rollback?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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