Pokazywanie postów oznaczonych etykietą jboss. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą jboss. Pokaż wszystkie posty

11 lipca 2011

Doskonalenie warsztatu - artykuły, recenzje, a teraz i skrinkast

1 komentarzy
Istnieje wiele technik doskonalenia wiedzy i poza biernym czytaniem, a później aktywną praktyką, warto również rozważyć inne techniki samodoskonalenia, np. spisywanie swoich doświadczeń na blogu czy artykułach, spotkania, w których demonstrujesz zdobytą wiedzę lub nagrywanie skrinkastów. Jest wiele sposobów na dotarcie do nieaktywnych przestrzeni naszego mózgu i mówią, że korzystamy z nie więcej niż 10% jego możliwości, więc "wyrwanie" chociażby 1 procenta może być kamieniem milowym naszego technicznego rozwoju. Najważniejsze, aby nie poprzestawać i wciąż próbować, kwestionować, dyskutować i w ogóle być aktywnym.

Idąc tym tropem, w ramach doskonalenia własnego warsztatu technicznego, udało mi się przeczytać kilka książek, spisać moje doświadczenia w postaci artykułów na moim Wiki, a wczoraj upubliczniłem nagranie (skrinkast) z instalacji IBM Installation Managera, który posłuży mi do instalacji środowiska do poznawania Java EE 6.

Wielu podkreślało znaczenie treści pisanej, ale było też wielu, którzy wykazywali zainteresowanie treścią nagraną w postaci skrinkastów.

Pozostawiam do Twojej dyspozycji kolejność, w której zapoznasz się z materiałem. A jest go niemało treścią, niewiele czasowo (próbowałem zachować wysoki współczynnik treści do formy). Okres wakacyjny nie nastraja, aby przesiadywać przed monitorem komputera, więc próbowałem zmieścić się z materiałem w okolicach 5 minut.

Zachęcam do zapoznania się z ostatnimi moimi produkcjami i wyrażenie swojej opinii. Bez niej, zapał szybko się wyczerpuje.
Byłbym niezwykle rad, gdybyś znalazł(a) 2 minuty na obejrzenie skrinkasta, w którym demonstruję instalację środowiska IBM Rational Application Developer V8.0.3 do poznawania Java EE 6 z IBM WebSphere Application Server V8 (nie zabraknie również JBoss AS 7, GlassFish 3.1 oraz Apache Geronimo 3). Na razie 2-minutówka o instalacji IBM Installation Manager. Zalecam oglądanie na pełnym ekranie.

Wystarczająca rozdzielczość (720p HD)? Brakuje głosu? Masz jakiekolwiek sugestie odnośnie podkładu dźwiękowego? Skłaniam się ku kompozycjom muzyki poważnej, bo potrafi zaskoczyć swoją różnorodnością, której rzadko mam przyjemność zasmakować. Nie za długie nagranie? A może za krótkie? Jaka tematyka byłaby interesująca najbardziej? Daj poznać swoje uwagi.

15 lutego 2007

Tworzenie aplikacji z JBoss Seam 1.1.6 w 5 minut!

2 komentarzy
W dzisiejszym biuletynie Builder.com.au pojawiło się niezwykle trafne stwierdzenie autorstwa Chrisa Ducketta, które odzwierciedla naturę wielu projektantów i programistów:

Perhaps deep inside many developers and tech enthusiasts there is a little sadist that enjoys frivolous installations. Or maybe the attention span of those developers is so low they constantly need to be entertained by new things as they remain on the bleeding edge.

Zastanawiam się, kto z nas nie zgodziłby się z tym?! Ja nie!

Dla osób będących w ciągłym niedoczasie, a pragnących spróbować sił z JBoss Seam - podaję recepturę na działającą aplikację seamową w 5 minut (z dokładnością do czasu pobrania oprogramowania)! Jest to ten wycinek dokumentacji JBoss Seam, który pozwala w ekspresowym tempie potraktować Seama jako odpowiednik Ruby on Rails w świecie Java EE.

