как обрабатывать исключения из спящего режима - PullRequest
2 голосов
/ 20 апреля 2011

У меня есть несколько вопросов, таких как

  1. Какое место для работы в спящем режиме RuntimeException. Уровень DAO? ServiceLayer

  2. Например, у меня есть saveCustomer, и транзакция не проходит, как я могу сообщить пользователю через Exceptions?

  3. Я использую шаблон OpenSessionInView, который будет фиксировать транзакцию только после визуализации представления. В этом случае, если транзакция не удалась, как я могу сообщить об этом пользователю?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011
  1. Как правило, рекомендуется обрабатывать исключения в той части кода, где у вас есть наибольшая информация о том, как их обрабатывать (или генерировать соответствующее сообщение об ошибке с достаточным количеством информации).В приложениях j2ee, которые я разработал, у меня обычно есть транзакционный сервисный слой, который объединяет различные вызовы DAO, и я обычно обрабатываю специфичные для hibernate исключения во время выполнения и все другие связанные с данными исключения на сервисном уровне.Тем не менее, если в DAO есть куча логики, в которой что-то плохое может пойти не так, вероятно, неплохая идея - поймать это там, добавить некоторый контекст сообщения об ошибке, а затем снова выбросить его в цепочку.

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

  3. Насколько мне известно, поведение по умолчанию, когда исключение выбрасывается из транзакции, должно откатываться ине быть совершенным вообще.Ответ на # 2 действительно отвечает и на этот вопрос, т. Е. Если вы завернули все сервисные вызовы вашего уровня представления в блоки try / catch или сконфигурировали один глобально через веб-фреймворк , у вас не должно бытьпроблема с уведомлением пользователя о том, что произошло что-то плохое.

Эта статья (Рекомендации по обработке исключений) содержит хороший обзор обработки исключений в целом, что вы можететакже найти полезным.

0 голосов
/ 16 июля 2013

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

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