2009-06-06 19 views
0

好的,我在一個j2ee項目中工作,該項目在repo中有2個分支,我命令混合它們。如何以及在哪裏捕捉j2ee應用程序中的異常

我正在編碼,然後netbeans問我「未報告的異常等於bla bla blag必須caugth或聲明要拋出」,並給我選擇只處理每個異常或只是拋出它希望別人抓住。

我正在使用的類是這些:

數據庫 - 數據對象 - PersonDB(我在這裏工作)

數據庫的DBMS的抽象(支持他們夫婦)

DataObject只是CRUD,DBMS和java之間的類型轉換,以及一些反射事物的通用性,它使用數據庫作爲成員變量

PersonDB是表中字段的映射,名爲person to java types,this CLA SS在擴展數據對象

現在版本1(只是在平行實際工作時的名字)趕上他們在類數據庫製作例如所有異常:

try { 
     Class.forName(this.driver); 
    } catch (ClassNotFoundException ex) { 
     Logger.getLogger(BD.class.getName()).log(Level.SEVERE, null, ex); 
    } 

或DataObject類醒目: 的SQLException,NoSuchFieldException,拋出:IllegalArgumentException

現在

版本2全部留給了來電者是這樣的:

public BD (String Adriver, String Ahost, String Abase, String Alogin, String Apassword) 
throws java.lang.ClassNotFoundException { ... } 

這是去你oppinion在這類問題的最佳途徑,特別是如果我是用struts

我爲我的英語

回答

2

那麼第一個問題道歉,我不得不問是:如果這是一個J2EE應用程序,你在做什麼手動加載JDBC驅動程序?這是data sources的用途。其次,如果你確實需要點他的話,那麼問自己:這個異常的結果是什麼? 可以回收嗎?或者是你的應用程序無法運行的災難性災難?

如果它是如此災難性你的應用程序無法運行做到這一點:

try { 
    ... 
} catch (SomeCheckedException e) { 
    throw new RuntimeException(e); 
} 

沒有一點污染的接口與「拋出......」的條款。

或者,如果它是可恢復的或可能可恢復的,那麼您確實需要更好地處理它。儘管如此,但很難給出答案。真的取決於具體情況。

例如,如果您以這種方式加載模塊/插件,那麼您只需記錄插件XYZ無法加載(記錄異常)並繼續前進。如果這是用戶操作的直接結果,則需要以某種方式向用戶報告操作失敗(並記錄錯誤)等。

1

異常處理通常是「我可以處理它嗎?」的問題。 - 處理意味着超過日誌和重新拋出。

有時候,爲了拋出其他抽象級別的異常(「我能爲調用者產生更明確的錯誤?」),這是值得的。

在這兩種情況下,您都必須考慮是否要傳遞原因(「對調用者有用嗎?」) - 不只是隨時都會這樣做,您將會得到大量無用的日誌文件。捕獲異常時,通常會記錄捕獲到的異常,可能只有調試級別,但在調試客戶系統的情況下,良好的日誌信息往往是「調試」系統的唯一機會。

異常處理和日誌記錄通常做得不好。但對於產品或長期項目來說,這將是一筆不錯的投資。