Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in...

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

Transcript of Realisierung verteilter Anwendungen: Teil 6 zBeim vorigen Mal: yEinführung in...

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

Realisierung verteilter Anwendungen: Teil 6

Beim vorigen Mal: Einführung in Multitier-Architekturen Dynamische Seitengenerierung (JSP und Servlets)

Inhalt heute Komponentenarchitekturen (am Beispiel von

Enterprise Java Beans)Lernziel:

Grundverständnis des Designs der EJB-Architektur zur weiteren Vertiefung im Beruf

Ralf Möller, FH-Wedel

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

Enterprise Java Beans (EJB)

Teile von einigen der nachfolgenden Folien wurden übernommen aus:

VL Anwendungssysteme Gerald Weber

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

Ziele der EJB-Architektur

Standard-Applikationsserver-Architektur für JavaAbstraktion von Low-Level Aufgaben bei

Transaktionen, Multithreading, Connection PoolingKomponenten-Orientierung: Applikationen können

aus Teilen verschiedener Hersteller aufgebaut werden

Definierte Rollenverteilung für die Systemerstellung

Definition der Aufgaben der Rollen durch Contracts

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

EJB-Architektur

RMI

EJB-Server

Clients

RDBMS

CORBA

JDBC

Container

Legacy-Application

B

B

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

Beispiel: E-Commerce-System

Bean-Provider Cat.com bietet Produktkatalog MyCat an

App. Assembler WebVend erstellt Applikation BuyMe

Marktplatz GoodStuff ist Deployer, EJBServer und Container kommen von MegaBeans

MyCat.jar

MyCat.jar Order

CartJSP

M.O.C.

EJBServ.+Cont.

HTTPClientClient

Client

DD

DD = Deployment Descriptor

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

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

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

EJB Rollen

Bean Provider (Experte im Anwendungsbereich)Application Assembler: (Experte im

Anwendungsbereich)Deployer (Experte für spezielle

Systemumgebung)EJB Server Experte (TP-Experte, z.B. DB-Anbieter)EJB Container Provider (Experte für System-

programmierung, Load Balancing)System-Administrator

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

Welche Analyse-Klassen stellen EJBs dar?

EJBs repräsentieren grobkörnige Objekte: Sitzungsobjekte: Session Beans

Stateless: single-use service, haben keinen Zustand Stateful: speichern Zustand, aber nur transient

Persistente Objekte: Entity BeansBeispiel: Eirichtung einer Bean für eine

Rechnung, aber nicht für einen Rechnungsposten

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

Komponentenbegriff

Beans implementieren Business-Logik.Beans sind verteilte Objekte.Bean ist über eine Anzahl von Parametern

anpaßbar.Beans enthalten deklarative Informationen

über den Einsatzkontext (Deployment-Descriptor).

Client-Zugriff erfolgt durch festgelegte Interfaces

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

Java-Sprachebene: Elemente einer EJBean

Home Interface: Feste Arten von Klassen-Methoden. U.a. Life-cycle-Management Methoden (Erzeugung...)

Remote Interface: Instanzmethoden, Business-Methoden

Beanklasse: Implementiert beide Interfaces

Deployment Descriptor Verwendete andere Klassen

(Helper Classes)

Home Remote

Bean

HelperHelper

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

Beispiel: Die EntityBean MyCat

Home-Interface MyCatHome: create(String Name) findByPrimaryKey(String) findLike(String keyword)

Remote-Interface MyCat: getPrice() etc. setPrice() etc. buy(int pieces)

Bean-Klasse MyCatBean: Implementiert Methoden aus MyCatHome und MyCat.

Deployment Descriptor: type: entity role admin: Alle Methoden role customer: nicht

setPrice().

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

Locating a (session) Bean’s home interface

JNDI (Java Naming and Directory Interface)

Context initialContext = new InitialContext();

BankBeanHome myBeanHome = (BankBeanHome) initialContext.lookup("Systems/gsj21/Repository/Applications/BankExample1/Homes/BankSessionBean");

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

EJB Contracts: Client-View-Contract

