异常后提交事务 - 撤消setRollbackOnly

时间:2012-08-23 09:24:28

标签: java-ee transactions ejb-3.0 eclipselink

在使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)的方法中,由于org.eclipse.persistence.exceptions.DatabaseException,有时可能会发生SQLException。我捕获此异常并通过另一个数据库查询处理该情况。但是,此查询无法通过,因为异常,setRollbackOnly会自动设置,此时我无法再提交事务。

在Java SE中,我会做一个明确的

manager.getTransaction().rollback();
manager.getTransaction().begin();

但在应用程序服务器中,这当然不起作用。

在这种情况下,我可以以某种方式让我的数据库更改提交吗?

2 个答案:

答案 0 :(得分:1)

esej评论中给出的提示是解决方案: "在另一个用REQUIRES_NEW注释的bean上调用方法。"

由于

答案 1 :(得分:0)

当您尝试启动新的全局事务而前一个事务既未提交也不回滚时,您将“调用Routine等...”错误。

为了解决这个问题,您应该执行以下操作:

当您捕获第一个异常时,请不要将其留给容器以将事务标记为“rollback”。您必须手动将事务标记为回滚。