【问题标题】:Rollback of transactions with java ee and Jboss AS使用 java ee 和 Jboss AS 回滚事务
【发布时间】:2015-08-31 11:09:54
【问题描述】:

我有一个无状态 bean,它具有用于事务管理的容器,并且我有 2 个单独的 for 循环,用于将一些数据添加到数据库中,而在其他循环中,我会删除一些数据。 之后,我运行一些有效性检查,如果失败,我会抛出异常。 我不清楚的是,如果抛出错误,为什么事务不回滚?我首先尝试抛出一个自定义异常,然后抛出一个 RollbackException,但结果是一样的——回滚没有完成。 Jboss是否有可能覆盖了我的一些设置,或者我错过了其他部分?

另外,我想知道什么是无状态 bean 中的“事务”,即容器管理?它是一个方法中的所有内容,还是一个方法可以包含多个事务?

【问题讨论】:

    标签: jakarta-ee jboss


    【解决方案1】:

    如果抛出错误,为什么事务不回滚?

    因为这是规范所说的。任何RuntimeExceptions 或标有@ApplicationException 的检查异常都会回滚。

    另外,我想知道什么是无状态 bean 中的“事务”,即容器管理?它是一个方法中的所有内容,还是一个方法可以包含多个事务?

    默认情况下,所有 EJB 方法都加入一个事务。如果没有可用的,则创建一个新的。当您使用REQUIRES_NEW 调用 EJB 方法时,您可以拥有多个事务。请记住,这将是一个独立事务,而不是子事务。 请参阅@TransactionAttribute 了解更多信息。

    【讨论】:

      【解决方案2】:

      JBoss 在 Datasouce 配置中有一些可怕的默认设置。在 JBoss 中创建的数据源不是 JTA - 在管理控制台中未选中使用 JTA 设置,在 xml 中相关设置为 <datasource jta="false" ...。检查是否将其更改为jta="true",不会解决您的问题。

      查看Transactions don't rollback 了解更多详情。

      【讨论】:

      • 这看起来是一个可能的解决方案,但我明天之前没有时间测试它:) 如果有帮助,我会告诉你
      猜你喜欢
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      相关资源
      最近更新 更多