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