Jeżeli JBoss AS zostanie uruchomiony w domyślnej (default
) konfiguracji to jest wstępnie skonfigurowany tak, że automatycznie instaluje wszelkie aplikacje jakie pojawią się w katalogu deploy
. Podobnie, jeżeli jakąś aplikacja zostanie usunięta z tego katalogu, to automatycznie zostanie ona także odinstalowana z serwera. Zachowanie takie jest bardzo przydatne w momencie gdy tworzymy lub testujemy aplikację, ale niekoniecznie porządne na systemie produkcyjnym. Automatyczna instalacja aplikacji może się wiązać z takimi problemami jak:
- ciągle jest uruchomiony specjalny wątek, który sprawdza czy nowa aplikacja nie pojawiła się w katalogu
deploy
; - trzeba pamiętać, że aktualizacja aplikacji wiąże się w w praktyce z usunięciem aplikacji z serwera i jej ponowną instalacją, więc jeżeli z jakiś powodów zaktualizujemy aplikację, nastąpi jej usunięcie, co w konsekwencji może przeszkodzić w pracy użytkownikom korzystającym z aplikacji;
- przypadkowa (czy też nawet zamierzona) edycja plików deskryptora aplikacji także powoduje jej restart.
Konfiguracja skanowania zmian w katalogu deploy
Za konfigurację mechanizmu skanującego zmiany w katalogu deploy
odpowiada klasa HDScanner
. Konfiguracja usługi znajduje się w pliku deploy/hdscanner-jboss-beans.xml
:
10 11 12 13 14 15 16 17 18 19 | <!-- Hotdeployment of applications --> <bean name="HDScanner" class="org.jboss.system.server.profileservice.hotdeploy.HDScanner"> <property name="deployer"><inject bean="ProfileServiceDeployer"/></property> <property name="profileService"><inject bean="ProfileService"/></property> <property name="scanPeriod">5000</property> <property name="scanThreadName">HDScanner</property> <!-- <property name="scanEnabled">false</property> --> </bean> |
Interesujące parametry:
- scanPeriod
Czas odstępu pomiędzy poszczególnymi skanowaniami wyrażona w milisekundach, domyślna wartość to5000
, czyli5
sekund. - scanThreadName
Nazwa wątka, który skanuje katalogu, domyślna wartośćHDScanner
. Można zmienić na inną wartość, jeżeli monitorujemy działające wątki serwera. - scanEnabled
Zmienna określająca, czy skanowanie powinno być włączone (wartośćtrue
) czy też nie (wartośćfalse
). W domyślnej konfiguracji nie występuje w pliku XML. Próba dodanie jej z wartościątrue
powoduje, że serwer wyrzuca szereg wyjątków:23:34:18,727 ERROR [AbstractKernelController] Error installing to Configured: name=HDScanner state=Instantiated
java.lang.RuntimeException: Error configuring property: scanEnabled for HDScanner
at org.jboss.kernel.plugins.dependency.ConfigureAction.dispatchSetProperty(ConfigureAction.java:112)
at org.jboss.kernel.plugins.dependency.ConfigureAction.setAttributes(ConfigureAction.java:85)
...Prawdopodobnie jest to spowodowane błędem Setting HDScanner’s scanEnabled Attribute to True via XML Results In NPE lub też Setting HDScanner’s scanEnabled Attribute to True via XML Results In NPE
Jak widać, nie da się po prostu włączyć odpowiedniego przełącznika i wyłączyć automatyczną instalację aplikacji. W związku z tym, należy usunąć z katalogu deploy
plik hdscanner-jboss-beans.xml[
.
Po tym kroku przestanie działać usługa odpowiedzialna za skanowanie katalogu deploy
, więc zmiany w nim będą sprawdzane tylko podczas startu serwera aplikacji.
Ręczna instalacja aplikacji
Jeżeli jest wyłączone automatyczne skanowanie katalogu deploy
a trzeba zainstalować jakąś aplikację, można użyć polecenia twiddle.sh
za pomocą którego można wywołać ziarno MainDeployer
, które odpowiada za instalację aplikacji:
- deploy – instalacja wybranej aplikacji
twiddle.sh -s localhost -u UŻYTKOWNIK -p HASŁO invoke "jboss.system:service=MainDeployer" deploy "file:/ścieżka/do/pliku/do/instalacji"
- undeploy – odinstalowanie wybranej aplikacji
twiddle.sh -s localhost -u UŻYTKOWNIK -p HASŁO invoke "jboss.system:service=MainDeployer" undeploy "file:/ścieżka/do/pliku/do/instalacji"
- redeploy – przeinstalowanie wybranej aplikacji
twiddle.sh -s localhost -u UŻYTKOWNIK -p HASŁO invoke "jboss.system:service=MainDeployer" redeploy "file:/ścieżka/do/pliku/do/instalacji"
- hdscanner-jboss-beans.xml – ponowna instalacja skanowania
- Skopiuj plik
hdscanner-jboss-beans.xml
z powrotem do katalogudeploy
. - Wykonaj polecenie:
twiddle.sh -s localhost -u UŻYTKOWNIK -p HASŁO invoke "jboss.system:service=MainDeployer" redeploy "file:/ścieżka/do/pliku/xml"
- Skopiuj plik
Co trzeba jeszcze zapamiętać:
- serwera aplikacji musi mieć dostęp do wskazanego pliku
- aplikacja do zainstalowania zostanie zainstalowana bezpośrednio, nie będzie ona kopiowania do katalogu
deploy
, zostanie ona od razu rozkompresowana do katalogutmp
- zainstalowane aplikacje nie będę ponownie uruchamiane po restarcie serwera (chyba że zostaną one umieszczone w katalogu
deploy
ręcznie.
Lista zainstalowanych aplikacji
Można uzyskać listę zainstalowanych aplikacji, przy pomocy polecenie twiddle
:
Domyślnie poszczególne ścieżki z aplikacji są oddzielone od siebie znakiem ‚,’, polecenie sed
zmienia je na znak nowej linii.