5
我有一個@Stateless
EJB和@WebService
接口,它使用容器管理的事務,這意味着如果一個方法在不引發系統異常的情況下被調用,則容器自動提交事務。如何從容器管理的事務提交中捕獲異常?
如果我嘗試EntityManager.persist(...)
兩個具有相同值的對象,對於具有唯一約束的列,容器將向我的代碼外提交的客戶端拋出PersistenceException
。 如何捕獲此異常,以便我可以重新拋出自己的應用程序異常?
我是否必須在我的方法中手動提交事務以在提交時捕獲異常? (並且EntityManager.flush()
是正確的方法嗎?)如果是這樣,容器管理事務有什麼意義?
謝謝你的回答。我通過在'@ AroundInvoke'攔截器中執行'EntityManager.flush()'來解決它。 – 2010-10-27 09:23:38
這可能有時會起作用,但要小心隔離級別。除非你序列化所有的東西,否則當tx提交時仍然有可能失敗。 – 2010-10-28 20:39:45