16 stycznia 2007

JBoss AS 4.0.5 z EJB 3.0 RC9 Patch 1 i NetBeans IDE 5.5.1

Po uaktualnieniu NetBeans IDE do wersji 5.5.1 Daily Build (ze względu na błędne działanie wersji 5.5 z GlassFish v2 b31) postanowiłem sprawdzić jak wygląda współpraca z JBoss AS 4.0.5, szczególnie, że i współpraca z JBoss AS się zepsuła po zmianach w konfiguracji serwera w 4.0.5. Dodatkowo, ostatnia próba zaprezentowania JBoss AS z NetBeans, podczas III spotkania Warszawa JUG, zakończyła się totalną klapą, więc tym bardziej interesowały mnie poprawki w nowszej wersji NetBeans IDE dotyczące JBoss AS (tak przy okazji, właśnie pojawiła się nowa wersja NetBeans IDE 6.0 M6, w której włączono większość z funkcjonalności Java EE). Samo uruchomienie JBoss AS nie stanowiło dla mnie czegoś interesującego, ale możliwość uruchamiania projektów Java EE 5 na JBoss AS z rozszerzeniem EJB 3.0 RC9 Patch 1 było niezwykle kuszące (w końcu to i załoga JBoss AS uczestniczyła w pracach grupy standaryzującej EJB3).

Na moją decyzję o instalacji JBoss AS 4.0.5 wpłynęła również notka o JBoss Seam - A Conversation with Seam, którego powoli rozpoznaję na kolejne IV spotkanie Warszawa JUG. Jak się okazało instalacja całego środowiska i aplikacji opisanej w notce poszła nadzwyczaj zgrabnie ( chociaż początkowo miałem problemy z uruchamianiem JBoss AS w NetBeans IDE, aż zauważyłem, że korzystam z profilu all zamiast default, gdzie zainstalowałem łatę EJB3. Straciłem ponad 2 godziny próbując poukładać informacje jakie miałem nt. integracji NB i JBS. Kolejny raz sen przyniósł rozwiązanie!)

Instalacja JBoss AS 4.0.5 z EJB 3.0 RC9 Patch 1 i uruchomienie w NetBeans 5.5.1 Daily Build jest wystarczająco nieskomplikowana, aby spróbować jej bez pomocy JEMS Installer (nie potrafię tego wytłumaczyć, ale nie specjalnie podoba mi się instalacja oprogramowania w ten sposób - przyzwyczaiłem się, że wystarczy rozpakować paczkę dystrybucyjną do wybranego katalogu i można pracować, a próba ukrycia przede mną poszczególnych kroków instalacyjnych zazwyczaj mnie zniechęca). Po kilku minutach można uruchamiać projekty Java EE 5 na JBoss AS.
  1. Rozpocząłem od rozpakowania wersji JBoss AS 4.0.5.GA do wybranego przeze mnie katalogu, np. c:/apps/jboss
  2. Pobrałem i rozpakowałem łatę EJB 3.0 Preview RC9 Patch 1 do tymczasowego katalogu, z którego rozpocznie się jej właściwa instalacja - uaktualnienie JBoss AS, np. c:/temp/jboss-EJB-3.0_RC9_Patch_1
  3. Ustawiłem zmienną JBOSS_HOME, tj. set JBOSS_HOME=c:\apps\jboss
  4. I w katalogu, gdzie rozpakowałem łatę EJB 3.0 dla JBoss AS (u mnie c:/temp/jboss-EJB-3.0_RC9_Patch_1), wykonałem polecenie
    ant -f install.xml -Djboss.server.config=default
    Należy pamiętać o zmiennej jboss.server.config ponieważ domyślnie wskazuje na profile all (dlaczego wybrałem default nie mam pojęcia - chyba znalazłem zalecenie o korzystaniu profilu default, ale nie mogę sobie teraz tego przypomnieć).
    Polecenie kończy się po około 10 sekundach.
  5. Na stronie Migrating From EJB 3.0 RC8 -> RC9 znajdują się dodatkowe wskazania odnośnie instalacji EJB 3.0 RC9 chyba, że łatano profil all (patrz punkt 4). Ja łatałem profil default, więc musiałem pozbyć się dwóch plików z katalogu %JBOSS_HOME%\server\default\deploy:
    1. ejb3-clustered-sfsbcache-service.xml
    2. ejb3-entity-cache-service.xml
    W przeciwnym przypadku pojawią się błędy w stylu:
    12:53:42,187 ERROR [MainDeployer] Could not create deployment: file:/C:/apps/jboss/server/default/deploy/ejb3-clustered-sfsbcache-service.xml
    org.jboss.deployment.DeploymentException: - nested throwable: (java.lang.reflect.UndeclaredThrowableException)
    at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:196)
    at org.jboss.system.ServiceController.install(ServiceController.java:226)
    ...
    Caused by: java.lang.NoClassDefFoundError: org/jboss/cache/TreeCache
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
    ...
    12:53:42,578 ERROR [MainDeployer] Could not create deployment: file:/C:/apps/jboss/server/default/deploy/ejb3-entity-cache-service.xml
    org.jboss.deployment.DeploymentException: No ClassLoaders found for: org.jboss.cache.TreeCache; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.cache.TreeCache)
    at org.jboss.system.ServiceConfigurator.install(ServiceConfigurator.java:196)
    at org.jboss.system.ServiceController.install(ServiceController.java:226)
    ...
    Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: org.jboss.cache.TreeCache
    at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
    at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:511)
    at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:405)
    ...
  6. Testowe uruchomienie JBoss AS po instalacji łaty EJB 3.0 nie zaszkodzi.
    %JBOSS_HOME%/bin/run -config=<konfiguracja JBoss z łatą EJB3>
    U mnie config nie był potrzebny, bo domyślnie skrypt startujący zakłada, że będzie uruchomiony profil default (inaczej niż domyślna wartość podczas uruchomienia łaty EJB 3.0 - dziwne, nieprawdaż?).
    12:58:05,234 INFO  [Server] JBoss (MX MicroKernel) [4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)] Started in 20s:234ms
  7. Na koniec definicja JBoss AS w NetBeans IDE, co szczęśliwie jest najmniej zajmującą czynnością.
Po tych krokach można rozpocząć edukację Java EE 5 z JBoss AS 4.0.5 w tle. Powodzenia!