如何从容器管理的事务提交中捕获异常?

时间:2010-09-16 11:24:57

标签: java exception transactions ejb container-managed

我有一个带有@Stateless接口的@WebService EJB,使用容器管理的事务,这意味着如果没有引发系统异常,则在调用方法后,容器会自动提交事务。

如果我尝试为具有唯一约束的列的两个具有相同值的对象EntityManager.persist(...),则容器将在我的代码之外的提交时向客户端抛出PersistenceException如何捕获此异常以便我可以重新抛出自己的应用程序异常?

我是否必须在我的方法中手动提交事务以捕获提交中的异常? (并且EntityManager.flush()是正确的方法吗?)如果是这样,那么拥有容器管理的交易有什么意义呢?

1 个答案:

答案 0 :(得分:4)

遗憾的是,无法从容器管理的事务失败中捕获异常。如您所述,您最好的选择是使用bean管理的事务。或者,您可以使用实现相同接口的代理bean来包装EM EJB。当您的代码不需要响应特定的提交失败时,容器管理的事务是适当的。