Скачать презентацию Realisierung verteilter Anwendungen Teil 6 Ralf Möller FH-Wedel Скачать презентацию Realisierung verteilter Anwendungen Teil 6 Ralf Möller FH-Wedel

e2cf99de46141e02695dacd4c1ebcf6c.ppt

  • Количество слайдов: 51

Realisierung verteilter Anwendungen: Teil 6 Ralf Möller, FH-Wedel z Beim vorigen Mal: y. Einführung Realisierung verteilter Anwendungen: Teil 6 Ralf Möller, FH-Wedel z Beim vorigen Mal: y. Einführung in Multitier-Architekturen y. Dynamische Seitengenerierung (JSP und Servlets) z Inhalt heute y. Komponentenarchitekturen (am Beispiel von Enterprise Java Beans) z Lernziel: y. Grundverständnis des Designs der EJB-Architektur zur weiteren Vertiefung im Beruf

Enterprise Java Beans (EJB) Teile von einigen der nachfolgenden Folien wurden übernommen aus: VL Enterprise Java Beans (EJB) Teile von einigen der nachfolgenden Folien wurden übernommen aus: VL Anwendungssysteme Gerald Weber

Ziele der EJB-Architektur z Standard-Applikationsserver-Architektur für Java z Abstraktion von Low-Level Aufgaben bei Transaktionen, Ziele der EJB-Architektur z Standard-Applikationsserver-Architektur für Java z Abstraktion von Low-Level Aufgaben bei Transaktionen, Multithreading, Connection Pooling z Komponenten-Orientierung: Applikationen können aus Teilen verschiedener Hersteller aufgebaut werden z Definierte Rollenverteilung für die Systemerstellung z Definition der Aufgaben der Rollen durch Contracts

EJB-Architektur EJB-Server RMI Clients RDBMS B JDBC Containe r B CORBA Legacy. Application EJB-Architektur EJB-Server RMI Clients RDBMS B JDBC Containe r B CORBA Legacy. Application

Beispiel: E-Commerce-System z Bean-Provider Cat. com bietet Produktkatalog My. Cat an . jar z Beispiel: E-Commerce-System z Bean-Provider Cat. com bietet Produktkatalog My. Cat an . jar z App. Assembler Web. Vend erstellt Applikation Buy. Me z Marktplatz Good. Stuff ist Deployer, EJBServer und Container kommen von Mega. Beans JSP Client HTTP My. Cat Cart. jar Order DD EJB Serv. + Cont. M. C. O. DD = Deployment Descriptor

JMS (Java Message Service) JNDI (Java Naming and Directory Interface) JMS (Java Message Service) JNDI (Java Naming and Directory Interface)

EJB Rollen z Bean Provider (Experte im Anwendungsbereich) z Application Assembler: (Experte im Anwendungsbereich) EJB Rollen z Bean Provider (Experte im Anwendungsbereich) z Application Assembler: (Experte im Anwendungsbereich) z Deployer (Experte für spezielle Systemumgebung) z EJB Server Experte (TP-Experte, z. B. DB-Anbieter) z EJB Container Provider (Experte für Systemprogrammierung, Load Balancing) z System-Administrator

Welche Analyse-Klassen stellen EJBs dar? z EJBs repräsentieren grobkörnige Objekte: y. Sitzungsobjekte: Session Beans Welche Analyse-Klassen stellen EJBs dar? z EJBs repräsentieren grobkörnige Objekte: y. Sitzungsobjekte: Session Beans x. Stateless: single-use service, haben keinen Zustand x. Stateful: speichern Zustand, aber nur transient y. Persistente Objekte: Entity Beans z Beispiel: Eirichtung einer Bean für eine Rechnung, aber nicht für einen Rechnungsposten

Komponentenbegriff z Beans implementieren Business-Logik. z Beans sind verteilte Objekte. z Bean ist über Komponentenbegriff z Beans implementieren Business-Logik. z Beans sind verteilte Objekte. z Bean ist über eine Anzahl von Parametern anpaßbar. z Beans enthalten deklarative Informationen über den Einsatzkontext (Deployment-Descriptor). z Client-Zugriff erfolgt durch festgelegte Interfaces

