【发布时间】:2012-08-23 09:24:27
【问题描述】:
在我使用@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW) 的方法中,有时会由于SQLException 而发生org.eclipse.persistence.exceptions.DatabaseException。我捕捉到这个异常并通过另一个数据库查询来处理这种情况。但是,这个查询没有通过,因为异常,setRollbackOnly 被自动设置,我现在不能再提交事务了。
在 Java SE 中我会做一个明确的
manager.getTransaction().rollback();
manager.getTransaction().begin();
但在应用程序服务器中,这当然是行不通的。
在这种情况下,我能否以某种方式让我的数据库更改提交?
【问题讨论】:
-
交易完成后能否获取交易状态?还是从事务中捕获异常并在新事务中执行所需的逻辑?
-
我可以返回一个返回值,指示调用者重新执行他刚刚执行的方法。但是,我希望它对调用者透明。
-
我的意思是在你的方法中调用其他方法..
-
调用另一个带有 REQUIRES_NEW 注释的 bean 上的方法 ...
-
是的,这可以工作 - 奇怪的是,我现在得到一个 SQLException
XAER_PROTO : Routine was invoked in an inproper context
标签: jakarta-ee transactions ejb-3.0 eclipselink