Restart serwera Tomcat z poziomu kodu

0

Witam,
Mam problem z restartem serwera Tomcat z poziomu pliku bat wywoływanego w kodzie.
W kodzie aplikacji jest definiowany plik bat, który następnie po zapisaniu go na dysku jest uruchamiany także poprzez wywołanie w kodzie poleceniem Runtime.getRuntime().exec. W pliku tym poprzez dyrektywę call wywoływany jest shudown.bat. Z tego co zauważyłem plik jest uruchamiany natomiast serwer nie jest zatrzymywany. Serwer został rozpakowany z archiwum zip i uruchamiany jest poprzez wywołanie startup.bat.
Pozdrawiam

0

Jesteś pewien ze user pod którym działa twoja aplikacja ma uprawnienia do zabicia tego tomcata?

0

Dziękuję za odpowiedź.
Serwer uruchamiany jest z moimi uprawnieniami (administracyjne) poprzez odpalenie startup.bat. Na serwerze postawiona jest aplikacja, która ma zaimplementowane ściąganie z ftp nowej swojej wersji. Po ściągnięciu pliku war następuje odpalenie pliku bat w którym zatrzymany zostaje serwer Tomcat, podmieniony archiwum aplikacji (war) i uruchomiony serwer. Może problem związany jest z tym, że restart Tomcat'a ma być wykonany z poziomu aplikacji na nim uruchomionej? Może plik bat powinien zostać odpalony w procesie nie powiązanym z aplikacją?
Próbowałem wszelkich sposobów, które udało mi się znaleźć w necie. Niestety nie przyniosło to efektu. Informacja w logu zapisywanym przy odpalaniu pliku bat świadczy o tym, że działanie programu zatrzymuje się na wywołaniu pliku shudown.bat.
Pozdrawiam

0

Wywoływane są w kolejności pliki bat: shutdown, catalina oraz setclasspath. Dopiero przy wywołaniu tego ostatniego zapisy w logu się urywają.
Załącza fragment z loga:

C:\Tomcat\test\bin>if ""stop"" == ""debug"" goto needJavaHome 
C:\Tomcat\test\bin>rem Otherwise either JRE or JDK are fine 
C:\Tomcat\test\bin>if not "C:\Program Files\Java\jdk1.7.0_79" == "" goto gotJreHome 
C:\Tomcat\test\bin>rem Check if we have a usable JRE 
C:\Tomcat\test\bin>if not exist "C:\Program Files\Java\jdk1.7.0_79\bin\java.exe" goto noJreHome 
C:\Tomcat\test\bin>if not exist "C:\Program Files\Java\jdk1.7.0_79\bin\javaw.exe" goto noJreHome 
C:\Tomcat\test\bin>goto okJava 
C:\Tomcat\test\bin>rem Don't override the endorsed dir if the user has set it previously 
C:\Tomcat\test\bin>if not "C:\Tomcat\test\endorsed" == "" goto gotEndorseddir 
C:\Tomcat\test\bin>rem Don't override _RUNJAVA if the user has set it previously 
C:\Tomcat\test\bin>if not ""C:\Program Files\Java\jdk1.7.0_79\bin\java.exe"" == "" goto gotRunJava
0

Przypuszczam ze problem węza zjadającego swój ogon. Bat czeka aż zakończy się tomcat a ten czeka aż zakończy się wykonanie bata. Musisz to zrobić w osobnym, niezależnym procesie, tak zeby nikt na nikogo nie czekał.

0

Dziękuję za odpowiedź.
Czy mogę prosić o jakiś przykład? Prawdę mówiąc nie mam zielonego pojęcia jak do tego się zabrać.
Pozdrawiam

0

A właściwie po co ta cała kombinacja z zabijaniem tomcata i startowaniem od nowa? Przecież on sobie wykryje nowego wara i go załaduje?

0

Jak chcesz zabić aplikację to możesz też System.exit();

1 użytkowników online, w tym zalogowanych: 0, gości: 1