如何从容器管理的事务提交中捕获exception?
我有一个带有@WebService
接口的@Stateless
EJB,使用容器管理的事务,这意味着如果没有抛出系统exception,在调用方法后,容器会自动提交事务。
如果我尝试EntityManager.persist(...)
两个具有相同值的对象,对于具有唯一约束的列,容器将在我的代码之外的提交时向客户端抛出PersistenceException
。 我如何捕获此exception,以便我可以重新抛出自己的应用程序exception?
我是否必须在我的方法中手动提交事务以捕获提交中的exception? (并且EntityManager.flush()
是正确的方法吗?)如果是这样,那么容器管理事务的重点是什么?
遗憾的是,不可能从容器管理的事务失败中捕获exception。 如您所述,您最好的选择是使用bean管理的事务。 或者,您可以使用实现相同接口的代理bean来包装EM EJB。 当您的代码不需要响应特定的提交失败时,容器管理的事务是适当的。