Enterprise JavaBean 3.0 Michał Szymczak, Grzegorz Dziemidowicz Politechnika Wrocławska Inżynieria Oprogramowania 26 maja 2009
Ogólne spojrzenie na EJB EJB jako komponent EJB jako framework Typy beanów Session bean Message-driven bean Entity Rozbudowany przykład
Ogólne spojrzenie na EJB Ogólne spojrzenie na EJB Platforma ułatwiająca tworzenie rozproszonych aplikacji w Javie Szybsze pisanie skalowalnych, niezawodnych i bezpiecznych aplikacji Umożliwia programiście dostosowanie oferowanych funkcjonalności do potrzeb i wymagań realizowanego projektu Pozwala programiście skupić się na tworzeniu logiki biznesowej, a nie infrastruktury Dostarcza gotowych do wykorzystania funkcjonalności z zakresu: bezpieczeństwa, transakcyjności, automatycznej perzystencji, web services, wielowątkowości...
Ogólne spojrzenie na EJB Ogólne spojrzenie na EJB Możliwości EJB rozpatrujemy w dwóch płaszczyznach Component Framework EJB to kod Java wykonywany w EJB container Kod musi być tam umieszczony (deployment) przed tym jak zaczniemy go używać Container współpracuje z JVM celem dostarczenia nowej funkcjonalności
EJB jako komponent EJB jako komponent EJB jako framework Typy beanów Pojedynczy element EJB znajdujący się po stronie serwera Odpowiada za konkretne zadania (realizuje konkretne funkcje) Wykorzystuje się tylko te funkcje komponentów, które są aktualnie programiście potrzebne Poprzez wykorzystanie funkcjonalności oferowanych przez komponenty, programista kreuje logikę biznesową 3 podstawowe typy komponentów Session Message-driven Entity
EJB jako komponent EJB jako komponent EJB jako framework Typy beanów Rysunek: Program Java realizowany w technologii Enterprise JavaBeans składa się z dwóch rodzajów elementów składowych: aplikacji klienta i zdalnych komponentów przetwarzania danych. Aplikacja klienta komunikuje się poprzez sieć z komponentami przetwarzania danych, przesyłając do nich żądania zdalnego wykonania metod. Wyniki działania tych metod są następnie tą samą drogą odsyłane do aplikacji klienta.
EJB jako framework EJB jako komponent EJB jako framework Typy beanów Skupia się na dostarczaniu funkcjonalności, wspólnej dla większości projektów programistycznych: Zarządzanie stanem aplikacji Zapisywanie i pobieranie danych z SZBD Zarządzanie transakcjami Wprowadzanie mechanizmów zabezpieczeń (i wiele innych) Framework dba również o wydajność, skalowalność tworzonej aplikacji oraz odporność na błędy Włączanie i konfigurowanie funkcjonalności odbywa się przez adnotacje lub/oraz pliki konfiguracyjne XML
Aplikacje wielowarstwowe EJB jako komponent EJB jako framework Typy beanów Rysunek: Schemat wykorzystania EJB w aplikacjach wielowarstwowych
Typy beanów EJB jako komponent EJB jako framework Typy beanów Trzy typy beanów, podzielone ze względu na funkcjonalności: Session Message-driven Entity Podział przydatny, gdyż: Ułatwia tworzenie aplikacji wielowarstwowych Uniemożliwia (utrudnia) tworzenie beanów, które miałyby przeciwstawne właściwości Ukierunkowanie na funkcjonalność Nie ma beana "od wszystkiego" czytelność kodu
Session beans EJB jako komponent EJB jako framework Typy beanów Służą do modelowania procesów biznesowych Skupiają się na wykonywaniu zaprogramowanych akcji Ich trwałość jest ograniczona (zależy od typu obiektu) i zgromadzone dane nie przetrwają np. restartu serwera Mogą zostać wywołane lokalnie lub zdalnie Typy session beans: Bezstanowe (stateless) Kolejne wywołania (nawet z tego samego klienta) nie mają między sobą powiązania np. wykonanie płatności kartą Mogą zostać łatwo przerobione na web service Stanowe (stateful) Automatycznie zachowują swój stan po każdorazowym wywołaniu przez klienta np. sklep internetowy
Session beans - kod EJB jako komponent EJB jako framework Typy beanów Listing 1: interfejs beana package e n t e r p r i s e. s t a t e l e s s e j b ; i m p o r t j a v a x. e j b. Remote ; @Remote p u b l i c i n t e r f a c e S t a t e l e s s S e s s i o n { S t r i n g h e l l o ( ) ; } Listing 2: klasa beana package e n t e r p r i s e. s t a t e l e s s e j b ; i m p o r t j a v a x. e j b. S t a t e l e s s ; @ S t a t e l e s s p u b l i c c l a s s S t a t e l e s s S e s s i o n B e a n implements S t a t e l e s s S e s s i o n { p u b l i c S t r i n g h e l l o ( ) { r e t u r n H e l l o World! ; } }
Message-driven beans EJB jako komponent EJB jako framework Typy beanów Podobnie jak session beans wykonują zadania/akcje jako część logiki biznesowej aplikacji Nie mogą być wywołane bezpośrednio przez klienta. Klient wysyła wiadomości do serwera wiadomości i to on dopiero przekazuje instrukcje sterujące do MDB Używane w celu zapewnienia najwyżej wydajności oraz przetwarzania asynchronicznego Popularne messaging servers: IBM WebSphere MQ, SonicMQ, Oracle Advanced Queueing, TIBCO MDBs mogą następnie wywoływać akcje na innych beanach (także MDB pośrednio poprzez serwery wiadomości)
Message-driven bean - kod EJB jako komponent EJB jako framework Typy beanów Listing 3: MDB package e n t e r p r i s e. mdb e j b ; i m p o r t javax. ejb. ActivationConfigProperty ; i m p o r t j a v a x. e j b. MessageDriven ; i m p o r t j a v a x. jms. Message ; i m p o r t j a v a x. jms. MessageListener ; @MessageDriven (mappedname = jms / destinationname, activationconfig = { @ A c t i v a t i o n C o n f i g P r o p e r t y ( propertyname = acknowledgemode, p r o p e r t y V a l u e = Auto acknowledge ), @ A c t i v a t i o n C o n f i g P r o p e r t y ( propertyname = destinationtype, p r o p e r t y V a l u e = javax. jms. Queue ) }) p u b l i c c l a s s mdbbean implements M e s s a g e L i s t e n e r { p u b l i c mdbbean ( ) { } } p u b l i c v o i d onmessage ( Message message ) { }
Entity beans EJB jako komponent EJB jako framework Typy beanów Służą do modelowania danych biznesowych Odwzorowują byty z SZBD w obiektowe klasy Javy Poprzez wykorzystanie persistance providera (wg JPA - Java Persistence API) entities zostają wprowadzone permanentnie do bazy danych (przetrwają np. restart serwera) Popularni persistance providerzy: Hibernate, TopLink
Entity beans - kod EJB jako komponent EJB jako framework Typy beanów Listing 4: Entity bean package e n t e r p r i s e. database ; i m p o r t j a v a. i o. S e r i a l i z a b l e ; i m p o r t javax. p e r s i s t e n c e. Entity ; i m p o r t j a v a x. p e r s i s t e n c e. GeneratedValue ; i m p o r t j a v a x. p e r s i s t e n c e. GenerationType ; i m p o r t javax. p e r s i s t e n c e. Id ; @Entity p u b l i c c l a s s Person implements S e r i a l i z a b l e { p r i v a t e s t a t i c f i n a l l o n g s e r i a l V e r s i o n U I D = 1L ; @Id @GeneratedValue ( strategy = GenerationType.AUTO) p r i v a t e Long i d ; p u b l i c Long g e t I d ( ) { r e t u r n i d ; } p u b l i c v o i d s e t I d ( Long i d ) { t h i s. i d = i d ; } @Override p u b l i c i n t hashcode ( ) {... } @Override p u b l i c b o o l e a n e q u a l s ( Object o b j e c t ) {... } } @Override p u b l i c S t r i n g t o S t r i n g ( ) {... }
Klient - kod EJB jako komponent EJB jako framework Typy beanów Listing 5: Prosty klient package e n t e r p r i s e. s t a t e l e s s a p p c l i e n t ; i m p o r t j a v a x. e j b. EJB ; i m p o r t e n t e r p r i s e. s t a t e l e s s e j b. ; p u b l i c c l a s s S t a t e l e s s S e s s i o n A p p C l i e n t { @EJB p r i v a t e s t a t i c S t a t e l e s s S e s s i o n s l e s s ; } p u b l i c s t a t i c v o i d main ( S t r i n g a r g s [ ] ) { System. out. p r i n t l n ( s l e s s. h e l l o ( ) ) ; }
Bar Wirtualny bar Barman Może witać klientów (zapisuje ich sobie w notesie) i rzucać złośliwe uwagi po ich odejściu Może pokazać kartę drinków Umie obsłużyć cudzoziemców Klient Może pokazać swoje Id Może zamówić drinka, jeśli pokaże ID Może opuścić bar
Bar - projekt
Przygotowanie środowiska Środowisko programistyczne - NetBeans 6.5 Serwer aplikacji - GlassFish V2 Baza danych - MySQL 5.1
Nowy projekt Tworzymy nowy projekt Java EE (Enterprise Application) Tworzymy moduł EJB i moduł aplikacji internetowej Wybieramy nasz serwer aplikacji
Encja - drink Tworzymy nową encje Drink Tworzymy persistence unit (grupa encji używanych razem) Wybieramy persitence provider (TopLink) Tworzymy nowe źródło danych (definujemy połączenie z bazą danych) Dodajemy adnotacje na potrzeby mapowania obiektowo-relacyjnego
Barman - stateless bean Tworzymy session bean Dodajemy metody biznesowe Tworzymy klienta (strona JSF) Cykl życia @PostConstruct @PreDestroy
Visit - statefull bean Jak używać statefull beanów z warstwy WEB Cykl życia @PrePassivate @PostActivate
TimerService Umożliwia wywołanie metody Stateless / Message Driven beana, po określonym czasie (lub w interwałach czasu) @Timeout Prosty w użyciu ale nie tak funkcjonalny jak zewnętrzne biblioteki
Interceptors Programowanie aspektowe w EJB Logowanie w barze ( @Interceptors(BarLogger.class) )
Order Message Driven Bean Aplikacja przyjmuje żądanie klienta i przekazuje je do kolejki MDB nasłuchuje kolejkę i wykonuje żądania
Barman jako Web Service Stateless bean mogą być łatwo zamienione w Web Service @WebService WebService czy RMI?
Sun Certified Business Component Developer (SCBCD)
Q&A
D. Panda et al., EJB3 in Action, Manning, Greenwich 2007 R. P. Sriganesh et al., Mastering Enterprise JavaBeans 3.0, Wiley Publishing Inc., Indianapolis 2006