Как обрабатывать сбои базы данных (Glassfish/MySQL)?

У меня есть трехуровневое приложение со Glassfish 3.1.2.2, база данных MySQL и клиентское приложение Swing. Возможно ли как-то справиться с падением сервера базы данных?

Я пытался остановить службу MySQL во время работы моего приложения. Затем я получаю исключения javax.ejb.EJBAccessException каждый раз, когда пытаюсь получить доступ к базе данных через один из моих сессионных компонентов фасада.

Я хочу уведомить пользователя, что база данных в настоящее время не работает. Более того, я хочу установить свое приложение в "спящий режим", пока база данных не будет запущена и снова запущена.

Каков будет хороший (и, возможно, простой) подход к такому сценарию?

Заранее спасибо за помощь!

2 ответа

Решение

A) Убедитесь, что вы настроили Glassfish Connection Pool для автоматического восстановления / переподключения

В конфигурации пула соединений Glassfish JDBC установите значения для:

  • Атрибуты: is-connection-validation-required, validate-atmost-once-period-in-seconds, connection-creation-retry-attempts, connection-validation-method, connection-creation-retry-interval-in-seconds, ping

Конфигурация Glassfish Свойства jdbc-connection-pool
Glassfish Admin - подкоманда create-jdbc-connection-pool

шаги:

  1. Предполагая, что Glassfish запущен (например, запустите сервер на вкладке "Службы Netbeans", откройте "Серверы" и щелкните правой кнопкой мыши "Glassfish"), тогда у вас должен быть запущен сервер администратора домена.
  2. Откройте консоль администратора в веб-браузере: http://localhost:4848 (или используйте любой порт, который вы указали при установке.
  3. Слева в меню "Общие задачи" откройте "Ресурсы" -> "JDBC" и нажмите "Пулы соединений JDBC".
  4. Нажмите на имя пула подключений (или создайте новое, нажав кнопку "Создать").
  5. Выберите вкладку "Дополнительно" и введите:
  6. Подтвердить максимум один раз: (например, 60) в секундах
  7. Попытки повторного создания: (например, 3)
  8. Интервал повтора: (например, 10) в секундах
  9. Проверка соединения: (галочка) Требуется
  10. Метод проверки: (например, автоматическая фиксация)
  11. Другие дополнительные свойства по желанию
  12. Выберите вкладку "Общие" и введите:
  13. Пинг (Тик)
  14. Другие общие свойства по желанию

B) Реализовать обработку ошибок приложения / мониторинг БД и оповещения

  1. Обязательно: отлавливайте фатальные ошибки пользователей на уровне инфраструктуры и предупреждайте персонал службы поддержки.

    Создайте простой класс JMX для отправки уведомления и вызовите его метод при возникновении фатальной ошибки. JMX MBean Class отправляет уведомления. Вы можете использовать консоль монитора JMX для наблюдения за состоянием серверов - некоторые из этих консолей отправляют оповещения по электронной почте (например, JManage и RHQ), и существуют мосты для доступа через HTTP/AJax или другие языки (например, Jolokia может использовать javascript/perl/java API для доступа к уведомлениям JMX).

    Используйте API Календаря Google, чтобы отправить сообщение об ошибке для поддержки календаря Google сотрудников (через 1 или 2 минуты в будущем). Затем настройте календарь Google на отправку уведомлений по электронной почте / SMS-сообщениям - вы получите предупреждение об ошибке прямо в службу поддержки практически в реальном времени. На это распространяются ограничения на использование Google (вежливое ограничение в 10000 запросов в день, поэтому убедитесь, что в ваших приложениях нет ошибок, и используйте логику, чтобы ограничить количество сообщений, отправляемых за час / день / неделю)

  2. Желательно: следить за БД (и, возможно, сервером приложений) и оповещать персонал службы поддержки о сбоях

    • Zabbix с открытым исходным кодом имеет встроенный мониторинг и оповещение MySQL - он легкий, но требует настройки и настройки
    • Hyperic с открытым исходным кодом имеет плагины расширения для мониторинга MySQL и встроенных предупреждений - имеет большой вес, может быть сложным в настройке и настройке
    • Nagois с открытым исходным кодом используется по умолчанию для *nix ОС - имеет большой вес, может быть сложным в настройке и настройке

    В любом случае, установка не будет происходить мгновенно - лучше всего реализовать как отдельный мини-проект и сделать это правильно - лучше всего привлечь к этому вспомогательный персонал.

    Если это "выходит за рамки", то создайте свой собственный простой монитор:

    • Таймер EJB для запуска запланированного простого тестового запроса к вашей БД - в случае сбоя отправьте оповещение (через JMX/Google Calendar/Java Mail/ SMS gateway API). Или используйте Quartz планировщик с открытым исходным кодом, чтобы сделать ту же работу

Сам по себе Connection Pool будет следить за состоянием базы данных. Вы можете создать перехватчик и поднять, когда дБ падает. Контейнер попытается восстановить соединение, но вы не обязательно будете знать, когда он будет успешным. Как только вы обнаружите ошибку, вам нужно где-то установить семафор. Затем вам нужно будет запустить таймер, чтобы периодически проверять состояние БД и сбрасывать семафор после его возвращения. Наконец, вы должны написать свое приложение, чтобы уважать семафор.

Это предложение высокого уровня. удачи.

Кроме того, вы можете перехватить все события, используя JMX... Я не уверен, хотя.

Другие вопросы по тегам