Podjąłem się wyzwania, aby to sprawdzić i nie tylko, że się da, ale i można pracować z linii poleceń! Włączam stoper.
  1. Rozpoczynam od pobrania JEMS Installer 1.2.0.GA.
    Alternatywnie można i tak:
    wget http://easynews.dl.sourceforge.net/sourceforge/jboss/jems-installer-1.2.0.GA.jar?download -O jems-installer-1.2.0.GA.jar
  2. Instaluję JBoss AS 4.0.5.GA z EJB 3.0 w katalogu c:/jboss-4.0.5.GA_ejb3.
    java -jar ./jems-installer-1.2.0.GA.jar -installGroup ejb3 installpath=c:/jboss-4.0.5.GA_ejb3
  3. Pobieram JBoss Seam 1.1.6.GA.
    Korzystam z przeglądarki, ale można i tak:
    wget http://downloads.sourceforge.net/jboss/jboss-seam-1.1.6.GA.zip?modtime=1170959601&big_mirror=1 -O jboss-seam-1.1.6.GA.zip
  4. Instaluję JBoss Seam, co sprowadza się do rozpakowania paczki do wybranego katalogu, np. c:/jboss-seam-1.1.6.GA.
    jar -xvf jboss-seam-1.1.6.GA.zip
  5. Konfiguruję środowisko dla seam-gen, tj. wykonuję polecenia seam setup z katalogu domowego JBoss Seam (u mnie c:/jboss-seam-1.1.6.GA).
    Uwaga dla działających na MS Windows z Cygwin: uruchamiam polecenie z ustawioną zmienną JAVA_HOME zgodnie z konwencją w MS Windows, np. JAVA_HOME="c:/apps/java5" ./seam setup).

    Przy drugim pytaniu podajemy katalog domowy JBoss AS, np. c:/jboss-4.0.5.GA_ejb3. Dla pozostałych pytań akceptujemy wartości domyślne (wciśnięcie klawisza ENTER).
  6. Tworzę nowy projekt seamowy z pomocą polecenia seam new-project. Uwaga dotycząca wydawania poleceń pod MS Windows nadal w mocy, tj. JAVA_HOME="c:/apps/java5" ./seam new-project.
  7. Uruchamiam JBoss AS z poziomu innej konsoli
    cd c:/jboss-4.0.5.GA_ejb3; ./bin/run.sh
  8. Uruchamiam aplikację na JBoss AS za pomocą seam explode. I jak wcześniej, uwaga dla użytkowników MS Windows i Cygwin - JAVA_HOME="c:/apps/java5" ./seam explode.
    Na konsoli JBoss AS powinny pojawić się komunikaty informujące o instalacji.
  9. Otwieram stronę http://localhost:8080/myproject.
  10. Koniec!
Dla posiadających więcej niż 5 minut zapraszam na strony dokumentacji JBoss Seam 1.1.6.GA.

09 lutego 2007

EJB 3.0 korzystając z JBoss AS 4.0.5.GA, JEMS Installer 1.2.0.GA i NetBeans IDE 5.5.1

1 komentarzy
Otwierając dzisiaj skrzynkę pocztową zobaczyłem wiadomość informującą o komentarzu do wpisu JBoss AS 4.0.5 z EJB 3.0 RC9 Patch 1 i NetBeans IDE 5.5.1, gdzie jonsnow napisał o usprawnieniu zestawiania środowiska z wykorzystaniem JEMS Installer.

