JBoss 7 – pierwsze wrażenia

JBoss 7 – pierwsze wrażenia

13 listopada 2014 Marek Berkan 1 komentarz

Przez bardzo długi czas korzystaliśmy ze starszej wersji JBossa i w końcu nadeszła chwila na rozpoznanie aktualnego rozwiązania. Jak to zwykle bywa, nie było czasu na czytanie całej dokumentacji i przerabianie tutoriali, tylko działanie typu “rozpoznanie w boju” – poniżej kilka przemyśleń.

Strona główna projektu JBoss
Strona główna projektu JBoss

Na warsztat poszła wersja 7.1.1 GA (tzw. community edition) którą można pobrać tutaj. Serwer może pracować w wersji “standalone” lub w klastrze, odpowiedni tryb uruchamia się odpowiednio poleceniem bin/standalone.sh lub bin/domain.sh. Przed pierwszym uruchomieniem należy dodać sobie użytkownika administracyjnego poleceniem bin/add-user.sh, dzięki czemu po uruchomieniu będziemy mieli pod adresem http://127.0.01:9990/ dostępną konsolę administracyjną przez przeglądarkę WWW:

Konsola administracyjna JBoss 7
Konsola administracyjna JBoss 7

Pierwsza zasadnicza zmiana, to fakt że cała konfiguracja serwera, zamiast jak dotychczas w pojedynczych plikach, jest teraz w jednym dużym pliku standalone/configuration/standalone.xml. Tam m.in. musimy umieścić:

  • definicje datasource’ów,
  • nazwy kolejek JMS (sekcja<subsystem xmlns=”urn:jboss:domain:messaging:1.1″>)
  • namiary na serwer SMTP (sekcja<outbound-socket-binding name=”mail-smtp”>)
  • definicje hostów wirtualnych (sekcja <subsystem xmlns=”urn:jboss:domain:web:1.1″…)
  • konektor AJP (sekcja<socket-binding name=”ajp” port=”xxx”/>…)

Samą aplikacje w pliku ear umieszczamy w katalogu standalone/deployments – w czasie startu serwer sprawdza nowe pliki i deployuje je. Jeżeli przebiegnie to poprawnie, to powstaje obok pliku ear plik z identyczną nazwą i suffiksem “.deployed”.

Ciekawostką jest fakt, że sterowników JDBC nie umieszczamy w katalogu “lib/ext” jak dotychczas, tylko w katalogu standalone/deployments (ten sam co ear) i jest on identycznie deploy’owany. Jeżeli jest zgodny ze standardem, to nic poza tym nie musimy robić – w sensie deklaratywnym.

Tyle teorii, teraz napotkane problemy:

  1. Nazwy zasobów dostępnych przez JNDI muszą mieć przedrostek “java:”, więc jeżeli nasza aplikacja w pliku jboss-web.xml wcześniej miała definicję kolejki
    &amp;lt;jndi-name&amp;gt;/queue/emailQueue&amp;lt;/jndi-name&amp;gt;

    to teraz musi mieć

    &amp;lt;jndi-name&amp;gt;java:/queue/emailQueue&amp;lt;/jndi-name&amp;gt;
  2. Jeżeli w jednym pliku ear mamy zarówno webaplikacje (plik war) oraz EJB’y, to nie wiedzieć czemu, kod w aplikacji war nie potrafi znaleźć klas znajdujących się w katalogu głównym ear’a. Workaround’em na ten problem jest skopiowanie ich do katalogu WEB-INF/lib w samym war ale to mało eleganckie rozwiązanie. Jeżeli w danym ear nie ma EJB, to WAR działa poprawnie bez konieczności tego kopiowania. Obszerne wyjaśnienie kwestii classloaderów jest w dokumentacji JBoss ale mi nie udało się znaleźć przyczyny i rozwiązania tego problemu.
  3. Wysyłanie komunikatów do JMS nie działa od razu w trybie Session.SESSION_TRANSACTED – efekt jest taki że komunikat jest przyjmowany, ale nie dostaje dostarczony. Tymczasowym rozwiązaniem jest wysyłanie go w trybie Session.AUTO_ACKNOWLEDGE.

Jeden komentarz

    26 listopada 2014

    Definicje DataSource’ów można też umieścić jako osobne pliki …-ds.xml w katalogu standalone/deployments. Dość wygodne rozwiązanie szczególnie na początku developmentu, kiedy dopiero zaczynamy konfigurować DS – JBoss automatycznie zauważa zmianę i redeploy’uje DataSource.

Zostaw komentarz