Где и как обрабатываются исключения весна + спящий режим? - PullRequest
15 голосов
/ 13 ноября 2010

я использую Spring + Hibernate для настольного приложения.

Я пытаюсь построить его с многоуровневой реализацией, поэтому у меня есть:

Уровень графического интерфейса --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?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 14 ноября 2010

Я бы предложил обернуть брошенные исключения в ваш собственный класс исключений и позволить им всплыть на уровень графического интерфейса.

3 голосов
/ 14 ноября 2010

Если вы используете Spring MVC, тогда есть решение написать ExcpetionHandlerResolver, взгляните на документацию

Если вы не работаете сВесна MVC.я бы предложил бросить исключение из DAO в Service, а затем в View layer.Только слой представления может действительно предоставить ценную информацию пользователю на основе пойманного исключения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...