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