Nie ukrywam, że zazwyczaj jestem sceptyczny do korzystania z narzędzi automatyzujących instalację, które nie tylko ukrywają faktycznie wykonywane kroki i na dodatek zapisują coś w rejestrach (pracuję na MS Windows), ale jeszcze przeczytałem informację o pewnej konkretnej konfiguracji JBoss AS, rozszerzenia EJB 3.0 i JEMS Installera, która miała prawo działać, co zniechęciło mnie zupełnie. Wiedząc, że JBoss AS 4.0.5 to nie jest serwer aplikacyjny Java EE 5 i daleko mu do niego (poza EJB3 oraz JPA, które serwera i tak nie wymaga) nie zagłębiałem się w ten temat dalej. Podobną sytuację mam w przypadku skorzystania z IBM WebSphere Application Server Version 6.1 Feature Pack for EJB 3, więc po co miałbym zajmować się JBoss AS 4? Poza tym pełniejszą implementację Java EE 5 mam chociażby w GlassFish v2 oraz Apache Geronimo v2. Mimo to, kiedy przeczytałem wiadomość od jonsnow pomyślałem, że mogę to sprawdzić. W końcu nic nie traciłem.

Co się okazało? Po około 30 minutach miałem zestawione kompletne środowisko do tworzenia semi-Java EE 5 aplikacji (semi wynika z niepełności JBoss AS 4.0.5 w realizowaniu Java EE 5 po stronie kontenera servletów - brak chociażby wstrzeliwania zależności, itp.).

Warto to odnotować, bo nie mogłem uwierzyć, że moje przestarzałe stereotypy o oprogramowaniu typu JEMS Installer wzięły kolejny raz górę nad zdrowym rozsądkiem. Wystarczyło poświęcić 15 minut na zapoznanie się z dokumentacją! Tylko, kto chciałby czytać dokumentację?!

Zacząłem od pobrania JEMS Installer 1.2.0.GA (właśnie owe GA było dla mnie kolejnym argumentem za sprawdzeniem jego możliwości). Uruchomienie instalacji było wskazane przez jonsnow, więc kopiuj-wklej (z drobnymi poprawkami dotyczącymi ścieżki instalacji JBoss AS 4) i ENTER.
  C:\>cd apps

C:\apps>java -jar jems-installer-1.2.0.GA.jar -installGroup ejb3 installpath=c:/apps/jboss-4.0.5.GA_ejb3
Obarczony stereotypami, uruchomiłem to w tle, a sam zabrałem się za bardziej wartościowe rzeczy niż przyglądanie się instalacji. Jakież było moje zdziwienie, kiedy dysk przestał intensywnie pracować po około 10-15 minutach! Pomyślałem, że zapewne Installer nie znalazł czegoś i zakończył swoje działanie z błędem myśląc, że zechciałbym mu pomóc. Zajrzałem na konsolę i co widzę:
C:\apps>java -jar jems-installer-1.2.0.GA.jar -installGroup ejb3 installpath=c:/apps/jboss-4.0.5.GA_ejb3
Looking for auto install resource...
/res/jbossauto-install.xml URL: jar:file:/C:/apps/jems-installer-1.2.0.GA.jar!/res/jbossauto-install.xml
PackageListener, install.log=C:\DOCUME~1\JLASKO~1\LOCALS~1\Temp\jems-install.log
[ Starting automated installation ]
creating Logfile: 'IzPack_Logfile_at_1171016018453.txt' in: 'C:\DOCUME~1\JLASKO~1\LOCALS~1\Temp\'
[ Starting to unpack ]
[ Processing package: ejb3-deployer (1/58) ]
[ Processing package: invokers-service (2/58) ]
[ Processing package: jta-service (3/58) ]
[ Processing package: mail-service (4/58) ]
[ Processing package: jboss-cache (5/58) ]
[ Processing package: jbossws5 (6/58) ]
[ Processing package: snmp-adaptor.sar (7/58) ]
[ Processing package: properties-service (8/58) ]
[ Processing package: javamail (9/58) ]
[ Processing package: jmx-console (10/58) ]
[ Processing package: jms-http-invoker (11/58) ]
[ Processing package: usertx-service (12/58) ]
[ Processing package: jboss-local-jdbc.rar (13/58) ]
[ Processing package: ear-deployer (14/58) ]
[ Processing package: security (15/58) ]
[ Processing package: naming (16/58) ]
[ Processing package: hibernate (17/58) ]
[ Processing package: jca-service (18/58) ]
[ Processing package: jboss-aop-jdk50-deployer (19/58) ]
[ Processing package: ejb-timer-service (20/58) ]
[ Processing package: iiop-service.xml (21/58) ]
[ Processing package: jms-socket-invoker (22/58) ]
[ Processing package: scheduler-service (23/58) ]
[ Processing package: web-console-jdk50 (24/58) ]
[ Processing package: jsr77-service (25/58) ]
[ Processing package: jgroups (26/58) ]
[ Processing package: quartz-rar (27/58) ]
[ Processing package: cache-invalidation-service.xml (28/58) ]
[ Processing package: jmx-core (29/58) ]
[ Processing package: bsh-deployer (30/58) ]
[ Processing package: jboss-ha-local-jdbc (31/58) ]
[ Processing package: mail-inflow-adaptor (32/58) ]
[ Processing package: jboss-ds (33/58) ]
[ Processing package: xmlresolver (34/58) ]
[ Processing package: jms-injvm-invoker (35/58) ]
[ Processing package: jsr88-service (36/58) ]
[ Processing package: jboss-xa-jdbc (37/58) ]
[ Processing package: jboss-ha-xa-jdbc (38/58) ]
[ Processing package: docs (39/58) ]
[ Processing package: binding-service (40/58) ]
[ Processing package: minimal (41/58) ]
[ Processing package: dynclassloader-service (42/58) ]
[ Processing package: ejb-deployer (43/58) ]
[ Processing package: uuid-key-generator (44/58) ]
[ Processing package: war-deployer (45/58) ]
[ Processing package: client-deployer-service (46/58) ]
[ Processing package: attribute-persistence-service (47/58) ]
[ Processing package: xmlservice (48/58) ]
[ Processing package: jmx-invoker-service (49/58) ]
[ Processing package: jboss-bean-deployer (50/58) ]
[ Processing package: client (51/58) ]
[ Processing package: jbossretro (52/58) ]
[ Processing package: rmi-http-invoker (53/58) ]
[ Processing package: jms-asf-rar (54/58) ]
[ Processing package: jbossmq-service (55/58) ]
[ Processing package: jdbc-metadata-service (56/58) ]
[ Processing package: default-jms-destintations (57/58) ]
[ Processing package: jboss-remoting (58/58) ]

