вопрос об обработке потери соединения с базой данных в приложении JSF - PullRequest
1 голос
/ 22 июня 2011

У меня есть приложение JSF со слоем DAO, реализованным для Hibernate (также используется Spring для управления транзакциями).

Проблема, с которой я сталкиваюсь, заключается в том, что иногда база данных отключается, и когда это происходит, я хочу, чтобы приложение JSF перенаправило на страницу «Потерянное соединение с базой данных».

Есть два подхода, которые я могу придумать, чтобы справиться с этим:

(1) прослушиватель фазы, который проверяет соединение с базой данных при каждом запросе и перенаправляет, если базы данных нет; (за исключением того, что означает дополнительный запрос к базе данных при каждом запросе веб-приложения)

(2) каждый метод в каждом DAO выдает какой-то "NoDBConnectionExcepiton", перехватывает это исключение в компонентах и ​​перенаправляет туда (за исключением того, что это означает написание большого количества кода обработки исключений)

У кого-нибудь есть идеи? Предложения и советы приветствуются!

Rob

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

каждый метод в каждом DAO выдает какой-то "NoDBConnectionExcepiton"

Я бы пошел на это. Вы можете позволить ему быть подклассом некоторого исключения, которое он уже выбрасывает, так что вам не нужно изменять предложения throws или catch. Например, подкласс SQLException может быть?

и перехватить это исключение в компонентах поддержки и перенаправить туда (кроме того, что это означает написание большого количества кода обработки исключений)

Не обязательно. Вы можете определить пользовательскую страницу ошибки для определенного исключения в web.xml, чтобы контейнер обрабатывал ее сам.

<error-page>
    <exception-type>com.example.NoDBConnectionException</exception-type>
    <location>/errors/dbconnection.html</location>
</error-page>
1 голос
/ 22 июня 2011

Hibernate уже генерирует непроверенную HibernateException, когда что-то не так.Если ваше приложение (разумно) не содержит ошибок, вы можете интерпретировать все HibernateException как признаки того, что база данных не работает, и рассматривать их как таковые.Бонус от этого - исключение RuntimeException: вы выбираете, на каком уровне своего приложения вы их обрабатываете.

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