Plan prezentacji. Budowa aplikacji w technologii Enterprise JavaBeans. Przegląd architektur: CORBA. Cele budowy aplikacji rozproszonych



Podobne dokumenty
Budowa aplikacji w technologii. Enterprise JavaBeans. Maciej Zakrzewicz PLOUG

Budowa komponentów Enterprise JavaBeans

Wprowadzenie do Enterprise JavaBeans 2.0

Platforma J2EE i EJB. Oprogramowanie systemów równoległych i rozproszonych Wykład 9. Rola EJB na platformie J2EE. Dr inż. Tomasz Olas olas@icis.pcz.

Encyjne komponenty EJB

1 Wprowadzenie do J2EE

EJB 2.x oraz zmiany w standardzie dla EJB 3.0. Michał Stanek

Enterprise JavaBeans

Programowanie komponentowe 5

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

EJB 3.0 (Enterprise JavaBeans 3.0)

Enterprise JavaBeans. 1. Architektura EJB: komponenty encyjne, komponenty sesyjne, komponenty sterowane komunikatami. 2. Kontenery EJB JBoss.

Enterprise Java Beans wykład 7 i 8

Programowanie współbieżne i rozproszone

Wywoływanie metod zdalnych

Wywoływanie metod zdalnych

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Obsługa transakcji rozproszonych Java. Marek Wojciechowski, Maciej Zakrzewicz Instytut Informatyki, Politechnika Poznańska

Wybrane działy Informatyki Stosowanej

Rozproszone systemy internetowe. Wprowadzenie. Koncepcja zdalnego wywołania procedury

Aplikacje RMI

Remote Method Invocation 17 listopada 2010

Aplikacje internetowe i rozproszone - laboratorium

Podejście obiektowe do budowy systemów rozproszonych

Zagadnienia projektowania aplikacji J2EE

Wprowadzenie do J2EE. Maciej Zakrzewicz.

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Aplikacje RMI Lab4

Projektowanie Aplikacji Internetowych. Wzorce projektowe warstwy usług

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podstawowe informacje o technologii Java EE 7

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

D:\DYDAKTYKA\ZAI_BIS\_Ćwiczenia_wzorce\04\04_poprawiony.doc 2009-lis-23, 17:44

Wybrane działy Informatyki Stosowanej

Enterprise JavaBean 3.0

Zaawansowane aplikacje internetowe

Enterprise JavaBeans (EJB)

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Architektura CORBA. Przegląd technologii dla komponentowych,, rozproszonych aplikacji internetowych J2EE

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Komponenty sterowane komunikatami

Plan wykładu CORBA. Cechy aplikacji rozproszonych. Aplikacje rozproszone

Bezstanowe komponenty sesyjne i zdarzenia zwrotne

Usługa TimerService

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wprowadzenie. Dariusz Wawrzyniak 1

Projektowanie Aplikacji Internetowych Jarosław Kuchta. Wzorce projektowe warstwy biznesowej

Programowanie Komponentowe WebAPI

Tworzenie komponentów logiki biznesowej i warstwy dostępu do danych w oparciu o EJB3.0/JPA lub EJB 3.1/JPA2

Contexts and Dependency Injection (CDI) Autor wykładu: Marek Wojciechowski

Komunikacja i wymiana danych

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

76.Struktura oprogramowania rozproszonego.

Modelowanie systemów w architekturze J2EE z wykorzystaniem notacji UML

Zaawansowane aplikacje internetowe. Wykład 6. Wprowadzenie do Web Services. wykład prowadzi: Maciej Zakrzewicz. Web Services

Zaawansowane narzędzia programowania rozproszonego

Java wybrane technologie

Zagrożenia trywialne. Zagrożenia bezpieczeństwa aplikacji internetowych. Parametry ukryte. Modyfikowanie parametrów wywołania

Dostęp do komponentów EJB przez usługi Web Services

Aplikacje w środowisku Java

Wykład 1 Inżynieria Oprogramowania

