我需要一些指導,以便如何在Java EE環境中最佳使用異常,並通過JAX-RS爲客戶端提供服務。Java EE:引發@ApplicationException,仍然回滾事務
目前,我有一些例外,全部延伸RuntimeException
,並註明@ApplicationException(rollback=false)
。爲了將它們傳送給客戶,它們帶有一個JAXB註釋的實體;並且ExceptionMapper
已準備好將它們轉換爲正確,有意義的HTTP響應(包括HTTP狀態碼)。
我沒有任何關於交易行爲的規定,所以我想它默認爲CMT。
好東西到目前爲止:當服務器決定,它不能滿足一個請求,因爲輸入數據是無效的/足夠的/無論什麼,它會拋出我的一個BadRequestException
,這使得它的JAX-RS資源,它被映射到HTTP響應。客戶被告知出了什麼問題。
問題我的是我總是得到javax.ejb.TransactionRolledbackLocalException
,由BadRequestException
造成!我不希望交易回滾! @ApplicationException似乎被忽略...
我不應該從RuntimeException
延伸,而是使用檢查的異常嗎?我雖然@ApplicationException應該是正確的方式...
有關背景信息:我的所有異常將容器/ bean留在工作狀態。不需要銷燬bean實例或者類似的東西。
EJB 3.1規範,第14.2.1節:「應用程序異常是未經檢查的異常通過與ApplicationException的元數據註釋來註釋,或表示它定義爲一個應用程序異常在具有application-exception元素的部署描述符中。「 – 2011-06-09 13:02:17
謝謝。奇怪的是,Glassfish 3.1不遵循規範。 – Hank 2011-06-14 13:36:54
這個答案不正確,並且包含錯誤信息。從bick引用的EJB規範中再引用一段更長的引用:「被檢查異常的應用程序異常可以通過在bean的businessinterface,無界面視圖,home界面,組件界面等的方法的throws子句中列出來定義。和web服務端點,應用程序異常是一個未經檢查的異常,通過使用ApplicationException元數據註釋對其進行註釋,將其定義爲應用程序異常。 – eis 2014-02-11 15:53:51