Java-Sprachebene: Elemente einer EJBean z Home Interface: Feste Arten von Klassen-Methoden. U. a. Life Java-Sprachebene: Elemente einer EJBean z Home Interface: Feste Arten von Klassen-Methoden. U. a. Life -cycle-Management Methoden (Erzeugung. . . ) z Remote Interface: Instanzmethoden, Business. Methoden z Beanklasse: Implementiert beide Interfaces z Deployment Descriptor z Verwendete andere Klassen (Helper Classes) Home Remote Bea n Helper

Beispiel: Die Entity. Bean My. Cat z Home-Interface My. Cat. Home: y create(String Name) Beispiel: Die Entity. Bean My. Cat z Home-Interface My. Cat. Home: y create(String Name) y find. By. Primary. Key(String) y find. Like(String keyword) z Remote-Interface My. Cat: y get. Price() etc. y set. Price() etc. y buy(int pieces) z Bean-Klasse My. Cat. Bean: Implementiert Methoden aus My. Cat. Home und My. Cat. z Deployment Descriptor: y type: entity y role admin: Alle Methoden y role customer: nicht set. Price().

Locating a (session) Bean’s home interface z JNDI (Java Naming and Directory Interface) Context Locating a (session) Bean’s home interface z JNDI (Java Naming and Directory Interface) Context initial. Context = new Initial. Context(); Bank. Bean. Home my. Bean. Home = (Bank. Bean. Home) initial. Context. lookup("Systems/gsj 21/Repository/Applicat ions/Bank. Example 1/Homes/Bank. Session. Bean");

EJB Contracts: Client-View-Contract z Client kann durch RMI auf Bean zugreifen. z Pro Deployment EJB Contracts: Client-View-Contract z Client kann durch RMI auf Bean zugreifen. z Pro Deployment einer Bean ist ein Home. Interface-Objekt in JNDI eingetragen und für den Client nutzbar. z Bean Instanzen implementieren das Remote. Interface Der Client erhält sie durch das Home. Interface.

Component Contract z Beans werden in Container eingebettet z Bean implementiert Business-M. , Life-cycle-M. Component Contract z Beans werden in Container eingebettet z Bean implementiert Business-M. , Life-cycle-M. u. a. Callbacks. Container ruft diese sinngemäß auf z Container behandelt z. B. Transaktionen, Security und Exceptions z Container bietet JNDI-Environment, EJBContext z Bean Provider vermeidet Programmierung, die das Container Runtime Management stört z Optional: Container behandelt Persistenz z Deployment-Descriptor enthält entsp. Daten

Motivation der J 2 EE-Umgebungseinbettung z Beispiel: Verbindungen (connections) z Verbindungsobjekte repräsentieren eine Zugriffsmöglichkeit Motivation der J 2 EE-Umgebungseinbettung z Beispiel: Verbindungen (connections) z Verbindungsobjekte repräsentieren eine Zugriffsmöglichkeit auf eine Ressource (z. B. JDBC)

Nachteile des häufigen Verbindungsaufbaus z Auf- und Abbau einer Verbindung ist aufwendig z Bei Nachteile des häufigen Verbindungsaufbaus z Auf- und Abbau einer Verbindung ist aufwendig z Bei häufigem Zugriff entsteht großer Overhead z Häufig gilt: mehrere Komponenten greifen auf die gleiche Ressource zu z Wünschenswert: Pool von Verbindungen für mehrere Komponenten jeweils für eine Ressource

