我们有一些第三方代码,其中他们执行以下操作
列出项目
创建用户交易,例如
txn = (UserTransaction)ctx.lookup( "UserTransaction" );
txn.begin( );
做一些工作持续到数据库(通过JPA)到MySQL数据库
txn.commit()
他们有异常块,但没有人调用txn.rollback
。
良好的编码实践表明,如果发生异常,他们需要调用回滚,但我的问题是
如果未提交txn,并且发生异常,那么它们的负面影响是什么,而不是调用rollback?
答案 0 :(得分:4)
交易保持有效,直到您commit()
或rollback()
为止。它将继续保持锁定,您最终可能会阻止您的应用程序(实际上是数据库)。
答案 1 :(得分:1)
IMO JTA事务最终应该超时(基于设置或默认的transactionTimeout)并且应该自动回滚。