Enterprise Java Beans Kamil Falana 13 grudnia 2004 PJWSTK Plan prezentacji - Wprowadzenie - RMI - JNDI - Historia EJB Plan prezentacji c.d. - Rodzaje bean’ów EJB: - SessionBean: - stateless - stateful - EntityBean - Message-Driven Bean - Przykład - Podsumowanie Wprowadzenie - J2EE jest specyfikacją, a nie konkretnym produktem - EJB jest częścią J2EE - Komponenty EJB – warstwa biznesowa - Serwer aplikacji (kontener) RMI (Remote Method Invocation) - RMI over IIOP (Internet Inter-Orb Protocol) - rozproszona komunikacja między obiektami - przekazywanie parametrów przez referencję i przez wartość (serializacja) JNDI (Java Naming and Directory Interface) - API J2EE (standardowy interfejs do lokalizacji m.in. komputerów, obiektów) - usługi nazwowe (łączenie nazw do obiektów) - usługi katalogowe (obiekt katalogu - atrybuty) - wspólny interfejs dla różnych katalogów - wykorzystywane przez komponenty do poszukiwania innych komponentów JNDI (Java Naming and Directory Interface) - JNDI składa się z 2 części: - API klienta - interfejsu SPI (Service Provider Interface) KLIENT API klienta JNDI Interfejs dostawcy usług (SPI) Interfejs usługi LDAP Interfejs systemu plików Enterprise Java Beans Integeracja RMI i JNDI: - serwer RMI publikuje się w drzewie JNDI - klient wyszukuje serwera RMI poprzez JNDI Historia - EJB 1.0 – specyfikacja 1998 rok - Aktualizacje: – EJB 1.1 – EJB 1.2 - EJB 2.0 – wrzesień 2001 roku - EJB 2.1 – październik 2003 roku - EJB 3.0 – ? Session Bean Komponent sesyjny - obiekt krótkotrwały - rozszerzenie aplikacji klienta po stronie serwera (implementuje logikę biznesową) - 2 podtypy: - Stateful (stanowy) - Stateless (bezstanowy) Session Bean Stateful (stanowy) - przez cały czas życia skojarzone z jedną aplikacją klienta - pamięta swój stan obiektu Session Bean Stateless (bezstanowy) - przy każdym wywołaniu może być wykorzystywany przez inną aplikację klienta - niepamiętają swojego stanu obiektu Entity Bean Komponent encyjny - żyją aż do momentu jawnego ich usunięcia - automatyczne, fizyczne składowanie obiektów Java w bazie danych - wykorzystywane do komunikacji logiki biznesowej z bazą danych - pojedynczy komponent może być współdzielony przez wielu klientów Entity Bean - 2 rodzaje: - BMP (Bean-Managed Persistency) - z trwałością obsługiwaną przez komponent - CMP (Container-Managed Persistency) - z trwałością obsługiwaną przez kontener EJB Message-Driven Bean Komponent sterowany komunikatami - uruchamiany wtedy, gdy nadchodzi komunikat od klienta - wykonywany asynchronicznie - bezstanowy - może modyfikować zawartość bazy danych Enterprise Java Beans Przykład (Session Stateless Bean) Interfejs zdalny import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface ExampleRemote extends EJBObject { String HelloWorld() throws RemoteException; } Deklaruje metody komponentu EJB, które będą dostępne dla zdalnej aplikacji klienta. Przykład (Session Stateless Bean) Interfejs domowy import javax.ejb.EJBHome; import java.rmi.RemoteException; import javax.ejb.CreateException; public interface ExampleHome extends EJBHome { ExampleRemote create() throws RemoteException, CreateException; } Deklaruje metody zarządzania cyklem życia komponentu EJB. Przykład (Session Stateless Bean) Klasa komponentu EJB import javax.ejb.SessionBean; import javax.ejb.SessionContext; public interface ExampleBean implements SessionBean { public ejCreate() {...}; ... public HelloWorld() {...} } Przykład (Session Stateless Bean) Deskryptor rozmieszczenia (ejb-jar.xml) <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd"> <ejb-jar> <enterprise-beans> <session> <description>Session Bean ( Stateless )</description> <display-name>Example</display-name> <ejb-name>Example</ejb-name> <home>ExampleHome</home> <remote>ExampleRemote</remote> <ejb-class>ExampleBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar> Podsumowanie - interfejs zdalny - interfejs domowy - klasa komponentu - deskryptor rozmieszczenia - lokalny interfejs i lokalny interfejs domowy (*) Enterprise Java Beans KONIEC