EJB 3.1 z OpenEJB 3.1 i NetBeans IDE 7.0
Z Jacek Laskowski - Wiki Projektanta Java EE
Jest wiele sposobów na naukę nowych technologii i dobór odpowiednich narzędzi może znacząco usprawnić ten proces. W przypadku EJB 3.1 możemy skorzystać z projektu Apache OpenEJB 3.1, podpierając się NetBeans IDE 7.0 jako zintegrowanym środowiskiem programistycznym z asystentami tworzenia ziaren EJB z Apache Maven w tle.
Zastosowanie EJB 3.1 jest zwykle podyktowane względami praktycznymi, kiedy wybór serwera aplikacyjnego Java EE 6 mamy już za sobą i pozostaje wykorzystać jego usługi. Ich kompletność i gotowość do użycia najlepiej doświadczyć, kiedy konieczne jest wykorzystanie transakcji, podłączenia do bazy danych z możliwością przypisania komu i co wolno, udostępnić Web Service z wykorzystaniem REST w ramach aplikacji webowej czy podobne "deklaratywne czynności". Nie ma konieczności zestawiania gotowej konfiguracji usług, a konwencja ponad konfigurację znacznie przyspiesza dostarczanie kompletnych rozwiązań. Przenośność aplikacji jest również istotnym aspektem wyboru stosu technologicznego. Dodając do tego łatwość testowania aplikacji korporacyjnych i Java EE 6 (JEE6) wydaje się być idealną platformą aplikacyjną.
W tym artykule przedstawię uruchomienie bezinterfejsowego, niestanowego ziarna sesyjnego EJB (ang. no-interface stateless session bean) z użyciem projektu Apache OpenEJB 3.1.4, który stworzę w NetBeans IDE 7.0 (wersja rozwojowa z dnia 15.12.2010). Celem jest maksymalne zminimalizowanie czasu koniecznego do uruchomienia środowiska. Kolejną zaletą zastosowania OpenEJB jest możliwość wykonanywania wszystkich operacji projektowych (budowanie i testowanie) poza IDE, dzięki użyciu Apache Maven wspieranym przez NetBeans IDE 7 "z pudełka".
Tworzenie domyślnego projektu EJB w NetBeans IDE 7 wymusza posiadanie zainstalowanego serwera aplikacji, np. GlassFish. Stworzenie takiego projektu w NetBeans IDE jako projektu Apache Maven już takie wymaganie znosi.
Wymagane oprogramowanie to jedynie wspomniany NetBeans IDE 7.0.
Kompletny projekt jest dostępny jako nb7-ejb31-openejb-no-interface-view.zip.
Spis treści |
Stworzenie projektu calculator-ejb
File > New Project... i w kategorii Maven wybierz EJB Module.
Wciśnij przycisk Next >.
Podaj parametry projektu. Upewnij się, że pakiet (pole Package) zawiera pl.jaceklaskowski.jee6.calculator (domyślnie dodana zostanie końcówka ejb, która odpowiada nazwie projektu bez myślnika).
Wciśnij przycisk Finish.
Po kilku minutach, widok Projects powinien zawierać pojedynczy projekt calculator-ejb.
Stworzenie bezstanowego ziarna sesyjnego EJB - Calculator
Nowością w EJB 3.1 jest możliwość stworzenia bezstanowego ziarna sesyjnego bez konieczności wcześniejszego definiowania interfejsu biznesowego. Ma to taką zaletę, że podczas prototypowania bądź dla niewielkich (początkowo chociażby) rozwiązań zmniejsza liczbę potrzebnych klas i interfejsów do niezbędnego minimum - publiczne metody klasy oznaczonej adnotacją @LocalBean stają się metodami biznesowymi i określają interfejs biznesowy.
W Source Packages znajdziesz pakiet pl.jaceklaskowski.jee6.calculator. Wybierz go. Z menu kontekstowego (pod prawym przyciskiem) wybierz New > Other..., a następnie w kategorii Enterprise JavaBeans wybierz Session Bean.
Podaj parametry ziarna EJB o nazwie Calculator. Zwróć uwagę, że wybrano Stateless w Session Type oraz nie wybrano żadnej z możliwych dwóch opcji w Create Interface.
Wciśnij przycisk Finish.
Uzupełnij treść klasy o publiczną metodę multiply. Ostatecznie klasa powinna przedstawiać się jak poniżej.
package pl.jaceklaskowski.jee6.calculator; import javax.ejb.Stateless; import javax.ejb.LocalBean; /** * @author Jacek Laskowski */ @Stateless @LocalBean public class Calculator { public int multiply(int x, int y) { return x * y; } }
To kończy proces tworzenia kompletnego ziarna EJB - Calculator. Pozostaje uruchomić je w ramach kontenera EJB i przetestować działanie. Brzmi jak bardzo zaawansowana czynność, ale z pomocą NetBeans IDE, Apache Maven oraz Apache OpenEJB sprowadza się do kilku kliknięć.
Określenie zależności projektowej - Apache OpenEJB
Zanim przejdziesz do przygotowania klasy testowej należy określić zależności projektowe. W naszym będzie tylko jedna - Apache OpenEJB 3.1.4, który występuje w roli kontenera EJB 3.1. Narzędziem do zarządzania zależnościami w naszym projekcie jest Apache Maven, którego plikiem konfiguracyjnym jest pom.xml (znajdziesz go w katalogu Project Files, aczkolwiek jego znajomość jest nieistotna w IDE jakim jest NetBeans IDE).
Wybierz katalog Test Dependencies i z menu kontekstowego (pod prawym klawiszem myszki) wybierz Add Dependency.... Podaj parametry zależności Apache OpenEJB jak poniżej. Upewnij się, że zależność jest ze Scope równym test.
Zatwierdź wybór przyciskiem Add.
Stworzenie klasy testowej - CalculatorTest
W katalogu Test Packages znajdziesz pakiet pl.jaceklaskowski.jee6.calculator. W nim zdefiniujemy klasę CalculatorTest.
W menu kontekstowym wybierz New > Other..., a następnie w kategorii JUnit wybierz Test for Existing Class.
Wybierz klasę, którą zamierzamy testować wciskając przycisk Browse... obok pola Class to Test.
Pozostałe pola zostaną uzupełnione automatycznie.
Wciśnij przycisk Finish.
Zmień utworzoną klasę w ten sposób, aby odpowiadała poniższej.
package pl.jaceklaskowski.jee6.calculator; import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.*; /** * @author Jacek Laskowski */ public class CalculatorTest { private InitialContext initialContext; @Before public void setUp() throws Exception { Properties properties = new Properties(); // opcjonalnie określ format nazw w JNDI properties.setProperty("openejb.jndiname.format", "{deploymentId}{interfaceType.annotationName}"); // opcjonalnie włącz komunikaty typu debug properties.setProperty("log4j.category.OpenEJB.startup", "debug"); properties.setProperty("log4j.category.OpenEJB.startup.config", "debug"); // WAŻNE - kluczowe 2 kolejne linie properties.setProperty("openejb.deployments.classpath.include", ".*calculator-ejb.*"); properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory"); initialContext = new InitialContext(properties); } @Test public void testMultiply() throws Exception { Object object = initialContext.lookup("CalculatorLocalBean"); assertNotNull(object); assertTrue(object instanceof Calculator); Calculator calc = (Calculator) object; assertEquals(8, calc.multiply(2, 4)); } }
Najważniejsze linie, to te, które następują po komentarzu WAŻNE - kluczowe 2 kolejne linie. Pierwsza z nich określa zakres poszukiwania klas-kandydatów na ziarna EJB, a kolejna wskazuje, że obsługą JNDI zajmie się właśnie Apache OpenEJB (linia z Context.INITIAL_CONTEXT_FACTORY). Tym sposobem wbudowany kontener EJB 3.1 - Apache OpenEJB dowiaduje się o swoich parametrach konfiguracyjnych.
Testy, testy, testy - uruchomienie CalculatorTest
Z tak przygotowaną klasą testową CalculatorTest wybierz Test File z menu kontekstowego tej klasy lub po prostu wciśnij kombinację klawiszy Cmd+F6.
W widoku Test Results pojawi się poprawnie wykonany test CalculatorTest.
W ten sposób utworzyliśmy środowisko do dalszej nauki EJB 3.1 z Apache OpenEJB i NetBeans IDE 7.0 (oraz Apache Maven). Gratulacje!