Wzorce Strukturalne. Adapter: opis. Tomasz Borzyszkowski

Programowanie obiektowe

Interfejsy w Javie. Przykład zastosowania interfejsów:

Tworzenie aplikacji dla Oracle Application Server 10g R3 w technologii EJB 3.0

Wypożyczalnia VIDEO. Technologie obiektowe

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Protokoly w technologii obiektow rozproszonych - CORBA, RMI/IIOP, COM, SOAP. Paweł Kozioł p.koziol@students.mimuw.edu.pl

mgr inż. Michał Paluch

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

Enterprise Java Beans Narzędzia i Aplikacje Java EE

Tworzenie aplikacji rozproszonej w Sun RPC

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Rola EJB na platformie Java EE. Enterprise JavaBeans (EJB)

Metody dostępu do danych

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Szkolenie wycofane z oferty. Program szkolenia: Enterprise Java Beans 3.0/3.1

Enterprise JavaBeans (EJB)

Transakcje w systemach Java Enterprise Korzystanie z systemów kolejkowania w serwerach aplikacji

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Architektury usług internetowych. Tomasz Boiński Mariusz Matuszek

Systemy Rozproszone TECHNOLOGIA JAVA 2 ENTERPRISE EDITION PRZEMYSŁAW SOŁTAN. kerk@moskit.ie.tu.koszalin.pl

Programowanie rozproszone w języku Java

Middleware wprowadzenie października 2010

Systemy rozproszone. Dr inż. L. Miękina. Department of Robotics and Mechatronics AGH University of Science and Technology 1/1

Obs³uga transakcji rozproszonych w jêzyku Java

"Biznesowe" wzorce projektowe

Middleware wprowadzenie października Dariusz Wawrzyniak (IIPP) 1

Budowa prostej aplikacji wielowarstwowej. Laboratorium 1 Programowanie komponentowe Zofia Kruczkiewicz

Stanowe komponenty sesyjne

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

RMI-2. Java Remote Method Invocation (RMI) na podstawie m.in. podręcznika firmy Sun Microsystems SYSTEMY ROZPROSZONE

Tworzenie i wykorzystanie usług

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wzorce logiki dziedziny

Typy przetwarzania. Przetwarzanie zcentralizowane. Przetwarzanie rozproszone

Informacje wstępne Autor Zofia Kruczkiewicz Wzorce oprogramowania 4

Transkrypt:

Plan prezentacji Budowa aplikacji w technologii Enterprise JavaBeans Przegląd architektur aplikacji rozproszonych: CORBA,, Wprowadzenie do Enterprise JavaBeans () Budowa komponentów sesyjnych Budowa komponentów encyjnych Podsumowanie Maciej Zakrzewicz PLOUG Cele budowy aplikacji rozproszonych Zwiększenie przepustowości systemu poprzez rozproszenie przetwarzania pomiędzy wiele komputerów Zwiększenie niezawodności systemu poprzez replikację komponentów w alternatywnych lokalizacjach Odciążenie komputera użytkownika końcowego dzięki przeniesieniu ciężkiego przetwarzania na stronę serwera aplikacji Współdzielenie komponentów przez różne aplikacje pracujące we wspólnych środowisku sieciowym Przegląd architektur: CORBA Jedna z pierwszych architektur budowy heterogenicznych rozproszonych aplikacji komponentowych Specyfikacja obejmuje architekturę oraz język opisu interfejsów - IDL (Interface Description Language) Aplikacje CORBA składają się z programu klienta, współpracującego z programami serwerów poprzez warstwę komunikacyjną ORB (Object Request Broker) Serwer Klient Client Proxy wg IDL IIOP Object Request Broker Szkielet serwera wg IDL Object Adapter

