我有一些EJB使用Hibernate將數據保存到數據庫。我有一個與這些EJB進行對話的Swing客戶端。客戶端對數據庫一無所知(沒有驅動程序jar)。正確的EJB異常處理 - 來自客戶端的ClassNotFoundException
在一次事務中,可能會拋出Hibernate ConstraintViolationException。我捕獲所有異常和將它們包裝在一個EJBException異常,像這樣:
catch(HibernateException e) {
e.printStackTrace();
throw new EJBException(e);
}
我得到的問題是,當異常是由JBoss的調用程序在客戶端解組,一個ClassNotFoundException是因爲拋出(用於PSQLException)客戶端在類路徑中沒有sql驅動程序jar。
我改變了這個應用程序總是將捕獲到的異常傳遞給ejbexception這樣的構造函數,所以我們可以有一個堆棧跟蹤歷史記錄。現在我正在尋找爲什麼最初的開發者沒有這樣做。
在這一點上,我看到兩個選項 - 包括postgres驅動程序jar與客戶端,或者移除將捕獲的異常傳遞給EJBException構造函數。我很好奇,如果任何人有任何其他的建議,以及其他人如何處理EJB中的異常?
+1爲「客戶不需要知道技術細節」。不過,我認爲獨特的錯誤號碼方法是完全不必要的。所有客戶需要知道的是「發生服務器錯誤」。服務器日誌應該提供所有必要的信息來解決問題。 – ChssPly76 2009-09-09 18:10:26
當你有很多用戶,並且他們在錯誤報告中並不總是及時或準確的,並且你有一個非平凡的n層體系結構,我相信這些錯誤號碼確實有用,而且遠非必要。實施的工作量是微不足道的。 – djna 2009-09-09 18:14:56
我的不好。我的意思不是「無謂的」,而是「無意義的」:-)我們已經嘗試過這種方法,發現實際的錯誤數量在大約0.5%的情況下回到我們身上;其他人被報告爲「某種錯誤」或「窗口彈出」。但也許你的用戶比我的好 - 我只能羨慕你然後:-) – ChssPly76 2009-09-09 18:20:24