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.