Client kann durch RMI auf Bean zugreifen. Pro Deployment einer Bean ist ein Home-

Interface-Objekt in JNDI eingetragen und für den Client nutzbar.

Bean Instanzen implementieren das Remote-Interface Der Client erhält sie durch das Home-Interface.

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

Component Contract Beans werden in Container eingebettet Bean implementiert Business-M., Life-cycle-M. u.a.

Callbacks. Container ruft diese sinngemäß auf Container behandelt z.B. Transaktionen,

Security und Exceptions Container bietet JNDI-Environment, EJBContext Bean Provider vermeidet Programmierung, die das

Container Runtime Management stört Optional: Container behandelt Persistenz Deployment-Descriptor enthält entsp. Daten

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

Motivation der J2EE-Umgebungseinbettung

Beispiel: Verbindungen (connections)Verbindungsobjekte repräsentieren eine

Zugriffsmöglichkeit auf eine Ressource (z.B. JDBC)

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

Nachteile des häufigen Verbindungsaufbaus

Auf- und Abbau einer Verbindung ist aufwendig

Bei häufigem Zugriff entsteht großer Overhead

Häufig gilt: mehrere Komponenten greifen auf die gleiche Ressource zu

Wünschenswert: Pool von Verbindungen für mehrere Komponenten jeweils für eine Ressource

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

Beispiel: JDBC-Verbindungen

Connection con; ResultSet results; try {

con = DriverManager.getConnection( "jdbc:odbc://vodka.fh-wedel.de/Db", username, password); results = con.createStatement().executeQuery("...")

} catch (Exception e) { System.out.println(e); }

con.close();

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

Kontextabhängigkeit des DB-Treibers

try { Class.forName("org.gjt.mm.mysql.Driver")} catch (ClassNotFoundException cnfe) { System.out.println("Cannot load driver");}

Aber: der Treiber hängt von der Umgebung ab!Bei Einhaltung des Komponentengedankens muß

der Treibername zur Laufzeit erfragt werden!Hierzu dient ein Kontextobjekt (sog. EJB-Kontext)

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

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

<body> conn.close();}}

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

Reduzierung des Aufwandes

Im Applikationsserver laufen viele EJBsJede EJB führt kurze Interaktion mit DB durch ...... und meldet die Verbindung gleich wieder abIdee: Teilung von Verbindungen zwischen

mehreren EJBs und mehreren Aufrufen von EJB-Methoden

Notwendig: Verwaltung eines kritischen Abschnitt (bedingt durch Multithreading) und ggf. Transaktionsmanagement

Soll das jeder EJB-Programmierer selbst machen?

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

Connection Pooling durch Container

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

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

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

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

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

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

Zusammenfassung der Motivation für J2EE

Es gibt Aspekte der Anwendungsprogrammierung, die für alle Softwarekomponenten relevant sind

Es ist sinnvoll, sie nur einmal zu programmieren und von für verschiedene Komponenten zu nutzen

Es gibt bestimmte Abhängigkeiten der Komponenten vom konkreten Einsatzkontext

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

Eine Beispielanwendung Benutzer macht Eingaben in HTML-Formular Das ausgefüllte Formular wird durch ein Servlet

verarbeitet Das Servlet lokalisiert die Verarbeitungskomponente

(Session Bean) über JNDI (Java Naming and Directory Service)

Session Bean macht Berechnung Servlet kommuniziert Ergebnis zum Benutzer

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

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

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

J2EE Application Components

Application client componentsEnterprise JavaBeans componentsServlets and JavaServer Pages components

(auch Web components genannts)Applets

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

J2EE Application Components

Servlet mit HTML-Dateien werden zu einem Web Archive (WAR) zusammengefaßt

Session Bean und Klassen zu einem JAR Archiv zusammengefaßt

Enterprise Archive (EAR) Datei zur Verifikation, zum Testen und zum Deployment in die Produktionsumgebung enthält alle Teil-Archive

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

Erzeugen der HTML-Seite bonus.html

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

Der HTML-Code in .../J2EE/ClientCode

