java ee 和 Jboss AS 的交易回滚
Rollback of transactions with java ee and Jboss AS
我有一个无状态 bean,它有用于事务管理的容器,我有 2 个独立的 for 循环,其中我将一些数据添加到数据库,而在其他循环中我删除了一些数据。
之后,我 运行 进行一些有效性检查,如果失败,我将抛出异常。
我不清楚的是,如果抛出错误,为什么交易没有回滚?我首先尝试抛出一个自定义异常,然后是一个 RollbackException,但结果是一样的——回滚没有完成。
Jboss 是否有可能覆盖了我的某些设置,或者我是否遗漏了其他部分?
此外,我想知道在无状态 bean 中,容器管理的 "a transaction" 是什么?是一个方法中的所有内容,还是一个方法可以包含多个事务?
JBoss 在 Datasouce 配置中有一些可怕的默认值。在 JBoss 中创建的数据源不是 JTA - 在管理控制台中未选中使用 JTA 设置,在 xml 中相关设置是 <datasource jta="false" ...
。检查将其更改为 jta="true"
是否无法解决您的问题。
查看此 Transactions don't rollback 了解更多详细信息。
if an error is thrown, why is transaction not rolled back?
因为规范就是这么说的。回滚任何 RuntimeException
s 或标有 @ApplicationException
的已检查异常。
Also, i was wondering what is considered "a transaction" in stateless bean, that is container managed? Is it everything inside a method, or could one method contain more than one transaction?
所有 EJB 方法默认加入一个事务。如果 none 可用,则会创建一个新的。当您使用 REQUIRES_NEW
调用 EJB 方法时,您可以有多个事务。请记住,这将是一个独立的事务,而不是子事务。
有关详细信息,请参阅 @TransactionAttribute
。
我有一个无状态 bean,它有用于事务管理的容器,我有 2 个独立的 for 循环,其中我将一些数据添加到数据库,而在其他循环中我删除了一些数据。 之后,我 运行 进行一些有效性检查,如果失败,我将抛出异常。 我不清楚的是,如果抛出错误,为什么交易没有回滚?我首先尝试抛出一个自定义异常,然后是一个 RollbackException,但结果是一样的——回滚没有完成。 Jboss 是否有可能覆盖了我的某些设置,或者我是否遗漏了其他部分?
此外,我想知道在无状态 bean 中,容器管理的 "a transaction" 是什么?是一个方法中的所有内容,还是一个方法可以包含多个事务?
JBoss 在 Datasouce 配置中有一些可怕的默认值。在 JBoss 中创建的数据源不是 JTA - 在管理控制台中未选中使用 JTA 设置,在 xml 中相关设置是 <datasource jta="false" ...
。检查将其更改为 jta="true"
是否无法解决您的问题。
查看此 Transactions don't rollback 了解更多详细信息。
if an error is thrown, why is transaction not rolled back?
因为规范就是这么说的。回滚任何 RuntimeException
s 或标有 @ApplicationException
的已检查异常。
Also, i was wondering what is considered "a transaction" in stateless bean, that is container managed? Is it everything inside a method, or could one method contain more than one transaction?
所有 EJB 方法默认加入一个事务。如果 none 可用,则会创建一个新的。当您使用 REQUIRES_NEW
调用 EJB 方法时,您可以有多个事务。请记住,这将是一个独立的事务,而不是子事务。
有关详细信息,请参阅 @TransactionAttribute
。