Beispiel: JDBC-Verbindungen z Connection con; z Result. Set results; z try { con = Beispiel: JDBC-Verbindungen z Connection con; z Result. Set results; z try { con = Driver. Manager. get. Connection( "jdbc: odbc: //vodka. fh-wedel. de/Db", username, password); results = con. create. Statement(). execute. Query(". . . ") z } catch (Exception e) { System. out. println(e); } z con. close();

Kontextabhängigkeit des DB-Treibers z try { Class. for. Name( Kontextabhängigkeit des DB-Treibers z try { Class. for. Name("org. gjt. mm. mysql. Driver") } catch (Class. Not. Found. Exception cnfe) { System. out. println("Cannot load driver"); } z Aber: der Treiber hängt von der Umgebung ab! z Bei Einhaltung des Komponentengedankens muß der Treibername zur Laufzeit erfragt werden! z Hierzu dient ein Kontextobjekt (sog. EJB-Kontext)

Verbindungen im EJB-Kontext (ohne Pool) import java. sql. *; import javax. sql. *; public Verbindungen im EJB-Kontext (ohne Pool) import java. sql. *; import javax. sql. *; public class Account. Bean implements Entity. Bean { public Collection ejb. Find. By. Last. Name(String l. Name) { try { String dbdriver = new Initial. Context(). lookup("java: comp/env/DBDRIVER"). to. String(); Class. for. Name(dbdriver). new. Instance(); Connection conn = Driver. Manager. get. Connection("java: comp/env/DBURL", "user. ID", "password"); conn. close(); }}

Reduzierung des Aufwandes z Im Applikationsserver laufen viele EJBs z Jede EJB führt kurze Reduzierung des Aufwandes z Im Applikationsserver laufen viele EJBs z Jede EJB führt kurze Interaktion mit DB durch. . . z. . . und meldet die Verbindung gleich wieder ab z Idee: Teilung von Verbindungen zwischen mehreren EJBs und mehreren Aufrufen von EJB-Methoden z Notwendig: Verwaltung eines kritischen Abschnitt (bedingt durch Multithreading) und ggf. Transaktionsmanagement z Soll das jeder EJB-Programmierer selbst machen?

Connection Pooling durch Container z Idee: Connection Pooling wird durch Umgebung (container) für alls Connection Pooling durch Container z Idee: Connection Pooling wird durch Umgebung (container) für alls EJBs übernommen

Verbindungen im EJB-Context (mit Pool) (1) import java. sql. *; import javax. sql. *; Verbindungen im EJB-Context (mit Pool) (1) import java. sql. *; import javax. sql. *; // import here vendor-specific JDBC drivers public Product. PK ejb. Create() { try { // initialize JNDI lookup parameters Context ctx = new Initial. Context(. . . ); . . . // Following params could come from a JNDI look-up Connection. Pool. Data. Source cpds = (Connection. Pool. Data. Source)ctx. lookup(cpsource);

Verbindungen im EJB-Context (mit Pool) (2). . . cpds. set. Database. Name( Verbindungen im EJB-Context (mit Pool) (2). . . cpds. set. Database. Name("PTDB"); cpds. set. User. IF("XYZ"); Pooled. Connection pc = cpds. get. Pooled. Connection(); Connection conn = pc. get. Connection(); // do business logic conn. close(); }. . . }

Zusammenfassung der Motivation für J 2 EE z Es gibt Aspekte der Anwendungsprogrammierung, die Zusammenfassung der Motivation für J 2 EE z Es gibt Aspekte der Anwendungsprogrammierung, die für alle Softwarekomponenten relevant sind z Es ist sinnvoll, sie nur einmal zu programmieren und von für verschiedene Komponenten zu nutzen z Es gibt bestimmte Abhängigkeiten der Komponenten vom konkreten Einsatzkontext

Eine Beispielanwendung z Benutzer macht Eingaben in HTML-Formular z Das ausgefüllte Formular wird durch Eine Beispielanwendung z Benutzer macht Eingaben in HTML-Formular z Das ausgefüllte Formular wird durch ein Servlet verarbeitet z Das Servlet lokalisiert die Verarbeitungskomponente (Session Bean) über JNDI (Java Naming and Directory Service) z Session Bean macht Berechnung z Servlet kommuniziert Ergebnis zum Benutzer

J 2 EE Software und Setup z Java 2 SDK Enterprise Edition (J 2 J 2 EE Software und Setup z Java 2 SDK Enterprise Edition (J 2 EE), Version 1. 2. 1 (http: //java. sun. com/j 2 ee/download. html) z Java 2 SDK, Standard Edition (J 2 SE) Version 1. 2 oder neuer (http: //java. sun. com/jdk/index. html). z Annahme: installiert in $HOME/J 2 EE/j 2 sdkee 1. 2. 1 z bzw. $HOME/J 2 EE/jdk 1. 2. 2 z PATH: $HOME/J 2 EE/jdk 1. 2. 2/bin und $HOME/J 2 EE/j 2 sdkee 1. 2. 1/bin z CLASSPATH: $HOME/J 2 EE/j 2 sdkee 1. 2. 1/lib/j 2 ee. jar

J 2 EE Application Components z Application client components z Enterprise Java. Beans components J 2 EE Application Components z Application client components z Enterprise Java. Beans components z Servlets and Java. Server Pages components (auch Web components genannts) z Applets

J 2 EE Application Components z Servlet mit HTML-Dateien werden zu einem Web Archive J 2 EE Application Components z Servlet mit HTML-Dateien werden zu einem Web Archive (WAR) zusammengefaßt z Session Bean und Klassen zu einem JAR Archiv zusammengefaßt z Enterprise Archive (EAR) Datei zur Verifikation, zum Testen und zum Deployment in die Produktionsumgebung enthält alle Teil-Archive

Erzeugen der HTML-Seite bonus. html Erzeugen der HTML-Seite bonus. html

" src="https://present5.com/presentation/e2cf99de46141e02695dacd4c1ebcf6c/image-30.jpg" alt="Der HTML-Code in. . . /J 2 EE/Client. Code " /> Der HTML-Code in. . . /J 2 EE/Client. Code

Bonus Calculation

Enter social security Number:

Enter Multiplier:

Das Servlet z Retrieves the user data z Looks up the session bean z Das Servlet z Retrieves the user data z Looks up the session bean z Passes the data to the session bean z Upon receiving a value back from the session bean, creates an HTML page to display the returned value to the user z Datei in. . . /J 2 EE/Client. Code/Bonus. Servlet. java

Initialisierungsmethode für Servlet public class Bonus. Servlet extends Http. Servlet { Calc. Home homecalc; Initialisierungsmethode für Servlet public class Bonus. Servlet extends Http. Servlet { Calc. Home homecalc; public void init(Servlet. Config config) throws Servlet. Exception{ //Look up home interface try{ Initial. Context ctx = new Initial. Context(); Object objref = ctx. lookup("calcs"); homecalc = (Calc. Home)Portable. Remote. Object. narrow (objref, Calc. Home. class); . . . }}

do. Get Methode z Eingabe: request und response Objekt z Requests repräsentieren die Eingabe do. Get Methode z Eingabe: request und response Objekt z Requests repräsentieren die Eingabe vom Browser z Responses repräsentieren einen Ausgabekanal zum Browser z Aufgaben: y. Finden des Home-Interfaces des Anwendungsobjekts y. Aufruf der Methode calc. Bonus y. Generieren des Antwort-HTML-Seite

do. Get Methode (Ausschnitt) public void do. Get (Http. Servlet. Request request, Http. Servlet. do. Get Methode (Ausschnitt) public void do. Get (Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { String socsec = null; int multiplier = 0; double calc = 0. 0; Print. Writer out; response. set. Content. Type("text/html"); String title = "EJB Example"; out = response. get. Writer(); out. println("") out. println(title); out. println("");

do. Get Methode (Ausschnitt) try{ Calc the. Calculation; //Retrieve Bonus and Social Security Information do. Get Methode (Ausschnitt) try{ Calc the. Calculation; //Retrieve Bonus and Social Security Information String str. Mult = request. get. Parameter("MULTIPLIER"); Integer integer. Mult = new Integer(str. Mult); multiplier = integer. Mult. int. Value(); socsec = request. get. Parameter("SOCSEC"); //Calculate bonus double bonus = 100. 00; the. Calculation = homecalc. create(); calc = the. Calculation. calc. Bonus(multiplier, bonus); } catch(Exception Create. Exception){ Create. Exception. print. Stack. Trace(); }

Bonus Calculation"); out. println("

Soc Sec:" src="https://present5.com/presentation/e2cf99de46141e02695dacd4c1ebcf6c/image-36.jpg" alt="do. Get Methode (Ausschnitt) //Display Data out. println("Bonus Calculation"); out. println("

Soc Sec:" /> do. Get Methode (Ausschnitt) //Display Data out. println("Bonus Calculation"); out. println("

Soc Sec: " + socsec); out. println("

Multiplier: " + multiplier); out. println("

Bonus Amount: " + calc); out. println(""); out. close(); }

Erstellung der Session Bean z Zustandlose Bean reicht aus z Calc. Bean. java z Erstellung der Session Bean z Zustandlose Bean reicht aus z Calc. Bean. java z Calc. Home. java z in. . . /J 2 EE/Beans

Calc. Home package Beans; import java. rmi. Remote. Exception; import javax. ejb. Create. Exception; Calc. Home package Beans; import java. rmi. Remote. Exception; import javax. ejb. Create. Exception; import javax. ejb. EJBHome; public interface Calc. Home extends EJBHome { Calc create() throws Create. Exception, Remote. Exception; }

Calc Remote Interface package Beans; import javax. ejb. EJBObject; import java. rmi. Remote. Exception; Calc Remote Interface package Beans; import javax. ejb. EJBObject; import java. rmi. Remote. Exception; public interface Calc extends EJBObject { public double calc. Bonus(int multiplier, double bonus) throws Remote. Exception; }

Calc. Bean (Ausschnitt) public class Calc. Bean implements Session. Bean { public double calc. Calc. Bean (Ausschnitt) public class Calc. Bean implements Session. Bean { public double calc. Bonus(int multiplier, double bonus) { double calc = (multiplier*bonus); return calc; } public void ejb. Create() { } public void set. Session. Context(Session. Context ctx) { } public void ejb. Remove() { } public void ejb. Activate() { } public void ejb. Passivate() { } public void ejb. Load() { } public void ejb. Store() { } }

Übersetzung von Session Bean und Servel #!/bin/sh cd. . . /J 2 EE_HOME=. . Übersetzung von Session Bean und Servel #!/bin/sh cd. . . /J 2 EE_HOME=. . . /J 2 EE/j 2 sdkee 1. 2. 1 CPATH=. : $J 2 EE_HOME/lib/j 2 ee. jar javac -d. -classpath "$CPATH" Beans/Calc. Bean. java Beans/Calc. Home. java Beans/Calc. java cd. . . /J 2 EE/Client. Code J 2 EE_HOME=. . . /J 2 EE/j 2 sdkee 1. 2. 1 CPATH=. : $J 2 EE_HOME/lib/j 2 ee. jar: /home/monicap/J 2 EE javac -d. -classpath "$CPATH" Bonus. Servlet. java

Starten des Applikationsservers z j 2 sdkee 1. 2. 1/bin/j 2 ee -verbose . Starten des Applikationsservers z j 2 sdkee 1. 2. 1/bin/j 2 ee -verbose . . . und des Deploy-Tools z deploytool y. Fenster für J 2 EE Applications und Komponenten y. Inspektorfenster für Information über ausgewählte Applikation oder Komponenten y. Server-Informationsfenster für installierte Applikationen

Deploy-Tool Deploy-Tool

Zusammenbau der Applikation z Erzeugen eines J 2 EE-Applikation (Bonus. App. ear). z Erzeugen Zusammenbau der Applikation z Erzeugen eines J 2 EE-Applikation (Bonus. App. ear). z Erzeugen einer Enterprise Bean (Calc. Bean. jar). z Erzeugen einer Web Komponente (Bonus. war). z Angabe eines JNDI Names für die Enterprise bean (calcs). z Angabe eines sog. Root Context für die J 2 EEApplikation (Bonus. Root).

Enterprise Bean Enterprise Bean

Web Komponente Web Komponente

JNDI-Eintrag und Root Context JNDI-Eintrag und Root Context

Verifikation und Deployment der Applikation Verifikation und Deployment der Applikation

Start der Applikation z Annahme : Web-Server verwendet Port 8000 (ggf. Konfigurierung in. . Start der Applikation z Annahme : Web-Server verwendet Port 8000 (ggf. Konfigurierung in. . . /J 2 EE/j 2 sdkee 1. 2/config) z Eingabe der URL http: //localhost: 8000/Bonus. Root/bonus. html in einem Brower z Ausgabe erfolgt in neuer HTML-Seite Bonus Calculation Soc Sec: 77777 Multiplier: 25 Bonus Amount 2500. 0

Diskussion z Die EJB-Architektur befindet sich zur Zeit in der Entwicklung z Es wurde Diskussion z Die EJB-Architektur befindet sich zur Zeit in der Entwicklung z Es wurde in dieser Vorlesung ein grober Eindruck der Ziele und wesentlichen Ideen vermittelt, und. . . z es wurden die grundlegenden Entwicklungsschritte für einer N-Tier-Anwendung erläutert

Und beim nächsten Mal: z Transaktionsmanagement z Security z Persistenz z und eventuell etwas Und beim nächsten Mal: z Transaktionsmanagement z Security z Persistenz z und eventuell etwas über Lastverteilung (load balancing)