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

发布于 2024-09-02 07:00:44 字数 377 浏览 11 评论 0原文

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

  1. 列表项

    创建用户事务例如

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

  3. txn.commit()

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

We have some third party code wherein they do the following

  1. List item

    Create a User Transaction e.g.

     txn = (UserTransaction)ctx.lookup( "UserTransaction" );
     txn.begin(  );
    
  2. Do some work persisting to the database (via JPA) to a MySQL database

  3. txn.commit()

They have Exception blocks but NONE of them call txn.rollback.
Good coding practice says they NEED to call rollback if an exception occurs but my question is
If the txn is not committed, and an exception occurs what is the negative effect of them NOT calling rollback?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

日记撕了你也走了 2024-09-09 07:00:44

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

The transaction stays active, until you either commit() or rollback() it. It will continue to hold locks and you may end up blocking your application (database, actually).

你好,陌生人 2024-09-09 07:00:44

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

IMO the JTA transaction should eventually timeout (based on the set or default transactionTimeout) and should automatically rollback.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文