calltarget:

jbossws-post-install:
[echo] Unpacking wstools to bin...
[unzip] Expanding: C:\apps\jboss-4.0.5.GA_ejb3\client\jbossws-client.jar into C:\apps\jboss-4.0.5.GA_ejb3\bin
[echo] Removing jbossws14 client jars...
[delete] Deleting 4 files from C:\apps\jboss-4.0.5.GA_ejb3\client
[delete] Deleting C:\apps\jboss-4.0.5.GA_ejb3\client\jboss-backport-concurrent.jar
[delete] Deleting C:\apps\jboss-4.0.5.GA_ejb3\client\jbossretro-rt.jar
[delete] Deleting C:\apps\jboss-4.0.5.GA_ejb3\client\jbossws14-client.jar
[delete] Deleting C:\apps\jboss-4.0.5.GA_ejb3\client\namespace.jar
[echo] jbossws done

calltarget:

chmod-bin:
[echo] Updating script executable modes
[echo] bin dir is c:/apps/jboss-4.0.5.GA_ejb3/bin
[ Unpacking finished. ]
creating Logfile: 'IzPack_Logfile_at_1171016018453.txt' in: 'C:\DOCUME~1\JLASKO~1\LOCALS~1\Temp\'
[ Writing the uninstaller data ... ]
[ Automated installation done ]

C:\apps>
Widzę migający kursor na konsoli i zakończoną poprawnie instalację (!) Zaczynało mi się podobać. Jako pierwszy moduł instalowany zobaczyłem ejb3-deployer, więc dawało mi to pewność, że jest lepiej niż początkowo myślałem.

Co mogłem dalej zrobić, aby sprawdzić poprawność instalacji? Uruchomić serwer.
jlaskowski@dev /cygdrive/c/apps/jboss-4.0.5.GA_ejb3
$ ./bin/run.sh
=========================================================================

