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

Slides:



Advertisements
Ähnliche Präsentationen
EJB, Norbert Schuler1 Enterprise Java Beans z Was sind Enterprise JavaBeans? z Historie z Motivation z Architektur z Konstruktion eines Enterprise.
Advertisements

der Universität Oldenburg
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
Software Engineering Praktikum SS 2003
Software Engineering Praktikum WS 2002/03
DI Christian Donner cd (at) donners.com
Übung 5 Mehrstufige Client/Server-Systeme mit Enterprise Java Beans
Enterprise Java Beans (EJB) VL Anwendungssysteme Freitag, Gerald Weber.
Internet-Datenbanken
Tomcat Web-Server installieren
Internetzugriff mit Strings und Streams
Java 2 Enterprise Edition (J2EE)
Java 2 Enterprise Edition (J2EE)
Ausnahmen HS Merseburg (FH) WS 06/07.
Stephan Bury  Pascal Busch  Bita Gerami
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Internet-Datenbanken Grundlagen des WWW HTML HTTP Web-Anbindung von Datenbanken Servlets JSP JDBC XML Datenmodell Schemabeschreibungssprachen Anfragesprachen.
FH-Hof Servlets Richard Göbel. FH-Hof Konzept Servlets werden auf der Server-Seite durch ein Formular aufgerufen werten die Eingaben aus einem Formular.
Java: Grundlagen der Sprache
Internet-Technologien und Java
Dynamische Webseiten Java servlets.
Business Logik als EJB-Applikation Gruppe pea19 Raed IssaChristian KubanekHonoré Tiako.
Transaction Script Software Component Technology for Distributed Applications.
Java2 Enterprise Edition René Noack Mai 2003
JAVA RMI.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
Remote Methode Invocation (RMI)
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
Einführung in die Programmierung Datensammlung
Prof. K. Gremminger Folie 1 Vorlesung Datenbanksysteme SS 2002 Aufbau einer Verbindung zur Datenbank import java.net.URL; import java.sql.*; class JDBCExample.
J2EE Conformance von JDBC Middleware und EJB Applikation Server Detlef KünzelSystemberater +49 (0)
Hänchen & Partner GmbH 1 Web-Anwendungen mit dem Jakarta Struts Framework 3.Juli 2003 Martin Burkhardt.
Web-Anwendungsentwicklung à la MVC. Übersicht Über Georg Heeg Ein industrielles Beispiel Web-Anwendungen aus Smalltalker-Sicht MVC für das Web Programmierdemo.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
FQTQ ShowCase Prototyp einer Applikation zur Beratungsunterstützung.
Open Services Gateway Initiative
Einführung Servlets/JSPs
Seminar Internet - Technologie
Socket-Programmierung
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
EJB-Applikationsserver
Aichinger Christian, Strasser Jürgen. Inhalt JSF EJB Praxis - Integration.
Servlets Servlets und relevantes API Servlets & SQL via JDBC Implementierungs - Spezifika Architektur Überblick Vertikaler Prototyp / Spezifikation.
FIN-IVS Dr.Fritz Zbrog Verteilte Systementwicklung EJB Tutorial Was wird für EJB-Entwicklung benötigt ? J2EESDK 1.4 (software developement kit)
7.1.5 Java RMI – Remote Method Invocation
Komponentenarchitekturen, Enterprise Java Beans (EJB)
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Enterprise JavaBeans (EJB) und Application Server
Enterprise Java Beans (EJB) Projekt Verteilte Informationssysteme Freitag, Gerald Weber.
Java Server Pages Technologie zur Erzeugung dynamischer Webseiten basierend auf Java-Servlets Blockseminar Wintersemester 2001/2002Jochen Pfeiffer Seite.
J2EE-Motivation(I) Anforderungen an heutige Software u.a.:
EJB Architektur für große Web - Applikationen Gerald Weber
Java 2 Enterprise Edition (J2EE) Sascha Baumeister Software Architect Specification Lead JSR086 IBM Deutschland Entwicklung GmbH
1 Servlets Stephan Baldes. 2 Was ist ein Servlet? S E R V L E T = Eine auf Java-Technologie basierte Web-Komponente, die von einem Container.
1 JavaServer Pages Stephan Baldes JavaServer Pages Einführung
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
1 Persistence Strategies for WebServices Senior Consultant Java Forum Stuttgart, 27. Juni 2002.
Realisierung verteilter Anwendungen: Teil 5 zBeim vorigen Mal: yObjektmigration (Voyager) ySpontane Vernetzung (Jini) zInhalt heute yDynamische Datenbankanfragen.
Realisierung verteilter Anwendungen: Teil 7 zBeim vorigen Mal: yMultitier-Architekturen: Enterprise Java Beans zInhalt heute: yFortsetzung der Einführung.
© 2012 TravelTainment Einführung in Enterprise JavaBeans Seminarvortrag von Ralf Penners Folie 1 von 34.
Oracle ADF FacesSeite 1 Oracle ADF Faces OPITZ CONSULTING Oracles Implementierung der JavaServer Faces Spezifikation.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
Verteilte Anwendungen: J2EE
Java-Kurs Übung Klassen und Objekte: Vererbung (Fortsetzung)
Dynamisches Laden von Klassen
Tutorstunde 10.
 Präsentation transkript:

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

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

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

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

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

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

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

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

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

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

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().

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");

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.

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

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

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

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();

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)

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

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?

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

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);

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

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

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

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

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

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

Erzeugen der HTML-Seite bonus.html

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

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

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);... }}

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

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(" ");

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

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

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

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; }

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; }

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() { } }

Ü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

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

Deploy-Tool

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).

Enterprise Bean

Web Komponente

JNDI-Eintrag und Root Context

Verifikation und Deployment der Applikation

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

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

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