2010-11-13 19 views
15

im przy użyciu wiosny + hibernacji dla aplikacji pulpitu.Gdzie i jak obsługiwane są wyjątki sprężyny i hibernacji?

Próbuję zbudować go z warstwowego realizacji, więc mam:

warstwa GUI --call -> Usługi --call warstwa - warstwa> DAO

Mała Przykład lepszego wyjaśnienia mojej sytuacji:

// 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.. 
} 

Problem polega na tym, kto rzuca wyjątek i kto go obsługuje?

Myślę, że DAO musi rzucić pierwszy wyjątek, a warstwa usługi ponownie go rzucić, a na końcu wyjątek obsługi warstwy GUI, więc mogę pokazać komunikat użytkownikowi, czy to jest dobre? Istnieje sposób na zbudowanie ExceptionHandler za pomocą sprężyny?

Jak najlepiej radzić sobie z wyjątkami za pomocą sprężyny + hibernacji?

Dzięki.

Odpowiedz

3

Jeśli używasz MVC wiosny, to istnieje rozwiązanie pisania ExcpetionHandlerResolver, wziąć pod spojrzeniem na documentation

Jeśli nie pracujesz z wiosny MVC. Proponuję rzucić wyjątek od DAO do Service, a następnie do warstwy View. Tylko warstwa widoku może naprawdę dostarczyć cennych informacji dla użytkownika na podstawie złapanego wyjątku.

4

Proponuję zawijać wyrzucone wyjątki w twojej własnej klasie wyjątków i pozwolić im spenetrować warstwę GUI.

Powiązane problemy