JBoss 7 – pierwsze wrażenia

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
    <jndi-name>/queue/emailQueue</jndi-name>

    to teraz musi mieć

    <jndi-name>java:/queue/emailQueue</jndi-name>
  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.

O autorze

Marek Berkan Marek Berkan: programista, entuzjasta tworzenia oprogramowania, zarządzania zespołami technicznymi. Prywatnie motocyklista, kolarz MTB, biegacz, żeglarz, rekreacyjny wspinacz, zamiłowany turysta. Witryny: , , .

Jeden komentarz do “JBoss 7 – pierwsze wrażenia

  1. Michał Kołodziejski

    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.

    Odpowiedz

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *