Aplikacje zainstalowane w serwerze JBoss można zarówno zatrzymywać jak i ponownie uruchamiać, bez konieczności ich instalacji.

Odpowiednie akcje można bez trudności znaleźć w np. w konsoli administracyjnej:

Admin Console - kontrola aplikacji

Admin Console - kontrola aplikacji

Odpowiednie akcje pozwalają na zatrzymanie, uruchomienie lub restart aplikacji.

Co jednak zrobić, aby takie same akcje wykonać przy użyciu linii poleceń?

Za zarządzanie serwerem JBoss z linii poleceń odpowiada polecenie twiddle, można je znaleźć w katalogu bin serwera, tam gdzie pliku run.sh. Przy jego pomocy można wykonywać określone akcje na odpowiednich ziarnach.

Pozostaje więc teraz tylko znaleźć ziarna odpowiedzialne za poszczególne akcje i powinno być po sprawie.

Operacja na aplikacjach typu WAR

Aplikacje typu war to aplikacje webowem uruchamiane w ramach kontenera JBoss Web Container (czyli we wbudowanym Tomcacie). Aby taką aplikację zatrzymać czy też wystartować, należy znaleźć tylko odpowiednie ziarno, które za nią stroi. W tym przypadku wystarczy się przyjrzeć zawartości ziaren znajdujących się w grupie jboss.web.deployment.

Można to zrobić albu używając konsoli JMX lub też bezpośrednio przy użyciu polecenie twiddle:

$ twiddle.sh query 'jboss.web.deployment:*'
jboss.web.deployment:war=/ROOT
jboss.web.deployment:war=/admin-console
jboss.web.deployment:war=/jmx-console
jboss.web.deployment:war=/invoker
jboss.web.deployment:war=/juddi

Tym sposobem otrzymamy listę ziaren, które odpowiadają za zarządzaniem poszczególnymi aplikacji. Teraz pozostaje się dowiedzieć, jakich metod można na nich używać:

$ twiddle.sh info 'jboss.web.deployment:war=/ROOT'
Description: Management Bean.
+++ Attributes:
 Name: SecurityManagement
 Type: org.jboss.security.ISecurityManagement
 Access: -w
 Name: PolicyRegistration
 Type: org.jboss.security.authorization.PolicyRegistration
 Access: -w
 Name: Kernel
 Type: org.jboss.kernel.Kernel
 Access: -w
+++ Operations:
 void destroy()
 void start()    
 void stop()
 void create()

Interesujące są dwie metody: start oraz stop. Polecenie, które zatrzyma aplikację:

$ twiddle.sh invoke 'jboss.web.deployment:war=/ROOT' stop

W logach JBossa powinien pojawić się taki komunikat:

15:35:35,665 INFO  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] undeploy, ctxPath=/

Uruchomienie aplikacji jest możliwe poprzez taką komendę:

$ twiddle.sh invoke 'jboss.web.deployment:war=/ROOT' start

I w logach można znaleźć informację o uruchomieniu aplikacji:

15:37:20,268 INFO  [org.jboss.web.tomcat.service.deployers.TomcatDeployment] deploy, ctxPath=/

Inne typy aplikacji

Niestety, nie udało mi się znaleźć odpowiednich ziaren dla typów EAR czy RAR. Widać, że takie istnieją, ale nie zachowują się do końca tak jak bym chciał.

Polecenie to wyświetli listę ziaren z grupy jboss.j2ee:

$ twiddle.sh query 'jboss.j2ee:*'

W moim przypadku wyświetlone zostały dwa ziarna które pasowały do aplikacji. Jedno z nich zawierało akcje start oraz stop. I tak wywołanie akcji stop niczego nie zmieniło (aplikacja dalej działała). Wywołanie natomiast akcji start powodowało wyświetlenie komunikatów o zainstalowaniu aplikacji, ale także niczego nie zmieniło w jej działaniu (jak obsługiwała połączenia tak obsługiwała je cały czas).

Metodą, która natomiast zadziałała bez zastrzeżeń, jest wymuszenie odinstalowania aplikacji. Więcej można przeczytać w tym artykule: Zarządzanie instalacją aplikacji w JBoss AS. W skrócie wygląda to tak:

  • usunięcie aplikacji:
    $ twiddle.sh invoke "jboss.system:service=MainDeployer" undeploy "file:/ścieżka/do/pliku/do/instalacji"
  • instalacja aplikacji:
    $ twiddle.sh invoke "jboss.system:service=MainDeployer" deploy "file:/ścieżka/do/pliku/do/instalacji"

Przy takim instalowaniu aplikacji należy jednak pamiętać o dwóch sprawach:

  • jeżeli JBoss ma uruchomioną usługę HDScanner, to jeżeli zostanie odinstalowana aplikacje znajdująca się w katalogu deploy, może ona zostać zaraz zainstalowana ponownie przez tą usługę
  • aplikacje, które nie znajdują się w katalogu deploy nie są automatycznie instalowane podczas startu serwera JBoss, więc trzeba je zainstalować później[/cci]

Źródła