2012-05-20 4 views
7

Я разрабатываю приложение, используя Struts, Spring и Hibernate.где обращаться с пружиной DataAccessException

В моих DAO используется весна jdbc, и весь ее метод выдает исключение DataAccessException (это не проверено).

Куда я должен обращаться с этими исключениями? Я знаю, что это исключение, но я думаю, что мне нужно сообщить пользователю, есть ли проблема с db или его соединением.

Я думаю, что я должен перебросить DataAccessException из моих методов класса сервиса, которые будут проверены контроллером. Является ли это хорошей практикой?

Я просмотрел образцы из пакета Spring и не нашел обработки исключений в области или области обслуживания. Кажется, что DataAccessException игнорируется после выхода из области dao.

Пожалуйста, предложите хороший дизайн по этому вопросу.

+0

Возможный дубликат [Могу ли я использовать Spring DataAccessException непосредственно в уровне обслуживания] (http://stackoverflow.com/questions/10672879/can-i-use-spring-dataaccessexception-directly-in-service-layer) – Raedwald

ответ

13

Исключение DataAccessException игнорируется после выхода из области dao.

И это хорошо! Пусть он пролетит через весь стек. Вероятно, у вас есть транзакции на уровне сервиса - исключение будет прозрачно приводить к откату внешней транзакции. Большой!

Теперь он найдет свой путь к контроллеру. Если вы поймаете его в контроллере Struts, вы можете, например, вернуть другой вид. Но, скорее всего, вы не хотите обрабатывать исключение в каждом действии Struts. Поэтому пусть исключение летает еще дальше. В какой-то момент Struts поймает это исключение и попытается справиться с этим. У Struts есть несколько сложных механизмов обработки ошибок, вы найдете много информации о них. Как правило, он будет вызывать некоторые настраиваемые действия или экран ошибок в зависимости от типа исключения.

И, наконец, если даже Struts не может обработать исключение, оно будет сброшено в контейнер, в результате чего HTTP 503 будет возвращен с данными об исключении.

Как вы можете видеть, вы можете контролировать исключения на множестве уровней, как правило, лучше.

+0

Это это отличный ответ. Cudos! – markthegrea