2010-11-13 11 views
15

im usando spring + hibernate para una aplicación de escritorio.¿Dónde y cómo manejar las excepciones spring + hibernate?

Estoy tratando de construirlo con una aplicación en capas, por lo que tengo:

capa de interfaz gráfica de usuario --call -> Capa de Servicio --call - capa> DAO

Una pequeña ejemplo para explicar mejor mi situación:

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

El problema es: ¿quién arrojó la excepción y quién la manejó?

Creo que DAO tiene que lanzar la primera excepción, y la capa de servicio la vuelve a lanzar, y finalmente la excepción del identificador de capa de la GUI, por lo que puedo mostrar el mensaje al usuario, ¿es esto bueno? ¿Hay alguna manera de construir ExceptionHandler utilizando la primavera?

¿Cuál es la mejor práctica para gestionar excepciones utilizando spring + hibernate?

Gracias.

Respuesta

3

Si está utilizando Spring MVC, entonces hay una solución de escribir ExcpetionHandlerResolver, tomar ante la mirada sobre la documentation

Si usted no está trabajando con Spring MVC. Sugeriría arrojar la excepción de DAO a Service y luego a View layer. Solo la capa de vista realmente puede proporcionar información valiosa al usuario en función de la excepción capturada.

4

Sugeriría incluir las excepciones lanzadas en su propia clase de excepción y dejarlas pasar a la capa de la GUI.

Cuestiones relacionadas