Прервать Java-приложение при запуске - PullRequest
5 голосов
/ 07 ноября 2008

Мое веб-приложение является частью большого EAR, развернутого на сервере Websphere. Сервер размещает ряд других приложений на том же виртуальном сервере. В моем веб-приложении есть некоторые проверки инициализации / работоспособности в методе servletContextListener-> contextInitialized. Я хочу сделать веб-приложение недоступным, если инициализация / проверки работоспособности не пройдены. Каков реальный способ сделать это? Будет ли достаточно выбросить RuntimeException из contextInitialized? Ожидается ли доступ к остальной части EAR? Спасибо.

Ответы [ 2 ]

7 голосов
/ 07 ноября 2008

Я бы рекомендовал бросить RuntimeException из ServletContextListener.contextInitialized.

Servlet 2.3 не очень ясно понял, но Servlet 2.4 добавил следующую деталь:

Некоторые исключения не встречаются при стек вызовов другого компонента в приложение. Примером этого является & Hellip; ServletContextListener, который выдает необработанное исключение во время уведомление о контексте сервлета Инициализация & hellip ;. В этом случае, Разработчик не имеет возможности обработать исключение. Контейнер может отвечать на все последующие запросы в веб-приложение с HTTP код состояния 500 для обозначения ошибка приложения.

Поскольку в нем говорится, что механизм сервлета «может» отключить доступ к приложению, вы можете найти сервер, который делает что-то еще. Однако Tomcat и WebLogic отключают приложение, и единственное, что я могу придумать, это игнорировать исключение. Я не вижу контейнера, который сделал это очень популярным, поэтому вам лучше самим проверить его в WebSphere.

0 голосов
/ 07 ноября 2008

Бросок исключения RuntimeException, вероятно, сделает только этот сервлет недоступным. Более безопасный способ может заключаться в реализации чего-то вроде перехватчика Spring, который будет перенаправлять на страницу с ошибкой, или что-то еще, если проверки не сработали. Таким образом, вам не нужно предотвращать загрузку приложения, но вы можете обрабатывать его более изящно во время выполнения.

...