EJB - Prezentacja TBE
Transkrypt
EJB - Prezentacja TBE
Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie EJB Prezentacja TBE Jarosław Gołaszewski Jakub Wojnicki Politechnika Wrocławska 26.05.2009 Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Agenda 1 Wstęp 2 EJB 3.0 3 Session Beans 4 Entity Beans 5 Message-Driven Beans 6 Serwery aplikacji 7 Podsumowanie Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy Aplikacje rozproszone i komponenty Aplikacja dwuwarstwowa Łatwa w instalacji ale trudna w utrzymaniu Trudność w wielokrotnym wykorzystywaniu kodu Słaba skalowalność Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy Aplikacje rozproszone i komponenty Aplikacja dwuwarstwowa Łatwa w instalacji ale trudna w utrzymaniu Trudność w wielokrotnym wykorzystywaniu kodu Słaba skalowalność Aplikacja wielowarstwowa Łatwa w instalacji i utrzymaniu Wielokrotne wykorzystywanie kodu Skalowalna Skomplikowana obsługa transakcji, zarządzanie stanem, wielowątkowość Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy J2EE J2EE - definicja Java Platform, Enterprise Edition (zwana również jako Java Enterprise, J2EE oraz Java EE) definiuje standard tworzenia aplikacji w języku programowania Java opartych o wielowarstwową architekturę komponentową. Komponenty są zwykle osadzane na serwerze aplikacyjnym obsługującym Java Enterprise. Standard ten określa zestaw interfejsów programistycznych jakich musi dostarczać zgodny serwer aplikacyjny. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy Cele J2EE Oddzielenie niskopoziomowych szczegółów od logiki biznesowej. Niskopoziomowe działania obsługiwane przez kontener aplikacji. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy Aplikacja wielowarstwowa J2EE Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Aplikacje rozproszone i komponenty J2EE - definicja J2EE - elementy J2EE Elementy J2EE Java Database Connectivity (JDBC) Java Naming and Directory Interface (JNDI) Java Beans (EJB) Java Server Pages (JSP) Java Servlets Remote Method Invocation (RMI) Java IDL/CORBA Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Enterprise JavaBeans Definicja wg Sun Microsystem ”Enterprise JavaBeans jest architekturą komponentową wspierającą wytwarzanie aplikacji opartych na komponentach. Aplikacje napisane z wykorzystaniem technologii EJB są skalowalne, transakcyjne oraz bezpieczne. Są one napisane tylko raz, a następnie można je umieścić na dowolnym serwerze wspierającym specyfikację EJB.” Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Architektura EJB Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Kontener EJB Bezpośrednie środowisko uruchomieniowe dla każdego komponentu Enterprise JavaBeans Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Kontener EJB Bezpośrednie środowisko uruchomieniowe dla każdego komponentu Enterprise JavaBeans Całkowicie pośredniczy w komunikacji pomiędzy komponentem EJB a światem zewnętrznym Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Kontener EJB Bezpośrednie środowisko uruchomieniowe dla każdego komponentu Enterprise JavaBeans Całkowicie pośredniczy w komunikacji pomiędzy komponentem EJB a światem zewnętrznym Oferuje komponentowi szereg usług o charakterze systemowym: ochrona dostępu, obsługa transakcji, itp. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Kontener EJB Bezpośrednie środowisko uruchomieniowe dla każdego komponentu Enterprise JavaBeans Całkowicie pośredniczy w komunikacji pomiędzy komponentem EJB a światem zewnętrznym Oferuje komponentowi szereg usług o charakterze systemowym: ochrona dostępu, obsługa transakcji, itp. Może uzyskać dostęp do usług kontenera EJB korzystając z mechanizmu typu callback - w chwili powoływania do życia obiektu komponentu EJB, kontener EJB przekazuje komponentowi EJB pewien rodzaj uchwytu zwrotnego. Za pomocą tego uchwytu obiekt komponentu EJB może wykonywać wywołania metod kontenera EJB Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Ogólny proces tworzenia komponentu EJB 1 Przygotowanie kodu źródłowego klasy Java, reprezentującej komponent EJB 2 Utworzenie interfejsu Java, reprezentującego punkt kontaktu świata zewnętrznego z komponentem EJB: interfejs Remote/Local, służący do wywoływania metod logiki biznesowej komponentu EJB 3 Przygotowanie XML-owego pliku konfiguracyjnego - deskryptora instalacji (Deployment Descriptor) lub uzupełnienie kodu o annotacje 4 Kompilacja całego przygotowanego kodu Java i utworzenie z niego pliku JAR/EAR o specjalnej wewnętrznej strukturze katalogów 5 Umieszczenie przygotowanych plików w systemie plików serwera aplikacji; zarejestrowanie komponentu EJB Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Enterprise JavaBeans EJB Specyfikacja EJB definiuje komponentową architekturę EJB oraz interfejsy pomiędzy serwerem wspierającym EJB oraz komponentem. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Enterprise JavaBeans EJB Specyfikacja EJB definiuje komponentową architekturę EJB oraz interfejsy pomiędzy serwerem wspierającym EJB oraz komponentem. Typy Beanów 1 Session Beans (Wykonywanie zadań dla klienta aplikacji.) 2 Entity Beans (Reprezentują dane w bazie danych. Dane cały czas dostępne.) 3 Message-Driven Beans (Zachowują się jak listener dla Java Message Service API, przetwarzają wiadomości asynchronicznie) Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - Remote Remote Client - cechy 1 Może działać na innej maszynie, Java virtual machine (JVM) niż enterprise bean, z którego korzysta. 2 Może być komponentem webowym, aplikacją kliencką lub innym enterprise bean. 3 Dla remote client lokalizacja enterprise bean jest transparentna. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - Remote Remote Client - wymagania 1 Business interface enterprise bean musi posiadać annotację @Remote: @Remote public interface InterfaceName { ... } 2 Enterprise bean musi posiadać annotację @Remote specyfikującą implementowany interfejs: @Remote ( InterfaceName . class ) public class BeanName implements InterfaceName { ... } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - Local Local Client - cechy 1 Musi działać na tej samej JVM jak enterprise bean, z którego korzysta. 2 Może być komponentem webowym lub innym enterprise bean. 3 Dla lokalnego klienta lokalizacja enterprise bean nie jest transparentna. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - Local Local Client - wymagania 1 Business interface enterprise bean musi posiadać annotację @Local: @Local public interface InterfaceName { ... } 2 Enterprise bean musi posiadać annotację @Local specyfikującą implementowany interfejs: @Local ( InterfaceName . class ) public class BeanName implements InterfaceName { ... } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - wybór Związki pomiędzy Beanami Beany zależne od siebie powinny pracować Local Np Bean odpowiedzialny za zakupy korzysta z Beana wysyłającega maila potwierdzającego. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - wybór Związki pomiędzy Beanami Beany zależne od siebie powinny pracować Local Np Bean odpowiedzialny za zakupy korzysta z Beana wysyłającega maila potwierdzającego. Rodzaj klienta Jeżeli klient jest aplikacją zewnętrzną to dostęp Remote W przypadku komponentów webowych decyzja zależy od sposobu dystrybucji komponentów. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - wybór Rozmieszczenie komponentów Dostęp Remote umożliwia skalowalność systemu. W przypadku aplikacji rozproszonych konieczny jest dostęp Remote. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Dostęp do Beanów - wybór Rozmieszczenie komponentów Dostęp Remote umożliwia skalowalność systemu. W przypadku aplikacji rozproszonych konieczny jest dostęp Remote. Wydajność Dostęp Remote z reguły jest wolniejszy ze względu na opóźnienia. Jednak Remote umożliwia dystrybucję komponentów pomiędzy kilka maszyn, co z kolei wpłynie na wzrost wydajności w przypadku dużych aplikacji. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Zawartość Enterprise Bean Enterprise bean class: Implementacja metod zadeklarowanych w interfejsie biznesowym oraz metody cyklu życia. Business Interfaces: Interfejs biznesowy deklarujący metody implementowane przez klase beana. Helper classes: Inne klasy wymagane przez klasę enterprise bean, np klasy exception oraz utility. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Struktura Enterprise Bean Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Definicja Architektura Kontener EJB Proces tworzenia komponentu EJB Typy beanów Dostęp do Beanów Zawartość Enterprise Bean Nazewnictwo Konwencje nazewnictwa Beanów Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Session Beans Definicja Sesyjny komponent EJB to krótkotrwały obiekt wykorzystywany przez pojedynczą aplikację klienta i nie współdzielony z innymi aplikacjami, stanowiący logiczne rozszerzenie kodu aplikacji klienta umieszczone po stronie serwera aplikacji. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Session Beans Definicja Sesyjny komponent EJB to krótkotrwały obiekt wykorzystywany przez pojedynczą aplikację klienta i nie współdzielony z innymi aplikacjami, stanowiący logiczne rozszerzenie kodu aplikacji klienta umieszczone po stronie serwera aplikacji. Dwa rodzaje: Stateless Stateful Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateless Session Beans Instancja beana ma stan tylko na czas wywołania jego metody Kontener EJB może przypisać dowolną nieużywaną instancję beana klientowi Lepsza skalowalność dla aplikacji z dużą liczbą użytkowników Z reguły aplikacja wymaga mniejszej liczba Stateless Beans niż Stateful Beans Najczęściej oferują większą wydajność niż Stateful Beans Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateless Session Beans - Annotacje @Stateless - definicja Stateless Beana @Remote - zdalny interfejs dostępu do metod Beana @Local - lokalny interfejs dostępu do metod Beana @PostConstruct - metoda wywoływana po stworzeniu Beana @PreDestroy - metoda wywoływana przed zniszczeniem Beana Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateless Session Beans - cykl życia Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateful Session Beans Instancja obiektu tworzona dla sesji client-bean Klient ’rozmawia’ z beanem, stąd stan beanu nazywany ’conversational state’ Stan zachowywany przez całą sesję client-bean Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateful Session Beans - Annotacje @Stateful - definicja Stateful Beana @Remote - zdalny interfejs dostępu do metod Beana @Local - lokalny interfejs dostępu do metod Beana @Remove - metoda wywoływana @PostConstruct - metoda wywoływana po stworzeniu Beana @PreDestroy - metoda wywoływana po zakończeniu metod @Remove, ale przed usunięciem Beana @PostActivate - metoda wywoływana po przesunięciu Beana z ’secondary storage’ @PrePassivate - metoda wywoływana przed przesunięciem Beana do ’secondary storage’ Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateful Session Beans - cykl życia Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateful Session Beans - annotacje Interfejs @Remote public InterfaceName { // ... metody b i z n e s o w e } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Stateful Session Beans - annotacje Klasa Bean import import import import import import javax . ejb . Remove ; javax . ejb . Stateful ; javax . annotation . PostConstruct ; javax . annotation . PreDestroy ; javax . ejb . PostActivate ; javax . ejb . PrePassivate ; @Stateful public class NameBean implements InterfaceName { // ... metody b i z n e s o w e @Remove public void remove () {} @Pos tConstruct public void postConstruct () {} @PreDestroy public void preDestroy () {} @PostActivate public void postActivate () {} @PrePassivate public void prePassivate () {} } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Kiedy stosować Session Beans Session Beans Stan Beana nie jest zapamiętywany, istnieje przez krótki okres czasu(np kilka godz.) W danym momencie tylko jeden klient ma dostęp do instancji Beana Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Kiedy stosować Session Beans Stateful Beans Stan Beana reprezentuje interakcje pomiędzy konkretnym użytkownikiem Bean musi przechowywać dane przez czas działania kilku metod Bean pośredniczy pomiędzy klientem a innymi komponentami aplikacji Stan Beana jest wykorzystywany przez inne komponenty Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Session Beans Stateless Session Beans Stateful Session Beans Annotacje przykład Stateful Kiedy stosować Session Beans? Kiedy stosować Session Beans Stateless Beans Stan Beana nie przechowuje danych dla konkretnego klienta Metoda Beana wykonuje generalne zadanie dla wszystkich klientów (np wysłanie maila potwierdzającego) Bean pobiera dane z bazy danych, które są często wykorzystywane Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Entity Beans Definicja Encyjny komponent EJB reprezentuje dane, które są trwale przechowywane w systemie bazy danych; cechuje się długim czasem życia, pozwala na atomowe, transakcyjne modyfikacje bazy danych, współdzielony przez wielu klientów, dostępny dla wielu sesji. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Persistence Dane przechowywane w systemie danych. Dane utrwalane na stałe. Nawet w przypadku wyłączenia aplikacji/serwera. Dwa rodzaje: bean-managed oraz container-managed bean-managed - bean sam dba o komunikację z baza danych. container-managed - kontener sam generuje niezbędne odwołania do bazy danych. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Wymagania klasy encyjnej Klasa musi być annotowana javax.persistence.Entity Musi posiadać publiczny lub protected bezargumentowy konstruktor.(Może posiadać inne konstruktory) Żadna persystowana zmienna nie może być finalna. Nie posiada metod fianlnych. Może dziedziczyć po klasach nieencyjnych. Zmienne persystowane muszą być prywatne lub protected. Dostęp jest realizowany jedynie przez gettery, settery oraz metody biznesowe. Jeżeli instancja encji jest przekazywana przez wartość jako obiekt detached(np przez interfejs Remote Session Bean) to klasa musi implementować interfejs Serializable. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Persystentne atrybuty klasy encyjnej Java primitive types Serializowane obiekty(np java.sql.Date, java.math.BigDecimal, java.util.Date) Serializowane obiekty zdefiniowane przez użytkownika Enumeracje Inne encje lub kolekcje encji Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Wsparcie dla mapowania relacji One-to-one ( @OneToOne ) One-to-many ( @OneToMany ) Many-to-one ( @ManyToOne ) Many-to-many ( @ManyToMany ) Inheritance (@Inheritance, strategie: InheritanceType SINGLE TABLE, JOINED, TABLE PER CLASS ) Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Zarządzanie encjami Encje zarządzane przez javax.persistence.EntityManager Każdy Entity Manager jest związany z persistence context persistence context - zbiór zarządzanych encji EntityManager pozwala na: tworzenie, uaktualnianie, usuwanie, znajdywanie po kluczu głównym oraz uruchamianie zapytań na encjach. Dwa sposoby zarządzania EntityManagerem: Container-Managed oraz Application-Managed Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Container-Managed EntityManager Instancja EntityManagera jest automatycznie propagowana pomiędzy komponentami kontenera, które używają instancji EM w pojedynczej transakcji Java Transaction Architecture (JTA) Transakcje JTA najczęściej wymagają wywołań w kilku komponentach aplikacji, które potrzebują jednego persistence context Jest to możliwe za pomocą wstrzykiwania kontekstu do komponentów poprzez annotację javax.persistence.PersistenceContext @PersistenceContext EntityManager em ; Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Application-Managed EntityManager EntityManager nie jest propagowany automatycznie. Aplikacja tworzy instancję EntityManager’a przy pomocy metody createEntityManager javax.persistence.EntityManagerFactory Instancję EntityManagerFactory otrzymuje się poprzez wstrzykiwanie za pomocą annotacji: javax.persistence.PersistenceUnit @ P e r s i s t e n c e U ni t E n t i t y M a n a g e r F a c t o r y emf ; EntityManager em = emf . c r e a t e E n t i t y M a n a g e r (); Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Entity Beans - cykl życia Stany instancji Encji New - nowa encja, niepersystowana, niezwiązana z żadnym kontekstem Managed - encja persystowana związana z kontekstem Detached - encja persystowana niezwiązana z kontekstem Removed - encja persystowana związana z kontekstem, która ma zostać usunięta Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Znajdywanie encji @PersistenceContext EntityManager em ; public void enterOrder ( int custID , Order newOrder ) { Customer cust = em . find ( Customer . class , custID ); cust . getOrders (). add ( newOrder ); newOrder . setCustomer ( cust ); } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Zapamiętywanie encji @PersistenceContext EntityManager em ; ... public LineItem cre ateLineI tem ( Order order , Product product , int quantity ) { LineItem li = new LineItem ( order , product , quantity ); order . getLineItems (). add ( li ); em . persist ( li ); return li ; } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Usuwanie encji @PersistenceContext EntityManager em ; ... public void removeOrder ( Integer orderId ) { try { Order order = em . find ( Order . class , orderId ); em . remove ( order ); }... Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Dynamic queries Definiowane bezpośrednio w logice biznesowej aplikacji. Wykorzystywana metoda: EntityManager.createQuery . Wykorzystuje Java Persistence Query Language. Np: @PersistenceContext EntityManager em ; ... public List findWithName ( String name ) { return em . createQuery ( " SELECT c FROM Customer c WHERE c . name " + " LIKE : custName " ) . setParameter ( " custName " , name ) . setMaxResults (10) . getResultList (); } Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Static queries Definiowane w metadanych. Oznaczane annotacją javax.persistence.NamedQuery Np: @NamedQuery ( name = " f i n d A l l C u s t o m e r s W i t h N a m e " , query = " SELECT c FROM Customer c WHERE c . name " + " LIKE : custName " ) ... @PersistenceContext EntityManager em ; ... customers = em . c r e a t e N a m e d Q u e r y ( " f i n d A l l C u s t o m e r s W i t h N a m e " ) . setParameter ( " custName " , " Smith " ) . getResultList (); Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Persistence Units Definiuje zestaw wszystkich klas encyjnych zarządzanych przez instancję EntityManager w aplikacji. Definiowany jest w pliku konfiguracyjnym persistence.xml Każdy unit musi być definiowany przez unikatową nazwę Może znajdować się w pliku EJB JAR, wtedy powinien znajdować się w folderze META-INF EJB JAR’a Może znajdować się w pliku WAR, wtedy powinien znajdować się w folderze WEB-INF/classes/META-INF Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Przykładowy plik persistance.xml < persistence > < persistence - unit name = " O rd e rM an ag e me nt " > < description > This unit manages orders and customers . It does not rely on any vendor - specific features and can therefore be deployed to any persistence provider . </ description > <jta - data - source > jdbc / MyOrderDB </ jta - data - source > <jar - file > MyOrderApp . jar </ jar - file > < class > com . widgets . Order </ class > < class > com . widgets . Customer </ class > </ persistence - unit > </ persistence > Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Entity Beans Cechy Entity Beans Zarządzanie encjami Cykl życia Operacje na encjach Zapytania Persistence Units Entity Bean - kiedy stosować? Entity Bean - kiedy stosować? Bean reprezentuje encję biznesową. Stan beana jest zapamiętywany w zewnętrznym systemie danych. Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Message-Driven Beans Idea aplikacji Cykl życia Message-Driven Bean Class Message-Driven Beans Definicja Komunikatowy komponent EJB jest asynchronicznym konsumentem komunikatów JMS (Java Messaging Service) pochodzących ze środowisk kolejkowych. Uruchamiany wtedy, kiedy nadchodzi komunikat od klienta, wykonywany asynchronicznie, może modyfikować zawartość bazy danych, bezstanowy Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Message-Driven Beans Idea aplikacji Cykl życia Message-Driven Bean Class Message-Driven - idea aplikacji Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Message-Driven Beans Idea aplikacji Cykl życia Message-Driven Bean Class Message-Driven - cykl życia Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Message-Driven Beans Idea aplikacji Cykl życia Message-Driven Bean Class Message-Driven Bean Class Musi być annotowana @MessageDriven, jeżeli nie należy wyspecyfikować to w deskryptorze. Klasa musi być publiczna. Klasa nie może być abstrakcyjna ani finalna. Posiada publiczny, bezargumentowy konstruktor. Nie może definiować metody finalize. Zaleca się, aby implementowała interfejs javax.jms.MessageListener. Implementuje jedną metodę onMessage(z interfejsu MessageListener). Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Enterprise JavaBeans 1 2 3 4 5 6 7 8 9 10 11 JBoss AS BEA WebLogic Server iPlanet Oracle Orion Server WebSphere NetDynamics JRun Server JOnAS Pramati Server Power Tier for J2EE Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Podsumowanie Bibliografia Podsumowanie Enterprise JavaBeans stanowią naturalny wybór architektury aplikacji rozproszonych dla programisty Java W popularnych zastosowaniach, technologia EJB służy do realizacji wielowarstwowych aplikacji, w których interakcja z bazą danych obsługiwana jest przez komponenty encyjne, a przetwarzanie danych - przez komponenty sesyjne, będące klientami komponentów encyjnych Jarosław Gołaszewski Jakub Wojnicki EJB Wstęp EJB 3.0 Session Beans Entity Beans Message-Driven Beans Serwery aplikacji Podsumowanie Podsumowanie Bibliografia Bibliografia 1 http://java.sun.com/javaee/5/docs/tutorial/doc/ 2 http://java.sun.com/products/ejb/docs.html 3 http://www.roseindia.net/javabeans/ 4 http://docs.jboss.com/ejb3/app-server/tutorial/index.html Jarosław Gołaszewski Jakub Wojnicki EJB