отключение / удаление кота из сервлета - PullRequest
4 голосов
/ 08 октября 2009

У меня есть сервлет инициализации в Tomcat, который загружает важные данные. Иногда необходимо прервать запуск при определенных ошибках.

как изящно завершить работу развернутого приложения / всего сервера приложений без вызова System.exit(1)

Я хочу избежать вызова сервлета выключения через порт, так как это не настроено в моей установке.

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

1 Ответ

7 голосов
/ 08 октября 2009

Прежде всего, вы никогда не должны вызывать System.exit() из контейнера сервлета, так как могут быть другие приложения, работающие в том же процессе, что и у вас, и было бы невероятно неправильно принудительно уничтожать весь процесс.

Предполагая, что ваш "init servlet" реализует ServletContextListener, в API / интерфейсе не определен формальный способ передачи сигнала сервлет-контейнеру "Пожалуйста, аккуратно закройте приложение". Однако вы можете выбросить какой-то RuntimeException из метода contextInitialized(), который в большинстве контейнеров (по крайней мере, Tomcat) остановит запуск вашего веб-приложения и оставит его в состоянии «остановлено». Однако я сомневаюсь, что Tomcat продолжит вызывать ваших слушателей выключения.

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

...