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 [1] lub też Setting HDScanner’s scanEnabled Attribute to True via XML Results In NPE [2]
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.