Я создаю относительно простое веб-приложение, где основной сервлет реализует ServletContextListener
интерфейс, чтобы определить, был ли контекст запущен или остановлен. Я реализовал мой contextInitialized
, contextDestroyed
, init
и destroy
методы (оба init
и destroy
звонить super
на базовом классе). Я в настоящее время не реализовывал реальной функциональности, кроме которой я инициализировал log4j в contextInitialized
метод, где я загружаюсь log4j.properties
файл.
Когда я запускаю и останавливаю сервер Tomcat из Eclipse однако, все называют в правильном порядке (я использую некоторых System.out.println
для тестирования этого), но приблизительно после 10 секунд остановки сервера мне дарят всплывающее окно Eclipse, заявляя следующее:
Сервер Tomcat v6.0 сервера в localhost не отвечает. Вы хотите завершить этот сервер? Нажмите "OK", чтобы завершить сервер или нажать Cancel, чтобы продолжить ожидать.
Это - то, что печатается в моей консоли Eclipse, когда я останавливаю сервер:
01.04.2010 19:39:13 org.apache.catalina.core. Остановка StandardService
ИНФОРМАЦИЯ: Остановка сервиса Catalina
contextDestroyed
01.04.2010 19:39:13 org.apache.coyote.http11. Http11Protocol уничтожают
ИНФОРМАЦИЯ: Остановка Койота HTTP/1.1 на http-8080
И после последнего INFO
передайте его, просто зависает там, пока всплывающее окно не появляется. Если я принимаю решение ожидать, нажмите Cancel, Eclipse становится неприменимым, и я должен уничтожить процесс Eclipse от терминала.
Любой вход о том, как решить эту проблему, значительно ценился бы.
ОБНОВЛЕНИЕ:
Проблема была вызвана потоком недемона, который я запускаю в моем init
метод (забыл упоминать это :). Проблема была решена путем явной остановки потока с stop
метод, даже при том, что тот метод, кажется, удерживается от использования.
Как упоминалось в этот поток , это должно быть связано с проблемой очистки.
Если webapp не выполнит очистку полностью, особенно в том, что касается остановки запускаемых не адемонных потоков, то Tomcat не сможет завершить работу.
. Нажатие кнопки "Стоп" имеет то преимущество, что дает таймаут
. Если Tomcat не остановится в течение таймаута, появится диалоговое окно с возможностью прекратить работу сервера или продолжить ожидание.
У меня было похожее поведение. Если закрытие Tomcat не помогает, попробуйте найти другую активную консоль из консольного вида и убейте ее. В моем случае это помогает.