Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in Multitier-Architekturen yDynamische Seitengenerierung (JSP und Servlets)

Ähnliche Präsentationen


Präsentation zum Thema: "Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in Multitier-Architekturen yDynamische Seitengenerierung (JSP und Servlets)"—  Präsentation transkript:

1 Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in Multitier-Architekturen yDynamische Seitengenerierung (JSP und Servlets) zInhalt heute yKomponentenarchitekturen (am Beispiel von Enterprise Java Beans) zLernziel: yGrundverständnis des Designs der EJB-Architektur zur weiteren Vertiefung im Beruf Ralf Möller, FH-Wedel

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

3 Ziele der EJB-Architektur zStandard-Applikationsserver-Architektur für Java zAbstraktion von Low-Level Aufgaben bei Transaktionen, Multithreading, Connection Pooling zKomponenten-Orientierung: Applikationen können aus Teilen verschiedener Hersteller aufgebaut werden zDefinierte Rollenverteilung für die Systemerstellung zDefinition der Aufgaben der Rollen durch Contracts

4 EJB-Architektur RMI EJB-Server Clients RDBMS CORBA JDBC Container Legacy- Application B B

5 Beispiel: E-Commerce-System zBean-Provider Cat.com bietet Produktkatalog MyCat an zApp. Assembler WebVend erstellt Applikation BuyMe zMarktplatz GoodStuff ist Deployer, EJBServer und Container kommen von MegaBeans MyCat.jar MyCat.jar Order Cart JSP M. O.C. EJB Serv.+ Cont. HTTP Client DD DD = Deployment Descriptor

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

7 EJB Rollen zBean Provider (Experte im Anwendungsbereich) zApplication Assembler: (Experte im Anwendungsbereich) zDeployer (Experte für spezielle Systemumgebung) zEJB Server Experte (TP-Experte, z.B. DB-Anbieter) zEJB Container Provider (Experte für System- programmierung, Load Balancing) zSystem-Administrator

8 Welche Analyse-Klassen stellen EJBs dar? zEJBs repräsentieren grobkörnige Objekte: ySitzungsobjekte: Session Beans xStateless: single-use service, haben keinen Zustand xStateful: speichern Zustand, aber nur transient yPersistente Objekte: Entity Beans zBeispiel: Eirichtung einer Bean für eine Rechnung, aber nicht für einen Rechnungsposten

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

10 Java-Sprachebene: Elemente einer EJBean zHome Interface: Feste Arten von Klassen-Methoden. U.a. Life-cycle-Management Methoden (Erzeugung...) zRemote Interface: Instanzmethoden, Business- Methoden zBeanklasse: Implementiert beide Interfaces zDeployment Descriptor zVerwendete andere Klassen (Helper Classes) HomeRemote Bean Helper

11 Beispiel: Die EntityBean MyCat zHome-Interface MyCatHome: ycreate(String Name) yfindByPrimaryKey(String) yfindLike(String keyword) zRemote-Interface MyCat: ygetPrice() etc. ysetPrice() etc. ybuy(int pieces) zBean-Klasse MyCatBean: Implementiert Methoden aus MyCatHome und MyCat. zDeployment Descriptor: ytype: entity yrole admin: Alle Methoden yrole customer: nicht setPrice().

12 Locating a (session) Bean’s home interface zJNDI (Java Naming and Directory Interface) Context initialContext = new InitialContext(); BankBeanHome myBeanHome = (BankBeanHome) initialContext.lookup("Systems/gsj21/Repository/Applicat ions/BankExample1/Homes/BankSessionBean");

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

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

15 Motivation der J2EE-Umgebungseinbettung zBeispiel: Verbindungen (connections) zVerbindungsobjekte repräsentieren eine Zugriffsmöglichkeit auf eine Ressource (z.B. JDBC)

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

17 Beispiel: JDBC-Verbindungen zConnection con; zResultSet results; ztry { con = DriverManager.getConnection( "jdbc:odbc://vodka.fh-wedel.de/Db", username, password); results = con.createStatement(). executeQuery("...") z} catch (Exception e) { System.out.println(e); } zcon.close();

18 Kontextabhängigkeit des DB-Treibers ztry { Class.forName("org.gjt.mm.mysql.Driver") } catch (ClassNotFoundException cnfe) { System.out.println("Cannot load driver"); } zAber: der Treiber hängt von der Umgebung ab! zBei Einhaltung des Komponentengedankens muß der Treibername zur Laufzeit erfragt werden! zHierzu dient ein Kontextobjekt (sog. EJB-Kontext)

