代码之家  ›  专栏  ›  技术社区  ›  Christoffer Hammarström

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

  •  5
  • Christoffer Hammarström  · 技术社区  · 15 年前

    @Stateless 带有 @WebService 接口,使用容器管理的事务,这意味着在调用某个方法(如果该方法未引发系统异常)后,容器将自动提交事务。

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

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

    1 回复  |  直到 15 年前
        1
  •  4
  •   Brett Kail    15 年前

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