Przegląd architektur: Przegląd architektur: klient serwer usługa (klasa) serwer aplikacji kontener metoda(par1,par2) serializacja wywołania wynik deserializacja wyniku wynik serializacja wyniku metoda(par1,par2) deserializacja wywołania aplikacja klienta wywołania metod RMI/IIOP wyniki metod komponent HTTP serwer aplikacji kontener Wywołanie metody przez klienta jest konwertowane do dokumentu. Argumenty wywołania są serializowane (konwertowane do ciągu bajtów reprezentowanego heksadecymalnie). Dokument, nazywany komunikatem, jest przekazywany poprzez HTTP POST do usługi, która po dokonaniu deserializacji argumentów wywołania metody, uruchamia żądaną metodę i przekazuje zwrotnie jej rezultat, korzystając z analogicznego algorytmu. komponent Enterprise JavaBeans Wprowadzenie do Enterprise JavaBeans Specyfikacja Enterprise JavaBeans definiuje architekturę i metodę budowy rozproszonych komponentów obiektowych uruchamianych po stronie serwera aplikacji Komponenty są wykorzystywane do budowy złożonych aplikacji rozproszonych na zasadzie składania z klocków

aplikacja klienta Ogólna architektura wywołania metod wyniki metod serwer aplikacji kontener komponent Program Java realizowany w technologii Enterprise JavaBeans składa się z dwóch rodzajów elementów składowych: lokalnej aplikacji klienta i zdalnych komponentów przetwarzania danych. Aplikacja klienta komunikuje się poprzez sieć komputerową 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. Kontener Bezpośrednim środowiskiem uruchomieniowym dla każdego komponentu Enterprise JavaBeans jest kontener Kontener całkowicie pośredniczy w komunikacji pomiędzy komponentem a światem zewnętrznym Kontener oferuje komponentowi szereg usług o charakterze systemowym: ochrona dostępu, obsługa transakcji, itp. Komponent może uzyskać dostęp do usług kontenera korzystając z mechanizmu typu callback - w chwili powoływania do życia obiektu komponentu, kontener przekazuje komponentowi pewien rodzaj uchwytu zwrotnego; za pomocą tego uchwytu obiekt komponentu może wykonywać wywołania metod kontenera Typy komponentów Specyfikacja Enterprise JavaBeans 2.0 definiuje trzy typy komponentów : sesyjne (Session Bean): sesyjny komponent 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 encyjne (Entity Bean): encyjny komponent 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 komunikatowe (Message-Driven Bean): komunikatowy komponent 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 Ogólny proces tworzenia komponentu Przygotowanie kodu źródłowego klasy Java, reprezentującej komponent Utworzenie dwóch interfejsów Java, reprezentujących punkty kontu świata zewnętrznego z komponentem : interfejs Home, służący do zarządzania cyklem życia komponentu interfejs Remote/Local, służący do wywoływania metod logiki biznesowej komponentu Przygotowanie -owego pliku konfiguracyjnego - deskryptora instalacji (Deployment Descriptor) Kompilacja całego przygotowanego kodu Java i utworzenie z niego pliku JAR/EAR o specjalnej wewnętrznej strukturze katalogów Umieszczenie przygotowanych plików w systemie plików serwera aplikacji; zarejestrowanie komponentu

Sesyjne komponenty Traktowane jako logiczna kontynuacja kodu aplikacji klienta, fizycznie zlokalizowana jednak po stronie serwera aplikacji Żyją jedynie przez czas trwania sesji aplikacji klienta Ich zastosowanie przypomina klasyczne rozwiązania mechanizmów zdalnego wołania procedury RPC Dwa rodzaje sesyjnych komponentów : stanowe (stateful) komponenty są przez cały czas życia skojarzone z jedną i tą samą aplikacją klienta i pamiętają swój stan obiektu bezstanowe (stateless) sesyjne komponenty nie gwarantują pamiętania swojego stanu obiektu i mogą być przy każdym wywołaniu wykorzystywane przez inną aplikację klienta Tworzenie sesyjnego komponentu (1/5) Interfejs Remote import javax.ejb.object; public interface Multiplicator1Remote extends Object float multiply(float factor1, float factor2) throws RemoteException; Interfejs Remote deklaruje metody komponentu, które będą dostępne dla zdalnej aplikacji klienta. Metody te muszą zostać zaimplementowane przez programistę w klasie komponentu. Tworzenie sesyjnego komponentu (2/5) Tworzenie sesyjnego komponentu (3/5) Interfejs Home import javax.ejb.home; import javax.ejb.createexception; public interface Multiplicator1Home extends Home Multiplicator1Remote create() throws RemoteException, CreateException; Interfejs Home deklaruje metody zarządzania cyklem życia komponentu, które będa dostępne dla zdalnej aplikacji klienta. Metody te nie będą implementowane przez programistę, lecz zostaną wygenerowane automatycznie. Klasa komponentu import javax.ejb.sessionbean; import javax.ejb.sessioncontext; public class Multiplicator1Bean implements SessionBean public void ejbcreate() public void ejbactivate() public void ejbpassivate() public void ejbremove() public void setsessioncontext(sessioncontext ctx) public float multiply(float factor1, float factor2) return factor1 * factor2;

