[JBOSS]Programistyczne wyłączanie po błędnym starcie

0

Witam

Problem wygląda następująco:
Mam aplikację, która ma restartować serwer JBoss, przy czym w przypadku błędnego uruchomienia powinna ten serwer wyłączać i spróbować go uruchomić ponownie. Po trzecim błędnym uruchomieniu aplikacja powinna kończyć działanie. JBossa uruchamiam poleceniem

java -classpath run.jar org.jboss.Main -c myconf

wywołanym przy pomocy Runtime.getRuntime().exec(). W normalnej sytuacji serwer odpala się poprawnie, więc nie ma problemu. Jednak nie wiem, jak wyłączyć błędnie uruchomioną instancję serwera, ponieważ w takim wypadku polecenie

shutdown.bat -S -sjnp://localhost:1299

wyrzuca błąd braku połączenia do serwera. Czy jest jakieś inne polecenie, którym można wyłączyć JBossa? Process.destroy() raczej nie wchodzi w grę.

Pozdrawiam

0

Mozesz powiedziac co sie ma zmienic po pierwszym badz drugim nieudanym uruchomieniu? Podejrzewam ze jak sie to robi automatycznie to nic sie w aplikacjach na serwerze nie zmiania, wiec jak ma sie samo to naprawic, i co ma dac ponowna proba? Chyba ze masz jakas wyuzdana logike w aplikacjach ktore same sie naprawiaja jesli nie uda sie ich zdeployowac?
Ja nie wiedze sensu w sumie.

0

Z tym trzykrotnym uruchomieniem to nie mój pomysł, tylko wymóg. Ale nawet przy założeniu, że uruchamiam raz i coś się wywali, to pasuje tą błędną instancję wyłączyć.

0

Jedyne co przychodzi mi do glowy to:

  • napisanie wrappera na skrypt uruchamiajacy jbossa
  • obserwacja logow i szukanie jakichs kluczowych slow, typu ERROR czy cos, i jesli po starcie jest jakis blad to wywolac stop
  • bez sensu to wymaganie
0
malamyga napisał(a)

(..) jesli po starcie jest jakis blad to wywolac stop

Możesz to trochę jaśniej napisać? Tzn. wiem, jak wykryć błąd uruchomienia, tylko to wywołanie stop mnie interesuje. Jeśli to ma być coś w stylu /etc/rc.d/init.d/jboss stop, to jak to ma wyglądać na Windowsie?

0

Nie ma pojecia, nie uzywam windowsa, ewentualnie do jakiegos testowania.
jboss ma katalog bin a w nim jary: run.jar, shutdown.jar, oraz skrypty run.bat, shutdown.bat, i twiddle.bat, ktore korzystaja z tych jarow. Mozesz podpatrzec co oni wywoluja, i napisac cos wlasnego, co startuje, mozliwe ze mozesz dodac listenera do warningow / bledow, i wywolac stop jesli cos sie takiego stanie. Wiecej info nie mam bo nie robilem tego nigdy. No ale mozesz to oprogramowac, nawet w miare wygodnie w Javie - wlasny prorgamik ktory ma jary jbossa w classpath.

0

[SOLVED]
Zrobiłem to inaczej. Mianowicie w katalogu JAVA_HOME/bin jest program jps, który wyświetla PID procesu i nazwę klasy głównej. Przykład:

C:\>"%JAVA_HOME%\bin\jps" -l
880 sun.tools.jps.Jps
1344 org.jboss.Main

Uruchomiłem go przed i po wystartowaniu JBossa, a różnica na wyjściu to właśnie PID nowej instancji serwera. Jeśli serwer nie wystartuje poprawnie, wywołuję

Runtime.getRuntime().exec("taskkill /PID pid_nowego_JBossa"); //wersja windows
Runtime.getRuntime().exec("kill -9 pid_nowego_JBossa"); //wersja linux
0

Wiesz co ja chyba ogolnie nie zrozumialem problemu. Myslalem ze masz napisac cos co restartuje jbossa jesli uruchamiasz go i start jakiejs aplikacji na nim zdeployowanej sie nie powiedzie.

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