2010-02-26 26 views
1

處理指導我一直是多麼不容易找到在網絡上的這個最佳做法,因爲它必須是這樣一個共同的問題感到驚訝。異常在Java EE 5 Web應用程序

應用程序是基於Java 1.5 - JSF 1.2與Faclets時,Seam,JPA,休眠。一些Web服務調用。一些JMS。

我對異常處理的一般建議。大概有3種我見過的方法,但我從來沒有確定哪種方法更好。假設您無法從錯誤中恢復,您是否: 1)記錄發生錯誤並重新拋出錯誤?
2)當它發生時記錄並拋出某種類型的異常?
3)讓它冒出來,然後在一般的異常處理servlet或類似的處理它。

我傾向於在以前的系統在架構已經相當簡單使用選項2 - 如果它得到回錯誤等等適配器層談論各種第三方系統拋出和適配器例外。我們可以在屏幕上向用戶顯示一個乾淨的消息,並將詳細信息保存在日誌中。雖然這裏的架構要複雜得多,我想知道它在實際中的工作能力。所以我很想知道你喜歡什麼以及爲什麼。

回答

1

假設你不能從錯誤中恢復...

假設這個錯誤並不功能錯誤,我記錄錯誤,敷例外的(自定義)未檢查的異常,讓框架/容器處理它(所以選項2)。 我喜歡做自己的方式,因爲:

  • 我喜歡用容器管理的事務,我想容器來完成其工作(即回滾任何交易),因此拋出一個運行時異常是要走的路。
  • 它最大限度地減少了異常處理工作。
  • 它使報告以易於通用的方式處理用戶。

如果它是一個功能性錯誤(即在一個用例的備選流程),我記錄錯誤和包裝該異常的(自定義)檢查異常,因爲我想調用者來專門處理它的問題是用例的一部分。

在這兩種情況下,我使用一個根異常對每一層,即TechnicalExceptionFunctionalException和。

+0

感謝您的回覆。任何人對此有任何其他意見? – charles 2010-02-26 16:16:32

+0

@charles在這裏看到的只有一個答案,令人驚訝,我期待他們中的很多人。 – 2010-02-26 16:25:49

+0

是的 - 我很驚訝。儘管如此,我們已經把所有人都關閉了,這是一個很好的回答!實際上,當我進行代碼審計時,我最常看到的方法是3 - 讓它冒泡,然後在通用的異常處理servlet或類似的異常中處理它 - 雖然它可能不會構成最佳實踐。 – charles 2010-03-01 09:08:54

相關問題