Tworzenie sesyjnego komponentu (4/5) Plik deskryptora instalacji <?xml version = '1.0' encoding = 'windows-1252'?> <!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>multiplicator1</display-name> <ejb-name>multiplicator1</ejb-name> <home>multiplicator1home</home> <remote>multiplicator1remote</remote> <ejb-class>multiplicator1bean</ejb-class> <session-type>stateless</session-type> <transaction-type>container</transaction-type> </session> </enterprise-beans> </ejb-jar> Tworzenie sesyjnego komponentu (5/5) Fragment kodu aplikacji klienta Multiplicator1Home multiplicator1home; Multiplicator1Remote multiplicator1remote; Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "com.evermind.server.rmi.rmiinitialcontextfactory"); env.put(context.security_principal, "scott"); env.put(context.security_credentials, "tiger"); env.put(context.provider_url, "ormi://miner:1811/ejbapp1"); Context ctx = new InitialContext(env); multiplicator1home = (Multiplicator1Home)ctx.lookup("multiplicator1"); multiplicator1remote = multiplicator1home.create(); System.out.println(multiplicator1Remote.multiply(2,2)); Encyjne komponenty Służą do uzyskania efektu trwałości obiektów programowych Java poprzez ich automatyczne fizyczne składowanie w bazie danych; żyją aż do momentu jawnego ich usunięcia Wykorzystywane do budowy warstwy komunikacji logiki biznesowej z bazą danych lub też do implementacji iej logiki biznesowej, która intensywnie eksploatuje bazę danych Pojedynczy encyjny komponent może być współdzielony przez wiele aplikacji klientów Dwa typy: z trwałością obsługiwaną przez komponent (BMP - Bean-Managed Persistency): muszą same umieszczać swój stan w bazie danych, korzystając np. z biblioteki JDBC lub SQLJ z trwałością obsługiwaną przez kontener (CMP - Container-Managed Persistency): polegają na funkcjonalności kontenera, którego zadaniem jest w tym przypadku automatyczne zapisywanie i odczytywanie stanu komponentu do/z bazy danych Tworzenie encyjnego komponentu CMP (1/5) Tabela Emp EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ----- ---------- --------- ---------- --------- ---------- ---------- ---------- 7369 SMITH CLERK 7902 17-DEC-80 800 20 7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30 7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30 Tabela Emp będzie służyć do trwałego przechowywania obiektów w bazie danych. Każdy obiekt będzie reprezentować jednego pracownika.

