Прервать Java-приложение при запуске
-
07-07-2019 - |
Вопрос
Мое веб-приложение является частью большого EAR, который развернут на сервере Websphere. Сервер размещает ряд других приложений на том же виртуальном сервере. Мое веб-приложение имеет некоторые проверки инициализации / работоспособности в методе servletContextListener- contextInitialized. Я хочу сделать веб-приложение недоступным, если инициализация / проверки работоспособности не пройдены. Каков реальный способ сделать это? Будет ли достаточно выбросить RuntimeException из contextInitialized? Ожидается ли доступ к остальной части EAR? Спасибо.
Решение
Я бы рекомендовал выбросить RuntimeException
из ServletContextListener.contextInitialized
.
Servlet 2.3 не очень хорошо понимал это, но Servlet 2.4 добавил следующую деталь:
Некоторые исключения не встречаются в стек вызовов другого компонента в приложение. Примером этого является & # 8230; ServletContextListener, который выдает необработанное исключение во время уведомление о контексте сервлета Инициализация & # 8230 ;. В этом случае, Разработчик не имеет возможности обработать исключение. Контейнер может отвечать на все последующие запросы в веб-приложение с HTTP код состояния 500 для обозначения ошибка приложения.
Поскольку он говорит, что механизм сервлета "может" отключить доступ к приложению, вы можете найти сервер, который делает что-то еще. Однако Tomcat и WebLogic отключают приложение, и единственное, что я могу придумать, это игнорировать исключение. Я не вижу контейнер, который сделал это очень популярным, поэтому вам лучше протестировать его в WebSphere самостоятельно.
Другие советы
Бросок исключения RuntimeException, вероятно, сделает только этот сервлет недоступным. Более безопасный способ может заключаться в реализации чего-то вроде перехватчика Spring, который будет перенаправлять на страницу с ошибкой, или что-то еще, если проверки не сработали. Таким образом, вам не нужно предотвращать загрузку приложения, но вы можете обрабатывать его более изящно во время выполнения.