JBoss Bootstrap Environment

JBOSS_HOME: c:\apps\jboss-4.0.5.GA_ejb3

JAVA: /cygdrive/c/apps/java5/bin/java

JAVA_OPTS: -Dprogram.name=run.sh -server -Xms128m -Xmx512m -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000

CLASSPATH: c:\apps\jboss-4.0.5.GA_ejb3\bin\run.jar;c:\apps\java5\lib\tools.jar

=========================================================================

11:38:51,437 INFO [Server] Starting JBoss (MX MicroKernel)...
11:38:51,437 INFO [Server] Release ID: JBoss [Zion] 4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)
11:38:51,437 INFO [Server] Home Dir: C:\apps\jboss-4.0.5.GA_ejb3
11:38:51,437 INFO [Server] Home URL: file:/C:/apps/jboss-4.0.5.GA_ejb3/
11:38:51,437 INFO [Server] Patch URL: null
11:38:51,437 INFO [Server] Server Name: default
11:38:51,437 INFO [Server] Server Home Dir: C:\apps\jboss-4.0.5.GA_ejb3\server\default
11:38:51,437 INFO [Server] Server Home URL: file:/C:/apps/jboss-4.0.5.GA_ejb3/server/default/
11:38:51,437 INFO [Server] Server Log Dir: C:\apps\jboss-4.0.5.GA_ejb3\server\default\log
11:38:51,437 INFO [Server] Server Temp Dir: C:\apps\jboss-4.0.5.GA_ejb3\server\default\tmp
11:38:51,437 INFO [Server] Root Deployment Filename: jboss-service.xml
11:38:51,921 INFO [ServerInfo] Java version: 1.5.0_08,Sun Microsystems Inc.
11:38:51,921 INFO [ServerInfo] Java VM: Java HotSpot(TM) Server VM 1.5.0_08-b03,Sun Microsystems Inc.
11:38:51,921 INFO [ServerInfo] OS-System: Windows XP 5.1,x86
11:38:52,500 INFO [Server] Core system initialized
11:38:55,156 INFO [WebService] Using RMI server codebase: http://dev:8083/
11:38:55,187 INFO [Log4jService$URLWatchTimerTask] Configuring from URL: resource:log4j.xml
11:38:58,406 INFO [SocketServerInvoker] Invoker started for locator: InvokerLocator [socket://9.164.187.15:3873/]
11:39:04,031 INFO [ServiceEndpointManager] WebServices: jbossws-1.0.3.SP1 (date=200609291417)
11:39:08,671 INFO [SnmpAgentService] SNMP agent going active
11:39:09,500 INFO [CorbaNamingService] Naming: [IOR:000000000000002B49444C3A6F6D672E6F72672F436F734E616D696E672F4E616D696E67436F6E746578744578743A312E300000000000020000000000000
8000102000000000D392E3136342E3138372E313500000DC8000000114A426F73732F4E616D696E672F726F6F74000000000000050000000000000008000000004A414300000000010000001C0000000000010001000000010
10001000101090000000105010001000000210000006000000000000000010000000000000024000000200000007E00000000000000010000000D392E3136342E3138372E313500000DC900400000000000000000001004010
8060667810201010100000000000000000000000000000000000000000000002000000004000000000000001F0000000400000003000000010000002000000000000000020000002000000004000000000000001F000000040
00003]
11:39:09,875 INFO [CorbaTransactionService] TransactionFactory: [IOR:000000000000003049444C3A6F72672F6A626F73732F746D2F69696F702F5472616E73616374696F6E466163746F72794578743A312E
000000000200000000000000E8000102000000000D392E3136342E3138372E313500000DC8000000144A426F73732F5472616E73616374696F6E732F46000000050000000000000008000000004A414300000000010000001C
000000000100010000000105010001000101090000000105010001000000210000006000000000000000010000000000000024000000200000007E00000000000000010000000D392E3136342E3138372E313500000DC90040
00000000000000001004010008060667810201010100000000000000000000000000000000000000000000002000000004000000000000001F0000000400000003000000010000002000000000000000020000002000000004
0000000000001F0000000400000003]
11:39:10,593 INFO [Embedded] Catalina naming disabled
11:39:10,687 INFO [ClusterRuleSetFactory] Unable to find a cluster rule set in the classpath. Will load the default rule set.
11:39:10,687 INFO [ClusterRuleSetFactory] Unable to find a cluster rule set in the classpath. Will load the default rule set.
11:39:11,078 INFO [Http11BaseProtocol] Initializing Coyote HTTP/1.1 on http-0.0.0.0-8080
11:39:11,078 INFO [Catalina] Initialization processed in 391 ms
11:39:11,078 INFO [StandardService] Starting service jboss.web
11:39:11,093 INFO [StandardEngine] Starting Servlet Engine: Apache Tomcat/5.5.20
11:39:11,125 INFO [StandardHost] XML validation disabled
11:39:11,140 INFO [Catalina] Server startup in 62 ms
11:39:11,265 INFO [TomcatDeployer] deploy, ctxPath=/invoker, warUrl=.../deploy/http-invoker.sar/invoker.war/
11:39:11,500 INFO [WebappLoader] Dual registration of jndi stream handler: factory already defined
11:39:12,484 INFO [TomcatDeployer] deploy, ctxPath=/, warUrl=.../deploy/jbossweb-tomcat55.sar/ROOT.war/
11:39:12,687 INFO [TomcatDeployer] deploy, ctxPath=/jbossws, warUrl=.../tmp/deploy/tmp255jbossws-context-exp.war/
11:39:13,046 INFO [TomcatDeployer] deploy, ctxPath=/jbossmq-httpil, warUrl=.../deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/
11:39:14,656 INFO [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=.../deploy/management/console-mgr.sar/web-console.war/
11:39:15,562 INFO [MailService] Mail Service bound to java:/Mail
11:39:15,750 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-ha-local-jdbc.rar
11:39:15,812 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-ha-xa-jdbc.rar
11:39:15,843 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-local-jdbc.rar
11:39:15,890 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jboss-xa-jdbc.rar
11:39:16,000 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/jms/jms-ra.rar
11:39:16,031 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/mail-ra.rar
11:39:16,078 INFO [RARDeployment] Required license terms exist, view META-INF/ra.xml in .../deploy/quartz-ra.rar
11:39:16,093 INFO [QuartzResourceAdapter] start quartz!!!
11:39:16,156 INFO [SimpleThreadPool] Job execution threads will use class loader of thread: main
11:39:16,203 INFO [QuartzScheduler] Quartz Scheduler v.1.5.2 created.
11:39:16,218 INFO [RAMJobStore] RAMJobStore initialized.
11:39:16,218 INFO [StdSchedulerFactory] Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
11:39:16,218 INFO [StdSchedulerFactory] Quartz scheduler version: 1.5.2
11:39:16,218 INFO [QuartzScheduler] Scheduler DefaultQuartzScheduler_$_NON_CLUSTERED started.
11:39:16,937 INFO [WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=DefaultDS' to JNDI name 'java:DefaultDS'
11:39:17,281 INFO [A] Bound to JNDI name: queue/A
11:39:17,281 INFO [B] Bound to JNDI name: queue/B
11:39:17,281 INFO [C] Bound to JNDI name: queue/C
11:39:17,281 INFO [D] Bound to JNDI name: queue/D
11:39:17,281 INFO [ex] Bound to JNDI name: queue/ex
11:39:17,359 INFO [testTopic] Bound to JNDI name: topic/testTopic
11:39:17,359 INFO [securedTopic] Bound to JNDI name: topic/securedTopic
11:39:17,359 INFO [testDurableTopic] Bound to JNDI name: topic/testDurableTopic
11:39:17,390 INFO [testQueue] Bound to JNDI name: queue/testQueue
11:39:17,531 INFO [UILServerILService] JBossMQ UIL service available at : /0.0.0.0:8093
11:39:17,593 INFO [DLQ] Bound to JNDI name: queue/DLQ
11:39:17,718 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA' to JNDI name 'java:JmsXA'
11:39:17,750 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
11:39:18,078 INFO [Http11BaseProtocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080
11:39:18,218 INFO [ChannelSocket] JK: ajp13 listening on /0.0.0.0:8009
11:39:18,328 INFO [JkMain] Jk running ID=0 time=0/125 config=null
11:39:18,406 INFO [Server] JBoss (MX MicroKernel) [4.0.5.GA (build: CVSTag=Branch_4_0 date=200610162339)] Started in 26s:969ms
To również zadziałało! No, dobrze pomyślałem, czas sprawdzić uruchomienie przykładowej aplikacji Java EE 5.

W NetBeans IDE 5.5.1 Daily Build (z dnia 31 stycznia 2007) zdefiniowałem nową instancję serwera (zakładka Runtime). JBoss AS działał, więc NetBeans IDE od razu rozpoznał sytuację i pozwolił mi na przejrzenie zainstalowanych aplikacji. Nic nie było. Zabrałem się za stworzenie aplikacji przemysłowej (ang. Enterprise Application) - File->New Project...->Enterprise->Enterprise Application. Zdefiniowałem nazwę dla projektu simple (wierząc, że z projektami typu simple JBoss AS sobie poradzi ;-)) i wybrałem serwer JBoss AS, który właśnie zdefiniowałem. Pozostałe rzeczy pozostawiłem bez zmian. Na węźle simple-ejb wybrałem z menu kontekstowego New->Session Bean....
  package pl.jaceklaskowski.simple.beans;

import javax.ejb.Stateless;

@Stateless
public class NewSessionBean implements NewSessionLocal {

public String powitaj(String kogo) {
return "Witam " + kogo + "!";
}

}
Komponent sesyjny EJB3 już miałem, więc pora do warstwy prezentacji, czyli utworzenie servletu. Dlaczego servletu? Po pierwsze, ponieważ podlega wstrzeliwaniu zależności w Java EE 5, a po drugie jest do tego wizard w NetBeans IDE. Wybrałem menu New->Servlet... z menu kontekstowego na węźle simple-war.

Przypisałem servlet do adresu /powitaj i początkowo mój servlet wyglądał tak:
  package pl.jaceklaskowski.simple.servlet;

import java.io.*;
import javax.ejb.EJB;

import javax.servlet.*;
import javax.servlet.http.*;
import pl.jaceklaskowski.simple.beans.NewSessionLocal;

public class WywolajNewSessionBean extends HttpServlet {

@EJB
private NewSessionLocal newSessionLocal;

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet WywolajNewSessionBean</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>" + newSessionLocal.powitaj(request.getParameter("kogo")) + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}

// usunięte, nieistotne dla wpisu, metody servletu
}
Po stworzeniu servletu, wcisnąłem klawisz F6 uruchamiający projekt główny, co w moim przypadku było właśnie projektem simple. Przełączyłem się na konsolę JBoss AS, gdzie pojawiły się wpisy zdarzeń:
12:07:24,750 INFO  [EARDeployer] Init J2EE application: file:/C:/apps/jboss-4.0.5.GA_ejb3/server/default/deploy/simple.ear
12:07:25,187 INFO [Ejb3Deployment] EJB3 deployment time took: 297
12:07:25,234 INFO [JmxKernelAbstraction] installing MBean: jboss.j2ee:ear=simple.ear,jar=simple-ejb.jar,name=NewSessionBean,service=EJB3 with dependencies:
12:07:25,500 INFO [EJBContainer] STARTED EJB: pl.jaceklaskowski.simple.beans.NewSessionBean ejbName: NewSessionBean
12:07:25,562 INFO [EJB3Deployer] Deployed: file:/C:/apps/jboss-4.0.5.GA_ejb3/server/default/tmp/deploy/tmp288simple.ear-contents/simple-ejb.jar
12:07:25,562 INFO [TomcatDeployer] deploy, ctxPath=/simple-war, warUrl=.../tmp/deploy/tmp288simple.ear-contents/simple-war-exp.war/
12:07:25,750 INFO [EARDeployer] Started J2EE application: file:/C:/apps/jboss-4.0.5.GA_ejb3/server/default/deploy/simple.ear
czyli wszystko w porządku. NetBeans uruchomił mi przeglądarkę z aplikacją, więc nadal było w porządku. Po wpisaniu adresu http://localhost:8080/simple-war/powitaj?kogo=Jacek okazało się jednak, że mój entuzjazm do bezawaryjnego zestawienia środowiska zmalał - pojawił się wyjątek! I to jaki - NullPointerException!

Analiza kodu wskazała na...brak wstrzeliwania zależności (DI) w JBoss AS. Przez moment nie mogłem w to uwierzyć. Jak to? Przecież Java EE 5 pozwala, aby servlet korzystał z DI. Może źle wyszukuje w JNDI? Trwało to jakąś chwilę, aż przypomniałem sobie o braku wsparcia dla DI w Tomcat 5, który był kontenerem servletów w JBoss AS.

Na pomoc pośpieszył mi NetBeans IDE z menu kontekstowym w otwartym edytorze z klasą servletu - Enterprise Resources->Call Enterprise Bean. W ten sposób NetBeans IDE dodał mi metodę lookupNewSessionBean, którą wykorzystałem w metodzie servletu:
  package pl.jaceklaskowski.simple.servlet;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.servlet.*;
import javax.servlet.http.*;
import pl.jaceklaskowski.simple.beans.NewSessionLocal;

public class WywolajNewSessionBean extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet WywolajNewSessionBean</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>" + lookupNewSessionBean().powitaj(request.getParameter("kogo")) + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}

private NewSessionLocal lookupNewSessionBean() {
try {
Context c = new InitialContext();
return (NewSessionLocal) c.lookup("java:comp/env/ejb/NewSessionBean");
} catch(NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
throw new RuntimeException(ne);
}
}

// usunięte, nieistotne dla wpisu, metody servletu

}
Ponownie wcisnąłem F6, wpisałem adres http://localhost:8080/simple-war/powitaj?kogo=Jacek i...kolejny raz wyjątek!

Tym razem już wiedziałem, że należy zadeklarować zależność w deskryptorze instalacji aplikacji internetowej (WEB-INF/web.xml), ale nie wiedziałem jaka musi być postać. Przypomniałem sobie o artykule na stronach NetBeans IDE o integracji z JBoss AS 4, który planowałem przeczytać - EJB 3.0 Enterprise Beans for the JBoss Application Server. Teraz była najwłaściwsza pora. Odszukałem sekcji o połączeniu servleta z komponentem EJB i poprawiłem metodę lookupNewSessionBean, aby tym razem wyszukiwała komponentu pod adresem simple/NewSessionBean/local. Ostatecznie kod servletu wyglądał tak:
  package pl.jaceklaskowski.simple.servlet;

import java.io.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import javax.servlet.*;
import javax.servlet.http.*;
import pl.jaceklaskowski.simple.beans.NewSessionLocal;

public class WywolajNewSessionBean extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet WywolajNewSessionBean</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>" + lookupNewSessionBean().powitaj(request.getParameter("kogo")) + "</h1>");
out.println("</body>");
out.println("</html>");
out.close();
}

private NewSessionLocal lookupNewSessionBean() {
try {
Context c = new InitialContext();
return (NewSessionLocal) c.lookup("simple/NewSessionBean/local");
} catch(NamingException ne) {
Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne);
throw new RuntimeException(ne);
}
}

// usunięte, nieistotne dla wpisu, metody servletu
}
Ponownie F6, wpisanie adresu http://localhost:8080/simple-war/powitaj?kogo=Jacek i widzę pomyślnie uruchomioną aplikację!

Warto było! Dzięki jonsnow za komentarz!

16 stycznia 2007

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

6 komentarzy
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!