2010-11-13 6 views
15

im en utilisant spring + hibernate pour une application de bureau.Où et comment gérer les exceptions spring + hibernate?

Je suis en train de le construire avec une mise en œuvre en couches, donc j'ai:

couche GUI --call -> couche de service --call -> couche OAC

Un petit exemple pour mieux exapliquer ma situation:

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

Le problème est: qui rejette l'exception et qui la gère?

Je pense que DAO doit jeter la première exception, et la couche de service le relire, et enfin la couche GUI gérer l'exception, donc je peux montrer le message à l'utilisateur, est-ce bon? Il y a un moyen de construire des exceptionsHandler en utilisant le printemps?

Quelle est la meilleure pratique pour gérer les exceptions en utilisant spring + hibernate?

Merci.

Répondre

3

Si vous utilisez Spring MVC, puis il y a une solution d'écriture ExcpetionHandlerResolver, prendre au regard de la documentation

Si vous ne travaillez pas avec Spring MVC. Je suggère de jeter l'exception de DAO à Service, puis à View layer. Seule la couche de vue peut vraiment fournir des informations précieuses à l'utilisateur en fonction de l'exception interceptée.

4

Je suggère d'envelopper les exceptions levées dans votre propre classe d'exception et de les laisser remonter jusqu'à la couche GUI.

Questions connexes