Остановите Apache Tomcat, когда веб-приложение останавливается - PullRequest
0 голосов
/ 15 ноября 2010

Сценарий:

Apache Tomcat 6.0 запускается как служба на Windows Server 2008 R2 с использованием оболочки (org.tanukisoftware.wrapper.WrapperStartStop), которая использует org.apache.catalina.startup.Bootstrap. В ходе запуска Tomcat также запускается одно веб-приложение. Это веб-приложение должно подключиться к удаленной базе данных и проверить соединение. Он пытается подключиться пару раз, если база данных недоступна, а затем отключается после попытки x.

Проблема:

Мне нужно остановить Apache Tomcat после выхода из веб-приложения, когда соединение с базой данных недоступно.

Возможные решения:

  • Остановите Apache Tomcat из веб-приложения (уже пробовал отключить порт, который не работал из-за отказа в соединении - с автономным приложением Java это работало)
  • Вызов внешнего приложения Java из веб-приложения
  • Настройте Apache Tomcat на отключение, если закрывается единственное веб-приложение - я не смог найти способ сделать это

Есть идеи? Может быть, другой подход?

привет

Александр

Ответы [ 3 ]

1 голос
/ 17 декабря 2010

Хорошо, я уверен, что это плохой способ сделать это, но, как и вы, я не смог придумать лучшего решения.

try{
    MBeanServer server = MBeanUtils.createServer();
    ObjectName name = new ObjectName("Catalina:type=Service,serviceName=Catalina");
    server.invoke(name, "stop", new Object[0], new String[0]);
} catch (Exception) {
     e.printStackTrace();
}

Это в основном скажет Каталине убить себя.

1 голос
/ 03 ноября 2011

System.exit(0) из вашего веб-приложения отключит экземпляр Tomcat, если не настроен менеджер безопасности.

Работает с автономного сервера, не уверен, работает ли он при работе в качестве службы Windows.

Редактировать: хотя вы можете прочитать это: Вызов System.exit () в методе destroy () сервлета

1 голос
/ 16 ноября 2010

Когда Tomcat запущен, вы, по сути, вызываете org.apache.catalina.startup.Bootstrap::main с параметром start. Чтобы остановить Tomcat, вызовите тот же класс / метод с помощью команды stop. Для этого вам не нужен другой Java-процесс, просто вызовите метод main статически.

См. Javadoc: http://tomcat.apache.org/tomcat-5.5-doc/catalina/docs/api/org/apache/catalina/startup/Bootstrap.html

Если вы не хотите зависеть от библиотек Tomcat, просто примените магию отражения.

...