Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Mina Bachmeier Geändert vor über 8 Jahren
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 1.2.1 ( http://java.sun.com/j2ee/download.html ) Java 2 SDK, Standard Edition (J2SE) Version 1.2 oder neuer ( http://java.sun.com/jdk/index.html ). 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 = 100.00; 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 http://localhost:8000/BonusRoot/bonus.html in einem Brower Ausgabe erfolgt in neuer HTML-Seite Bonus Calculation Soc Sec: 777777777 Multiplier: 25 Bonus Amount 2500.0
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)
Ähnliche Präsentationen
© 2024 SlidePlayer.org Inc.
All rights reserved.