W Java EE 6, poza JPA 2.0, można jeszcze uruchomić kontener Enterprise JavaBeans (EJB) 3.1 oraz kontener Contexts and Dependency Injection (CDI) 1.0. O tym pierwszym - EJB 3.1 - pisałem w Embeddable EJB 3.1 z GlassFish 3.1 i NetBeans IDE 7.0, a o drugim - CDI - w Contexts and Dependency Injection (CDI) praktycznie - zestawienie środowiska z JBoss Weld, Arquillian i Apache Maven 2.
Zacząłem drążyć temat EJB 3.1 z NetBeans 7 i całkiem przypadkiem doszukałem się dwóch użytecznych funkcji - Add Embeddable EJB Container oraz Create JUnit Tests. Sprawdźmy je w działaniu zamiast rozwodzić się nad ich użytecznością (albo ich brakiem).
Cmd+Shift+N - Maven > EJB Module, podaj Project Name, np. aaa i Finish. Mamy projekt EJB zarządzany przez Apache Maven.
Cmd+N - Enterprise JavaBeans > Session Bean, wciśnij Next >, wybierz pakiet z listy w Package i Finish. I mamy komponent EJB.
Otworzy się nowa klasa ziarna EJB 3.1. W jej ciele, Ctrl+i i wybierz Add Business Method... i OK. Pojawi się nowa metoda public void businessMethod(). W jej ciele, wpisz sout i wciśnij TAB. Wpisz Witaj! W ten sposób masz gotowe do uruchomienia ziarno EJB z metodą biznesową, której zadaniem jest wyświetlenie Witaj!
Wybierz nowoutworzoną klasę NewSessionBean i z menu pod prawym klawiszem myszki wybierz Tools > Create JUnit Tests.
Pojawi się panel konfiguracyjny klasy testowej.
Zatwierdź przyciskiem ENTER.
Zaraz po tym powinien otworzyć się edytor z właśnie stworzoną klasą testującą z metodą testBusinessMethod(). Usuń linię fail("The test case is a prototype.");, np. przez Cmd+x. Test gotowy.
Uruchomienie testu - Cmd+F6.
------------------------------------------------------- T E S T S ------------------------------------------------------- Running pl.jaceklaskowski.jee6.abc.NewSessionBeanTest businessMethod Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.396 sec <<< FAILURE! Results : Tests in error: testBusinessMethod(pl.jaceklaskowski.jee6.abc.NewSessionBeanTest) Tests run: 1, Failures: 0, Errors: 1, Skipped: 0 ------------------------------------------------------------------------ BUILD FAILURE ------------------------------------------------------------------------Pojawił się błąd? Jak najbardziej oczekiwany (zajrzyj do What's the cause of this exception: java.lang.ClassFormatError: Absent Code? po więcej wyjaśnień).
Nie wiem, co informuje NetBeans 7 o konieczności pojawienia się pomocy, albo jak długo należy czekać na jej pojawienie się, ale dłuższa chwila, dwie i na projekcie pojawi się ikona z żółtym wykrzyknikiem.
Kiedy najedzie się na katalog projektu pojawi się chmurka z wyjaśnieniem powodu, dla którego pojawił się wykrzyknik - Missing Embeddable EJB Container.
Wtedy, pod prawy przyciskiem myszki znajdziemy menu Show and Resolve Problems...
Pojawi się okienko dialogowe, w którym pojawi się Missing Embeddable EJB Container z przyciskiem Add Embeddable EJB Container.
Kiedy wciśniesz przycisk, do projektu dodana zostanie zależność i repozytorium, gdzie się znajduje. Spróbuj.
Warto dodać, że zapoznanie się z pom.xml dla tego projektu, to wyzwanie same w sobie. Tyle kombinacji, aby uruchomić wbudowany kontener EJB 3.1 z GlassFish 3.0. Warto dla kogoś, kto chciałby poznać Mavena od podszewki (co w tym przypadku lepiej wykonałby Maven podpierając się Apache Ant przez wtyczkę maven-antrun-plugin).org.glassfish.extras glassfish-embedded-all 3.0 test http://download.java.net/maven/glassfish/ http://download.java.net/maven/glassfish/ default
A tak całkiem przy okazji mojej nauki uruchamiania wbudowanego kontenera EJB 3.1, wyczytałem w STS 70 Maven :: Test Specification: Maven Support Test Specification, że edytor pom.xml ma specjalizowany system podpowiedzi Code Generation in pom.xml. W pom.xml wciskamy kombinację klawiszy Alt+Insert i możemy wybrać jedną z kilku opcji utworzenia sekcji XMLowej.
Dla początkujących, jak znalazł.
Fajny jeszcze jest projekt Ejb3Unit do testowania EJB w wersji 3.0 poza serwerem... Problemem jest tylko to, iż od 2008-05-12 jest on w wersji Release Candidate. Jednak świetnie integruje się testowaniem pod Eclipse (jako IDE tool).
OdpowiedzUsuńNo a odnośnie Embedded Glassfish 3.x, bądź Spring 3.x, to jest jeszcze ciekawym projektem (i prostym w użyciu) jest jeeunit;)