Вопрос

Мое веб-приложение является частью большого 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, который будет перенаправлять на страницу с ошибкой, или что-то еще, если проверки не сработали. Таким образом, вам не нужно предотвращать загрузку приложения, но вы можете обрабатывать его более изящно во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top