<HTML><BODY BGCOLOR = "WHITE"> <BLOCKQUOTE><H3>Bonus Calculation</H3><FORM METHOD="GET" ACTION="BonusServlet"><P> Enter social security Number:<P> <INPUT TYPE="TEXT" NAME="SOCSEC"></INPUT><P> Enter Multiplier:<P> <INPUT TYPE="TEXT" NAME="MULTIPLIER"></INPUT><P> <INPUT TYPE="SUBMIT" VALUE="Submit"> <INPUT TYPE="RESET"></FORM> </BLOCKQUOTE></BODY></HTML>

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

Das Servlet

Retrieves the user dataLooks up the session beanPasses the data to the session beanUpon 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

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

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

... }}

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

doGet Methode

Eingabe: request und response ObjektRequests repräsentieren die Eingabe vom

BrowserResponses repräsentieren einen

Ausgabekanal zum BrowserAufgaben:

Finden des Home-Interfaces des Anwendungsobjekts

Aufruf der Methode calcBonus Generieren des Antwort-HTML-Seite

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

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("<HTML><HEAD><TITLE>") out.println(title); out.println("</TITLE></HEAD><BODY>");

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

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

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

doGet Methode (Ausschnitt)

//Display Dataout.println("<H1>Bonus Calculation</H1>");out.println("<P>Soc Sec: " + socsec);out.println("<P>Multiplier: " + multiplier);

out.println("<P>Bonus Amount: " + calc);out.println("</BODY></HTML>");out.close();}

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

Erstellung der Session Bean

Zustandlose Bean reicht ausCalcBean.javaCalc.javaCalcHome.javain .../J2EE/Beans

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

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

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

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

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

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

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

Übersetzung von Session Bean und Servel

#!/bin/shcd .../J2EEJ2EE_HOME=.../J2EE/j2sdkee1.2.1CPATH=.:$J2EE_HOME/lib/j2ee.jarjavac -d . -classpath "$CPATH" Beans/CalcBean.java Beans/CalcHome.java Beans/Calc.java

cd .../J2EE/ClientCodeJ2EE_HOME=.../J2EE/j2sdkee1.2.1CPATH=.:$J2EE_HOME/lib/j2ee.jar:/home/monicap/J2EEjavac -d . -classpath "$CPATH" BonusServlet.java

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

Starten des Applikationsservers

j2sdkee1.2.1/bin/j2ee -verbose

deploytool Fenster für J2EE Applications und Komponenten Inspektorfenster für Information über ausgewählte

Applikation oder Komponenten Server-Informationsfenster für installierte

Applikationen

... und des Deploy-Tools

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

Deploy-Tool

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

Zusammenbau der Applikation

Erzeugen eines J2EE-Applikation (BonusApp.ear).

Erzeugen einer Enterprise Bean (CalcBean.jar).

Erzeugen einer Web Komponente (Bonus.war).

Angabe eines JNDI Names für die Enterprise bean (calcs).

Angabe eines sog. Root Context für die J2EE-Applikation (BonusRoot).

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

Enterprise Bean

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

Web Komponente

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

JNDI-Eintrag und Root Context

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

Verifikation und Deployment der Applikation

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

Start der ApplikationAnnahme : Web-Server verwendet Port 8000

(ggf. Konfigurierung in .../J2EE/j2sdkee1.2/config)Eingabe der URL

http://localhost:8000/BonusRoot/bonus.htmlin einem Brower

Ausgabe erfolgt in neuer HTML-Seite Bonus Calculation Soc Sec: 777777777 Multiplier: 25 Bonus Amount 2500.0

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

Diskussion Die EJB-Architektur befindet sich zur Zeit in der

Entwicklung Es wurde in dieser Vorlesung ein grober Eindruck der

Ziele und wesentlichen Ideen vermittelt, und ... es wurden die grundlegenden Entwicklungsschritte

für einer N-Tier-Anwendung erläutert

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

Und beim nächsten Mal:

TransaktionsmanagementSecurityPersistenzund eventuell etwas über Lastverteilung

(load balancing)