19 Verbindungen im EJB-Kontext (ohne Pool) import java.sql.*; import javax.sql.*; public class AccountBean implements EntityBean { public Collection ejbFindByLastName(String lName) { try { String dbdriver = new InitialContext().lookup("java:comp/env/DBDRIVER").toString(); Class.forName(dbdriver).newInstance(); Connection conn = DriverManager.getConnection("java:comp/env/DBURL", "userID", "password"); conn.close(); }}

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

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

22 Verbindungen im EJB-Context (mit Pool) (1) import java.sql.*; import javax.sql.*; // import here vendor-specific JDBC drivers public ProductPK ejbCreate() { try { // initialize JNDI lookup parameters Context ctx = new InitialContext(...);... // Following params could come from a JNDI look-up ConnectionPoolDataSource cpds = (ConnectionPoolDataSource)ctx.lookup(cpsource);

23 Verbindungen im EJB-Context (mit Pool) (2)... cpds.setDatabaseName("PTDB"); cpds.setUserIF("XYZ"); PooledConnection pc = cpds.getPooledConnection(); Connection conn = pc.getConnection(); // do business logic conn.close(); }... }

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

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

26 J2EE Software und Setup  Java 2 SDK Enterprise Edition (J2EE), Version ( )  Java 2 SDK, Standard Edition (J2SE) Version 1.2 oder neuer ( ).  Annahme: installiert in $HOME/J2EE/j2sdkee1.2.1  bzw. $HOME/J2EE/jdk1.2.2  PATH: $HOME/ J2EE/jdk1.2.2/bin und $HOME/ J2EE/j2sdkee1.2.1/bin  CLASSPATH: $HOME/J2EE/j2sdkee1.2.1/lib/j2ee.jar

27 J2EE Application Components zApplication client components zEnterprise JavaBeans components zServlets and JavaServer Pages components (auch Web components genannts) zApplets

28 J2EE Application Components zServlet mit HTML-Dateien werden zu einem Web Archive (WAR) zusammengefaßt zSession Bean und Klassen zu einem JAR Archiv zusammengefaßt zEnterprise Archive (EAR) Datei zur Verifikation, zum Testen und zum Deployment in die Produktionsumgebung enthält alle Teil-Archive

29 Erzeugen der HTML-Seite bonus.html

30 Der HTML-Code in.../ J2EE/ClientCode Bonus Calculation Enter social security Number: Enter Multiplier:

31 Das Servlet zRetrieves the user data zLooks up the session bean zPasses the data to the session bean zUpon receiving a value back from the session bean, creates an HTML page to display the returned value to the user  Datei in.../ J2EE/ClientCode/BonusServlet.java

32 Initialisierungsmethode für Servlet public class BonusServlet extends HttpServlet { CalcHome homecalc; public void init(ServletConfig config) throws ServletException{ //Look up home interface try{ InitialContext ctx = new InitialContext(); Object objref = ctx.lookup("calcs"); homecalc = (CalcHome)PortableRemoteObject.narrow (objref, CalcHome.class);... }}

33 doGet Methode  Eingabe: request und response Objekt zRequests repräsentieren die Eingabe vom Browser zResponses repräsentieren einen Ausgabekanal zum Browser zAufgaben: yFinden des Home-Interfaces des Anwendungsobjekts  Aufruf der Methode calcBonus yGenerieren des Antwort-HTML-Seite

34 doGet Methode (Ausschnitt) public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String socsec = null; int multiplier = 0; double calc = 0.0; PrintWriter out; response.setContentType("text/html"); String title = "EJB Example"; out = response.getWriter(); out.println(" ") out.println(title); out.println(" ");

35 doGet Methode (Ausschnitt) try{ Calc theCalculation; //Retrieve Bonus and Social Security Information String strMult = request.getParameter("MULTIPLIER"); Integer integerMult = new Integer(strMult); multiplier = integerMult.intValue(); socsec = request.getParameter("SOCSEC"); //Calculate bonus double bonus = ; theCalculation = homecalc.create(); calc = theCalculation.calcBonus(multiplier, bonus); } catch(Exception CreateException){ CreateException.printStackTrace(); }

36 doGet 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(); }

37 Erstellung der Session Bean zZustandlose Bean reicht aus  CalcBean.java  Calc.java  CalcHome.java  in.../J2EE/Beans

38 CalcHome package Beans; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; public interface CalcHome extends EJBHome { Calc create() throws CreateException, RemoteException; }

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

40 CalcBean (Ausschnitt) public class CalcBean implements SessionBean { public double calcBonus(int multiplier, double bonus) { double calc = (multiplier*bonus); return calc; } public void ejbCreate() { } public void setSessionContext(SessionContext ctx) { } public void ejbRemove() { } public void ejbActivate() { } public void ejbPassivate() { } public void ejbLoad() { } public void ejbStore() { } }

41 Übersetzung von Session Bean und Servel #!/bin/sh cd.../J2EE J2EE_HOME=.../J2EE/j2sdkee1.2.1 CPATH=.:$J2EE_HOME/lib/j2ee.jar javac -d. -classpath "$CPATH" Beans/CalcBean.java Beans/CalcHome.java Beans/Calc.java cd.../J2EE/ClientCode J2EE_HOME=.../J2EE/j2sdkee1.2.1 CPATH=.:$J2EE_HOME/lib/j2ee.jar: /home/monicap/J2EE javac -d. -classpath "$CPATH" BonusServlet.java

42 Starten des Applikationsservers  j2sdkee1.2.1/bin/j2ee -verbose  deploytool yFenster für J2EE Applications und Komponenten yInspektorfenster für Information über ausgewählte Applikation oder Komponenten yServer-Informationsfenster für installierte Applikationen... und des Deploy-Tools

43 Deploy-Tool

44 Zusammenbau der Applikation zErzeugen eines J2EE-Applikation (BonusApp.ear). zErzeugen einer Enterprise Bean (CalcBean.jar). zErzeugen einer Web Komponente (Bonus.war). zAngabe eines JNDI Names für die Enterprise bean (calcs). zAngabe eines sog. Root Context für die J2EE- Applikation (BonusRoot).

45 Enterprise Bean

46 Web Komponente

47 JNDI-Eintrag und Root Context

48 Verifikation und Deployment der Applikation

49 Start der Applikation zAnnahme : Web-Server verwendet Port 8000 (ggf. Konfigurierung in.../J2EE/j2sdkee1.2/config) zEingabe der URL in einem Brower  Ausgabe erfolgt in neuer HTML-Seite Bonus Calculation Soc Sec: Multiplier: 25 Bonus Amount

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

51 Und beim nächsten Mal: zTransaktionsmanagement zSecurity zPersistenz zund eventuell etwas über Lastverteilung (load balancing)


Herunterladen ppt "Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in Multitier-Architekturen yDynamische Seitengenerierung (JSP und Servlets)"

Ähnliche Präsentationen


Google-Anzeigen