[英]How do i catch exceptions from container managed transaction commit?
我有一個帶有@WebService
接口的@Stateless
EJB,使用容器管理的事務,這意味着如果沒有引發系統異常,則在調用方法后,容器會自動提交事務。
如果我嘗試將EntityManager.persist(...)
兩個具有相同值的對象用於具有唯一約束的列,則容器將在我的代碼之外的提交時向客戶端拋出PersistenceException
。 我如何捕獲此異常,以便我可以重新拋出自己的應用程序異常?
我是否必須在我的方法中手動提交事務以捕獲提交中的異常? (並且EntityManager.flush()
是正確的方法嗎?)如果是這樣,那么容器管理事務的重點是什么?
遺憾的是,不可能從容器管理的事務失敗中捕獲異常。 如您所述,您最好的選擇是使用bean管理的事務。 或者,您可以使用實現相同接口的代理bean來包裝EM EJB。 當您的代碼不需要響應特定的提交失敗時,容器管理的事務是適當的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.