2010-11-13 60 views
15

即時通訊使用spring + hibernate作爲桌面應用程序。何處以及如何處理spring + hibernate異常?

我試圖用分層的實現建造它,所以我有:

GUI層--call - >服務層--call - > DAO層

小例如,以更好地exaplain我的情況:

// In GUI layer 
private void actionPerformed(ActionEvent evt){ 
    addUser(); 
} 

private void addUser(){ 
    // Check gui validation for user inputs 
    if(inputIsValid()){ 
     String username=nameText.getText(); 
     String pass=passText.getText(); 
     //Now call service layer 
     userService.createUser(username, pass); 
     // Now here i want to show a message to user like 
     // "Operation successful" or "Operation failed" 
     // or more sofisticated message like "User with same name already exists" 
    } 
} 


// Service layer 
@Transactional 
public void createUser(String name, String pass){ 
    User user=new User(name, pass); 
    userDao.save(user); 
} 

// Another service layer example, 
@Transactional 
public boolean createUser(String name, String pass){ 
    User user=new User(name, pass); 
    try{ 
     userDao.save(user); 
    } 
    catch(Exception ex){ 
     Log(ex); 
     return false; 
    } 
    return true; 
    // In this case GUI layer can know if save is succesful, but it can't know WHY 
    // the save is failed : some username? DB service shutdown? etc.. 
} 

的問題是:誰拋出異常,誰處理的呢?

我覺得DAO必須拋出第一個異常,服務層重新拋出它,最後GUI層處理異常,所以我可以向用戶顯示消息,這是好的嗎? 有一種方法可以使用spring來構建一些ExceptionHandler嗎?

使用spring + hibernate管理異常的最佳做法是什麼?

謝謝。

回答

3

如果你使用Spring MVC,再有就是寫ExcpetionHandlerResolver的解決方案,以在對documentation

一下如果你不使用Spring MVC工作。我會建議將異常從DAO引發到服務,然後再到View層。只有視圖層才能根據捕獲到的異常真正向用戶提供有價值的信息。

4

我會建議在您自己的異常類中包裝拋出的異常,並讓它們向上鼓吹GUI層。