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.