Где и как обрабатывать исключения spring + hibernate?
im, используя spring + hibernate для настольного приложения.
Я пытаюсь создать его с помощью многоуровневой реализации, поэтому у меня есть:
Уровень GUI --call → Сервисный уровень --call → Уровень DAO
Небольшой пример, чтобы лучше преуспеть в моей ситуации:
// 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-слой обрабатывает исключение, поэтому я могу показать сообщение пользователю, это хорошо?
Существует способ создания некоторого ExceptionHandler с помощью spring?
Какова наилучшая практика для управления исключениями с помощью spring + hibernate?
Спасибо.
Ответы
Ответ 1
Если вы используете Spring MVC, тогда есть решение для записи ExcpetionHandlerResolver
, посмотрите на документацию < ш >
Если вы не работаете с Spring MVC. я предложил бы выбросить исключение из DAO в Service, а затем в View layer. Только уровень представления может действительно предоставлять ценную информацию пользователю на основе исключения.
Ответ 2
Я бы предложил обернуть заброшенные исключения в свой собственный класс исключений и позволить им перейти на уровень GUI.