Как определить запуск Tomcat программно из сервлета? - PullRequest
0 голосов
/ 06 декабря 2018

Вопрос

Как программно определить, когда Tomcat завершил запуск?Я имею в виду программно из файла WAR, запущенного на Tomcat, скорее всего, через сервлет, который может по возможности подключиться к информации о контейнере?

Фон

Запись журнала Catalina, котораяВы обычно видите, что после того, как WAR полностью развернут, будет равен тому, что я ищу.У меня есть ограничение, которое делает анализ логов нежелательным.Но данные, которые поступают на Catalina.out, именно то, что я ищу.Я пытаюсь найти способ подняться на уровень выше сервлета, может быть, даже выше, чтобы получить статус контейнера в отношении времени запуска, но я открыт для альтернативных методов, если они возможны.

То, что я попробовал

Я попытался обнаружить инициализацию сервлета, но это специфично для компонентов внутри WAR, а не для самого контейнера сервлета.Я также пробовал Spring Events, но наивысшим уровнем, который они предоставляют, являются «Контексты приложения», которые указывают только на то, что группа Spring Bean уже закончила загрузку, и не обязательно даже на всех Spring Beans ... Если есть решение, которое ближе к Servlet Spec или Tomcatопределенная библиотека, которая будет оценена.

1 Ответ

0 голосов
/ 07 декабря 2018

Сервлет выполняется только в том случае, если Tomcat полностью завершил свой запуск и выполняет и обрабатывает запросы.Так что, извините, вопрос не имеет смысла.(Как будто вы не можете ответить на вопрос «Вы проснулись?» Правдиво «нет».)

Все, что запускает веб-приложение перед завершением запуска Tomcat, - это любые ServletContextListener, которые вы реализовали.и зарегистрирован (в server.xml).Когда приложение запускается Tomcat, оно вызывает метод contextInitialized () любого зарегистрированного ServletContextListener.

Если вы хотите, чтобы какой-либо код выполнялся в течение жизненного цикла Tomcat, вы можете использовать интерфейс org.apache.catalina.LifecycleListener Tomcat.,Реализуйте это в своем собственном классе и зарегистрируйте класс в server.xml в службе, движке или хосте.Такой класс не будет находиться в вашем веб-приложении, но развернут в каталоге lib Tomcat (что-то вроде этого; проверьте вашу версию Tomcat).

Концептуально, одно веб-приложение никогда не может знать ни о каком другом веб-приложении в том же контейнере сервлета (например, Tomcat);это строго запрещено спецификацией.Нет способов соединить два приложения каким-либо образом.В Tomcat существует исключение из приложения " привилегированный ", такого как Tomcat Manager .Если вы определяете приложение как привилегированное, оно имеет определенные средства для работы с другими веб-приложениями.

...