Tworzenie encyjnego komponentu CMP (2/5) Interfejs Remote import javax.ejb.object; public interface Employee2Remote extends Object long getempno() throws RemoteException; void setempno(long newempno) throws RemoteException; long getdeptno() throws RemoteException; void setdeptno(long newdeptno) throws RemoteException; Interfejs Remote deklaruje metody komponentu, które będą dostępne dla zdalnej aplikacji klienta. Metody te muszą zostać zaimplementowane przez programistę w klasie komponentu. W powyższym przykładzie są to metody dostępu do obiektu pracownika. Tworzenie encyjnego komponentu CMP (3/5) Interfejs Home import javax.ejb.home; import javax.ejb.createexception; import javax.ejb.finderexception; import java.util.collection; Interfejs Home deklaruje metody zarządzania cyklem życia i wyszukiwania komponentu, które będa dostępne dla zdalnej aplikacji klienta. Metody te nie będą implementowane przez programistę, lecz zostaną wygenerowane automatycznie. public interface Employee2Home extends Home Employee2Remote create() throws RemoteException, CreateException; Employee2Remote create(long empno) throws RemoteException, CreateException; Employee2Remote findbyprimarykey(employee2remotepk primarykey) throws RemoteException, FinderException; Collection findall() throws RemoteException, FinderException; Employee2Remote findbyname(string val) throws RemoteException, FinderException; Tworzenie encyjnego komponentu CMP (4/5) Tworzenie encyjnego komponentu CMP (5/7) Klasa komponentu import javax.ejb.*; public class Employee2Bean implements EntityBean public long empno; public String ename; public String job; public long mgr; public String hiredate; public long sal; public long comm; public long deptno; public long getempno() return empno; public void setempno(long newempno) empno = newempno; public long getdeptno() return deptno; public void setdeptno(long newdeptno) deptno = newdeptno; <?xml version = '1.0' encoding = 'windows-1252'?> <!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> <entity> <description>encyjny komponent - CMP</description> <display-name>employee</display-name> <ejb-name>employee</ejb-name> Plik deskryptora instalacji <home>employee2home</home> <remote>employee2remote</remote> <ejb-class>employee2bean</ejb-class> <persistence-type>container</persistence-type> <prim-key-class>employee2remotepk</prim-key-class> <reentrant>false</reentrant> <cmp-field><field-name>empno</field-name></cmp-field> <cmp-field><field-name>deptno</field-name></cmp-field> </entity></enterprise-beans></ejb-jar>

Tworzenie encyjnego komponentu CMP (6/7) <entity-deployment name="employee" data-source="jdbc/connection1ds" table="emp"> <primkey-mapping><cmp-field-mapping><fields> <cmp-field-mapping name="empno" persistence-name="empno" persistence-type="number(4)"/> <cmp-field-mapping name="deptno" persistence-name="deptno" persistence-type="number(2)"/> <finder-method partial="true" query="ename=$1"><method> <ejb-name>employee</ejb-name> <method-name>findbyname</method-name> Plik deskryptora instalacji <method-params> <method-param>java.lang.string</method-param> </method-params> </method></finder-method> </entity-deployment></enterprise-beans></orion-ejb-jar> Tworzenie encyjnego komponentu CMP (7/7) Employee2Home employee2home; Employee2Remote e; Fragment kodu aplikacji klienta Hashtable env = new Hashtable(); env.put(context.initial_context_factory, "com.evermind.server.rmi.rmiinitialcontextfactory"); env.put(context.security_principal, "scott"); env.put(context.security_credentials, "tiger"); env.put(context.provider_url, "ormi://miner:1811/ejbapp2"); Context ctx = new InitialContext(env); employee2home = (Employee2Home)ctx.lookup("Employee"); e = (Employee2Remote)employee2Home.findByName("KING"); System.out.println(e.getJob()); System.out.println(e.getSal()); e.setsal(550); Podsumowanie Podsumowanie - porównanie technologii Enterprise JavaBeans stanowią naturalny wybór architektury aplikacji rozproszonych dla programisty Java Ze względu na skomplikowaną procedurę przygotowywania wersji instalacyjnej komponentów, zaleca się wykorzystywanie specjalizowanych narzędzi programistycznych (np. JDeveloper) W popularnych zastosowaniach, technologia 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 język programowania protokół komunikacyjny integracja z bazą danych dostęp asynchroniczny (kolejkowy) obsługiwane przez 9iAS CORBA dowolny IIOP ręczna nie dowolny HTTP ręczna Java RMI automatyczna