EJB-Technologie

Werbung
Enterprise Java Beans
 Was sind Enterprise JavaBeans?
 Historie
 Motivation
 Architektur
 Konstruktion eines Enterprise JavaBeans
 Zusammenspiel mit anderen Architekturen
28.06.1999
EJB, Norbert Schuler
1
Was sind Enterprise JavaBeans?
 Industriell unterstützte serverseitige Komponentenarchitektur für
die Java-Plattform
 über 40 Softwareentwickler haben Ihre Unterstützung für EJB
Technolgie in Ihren Produkten zugesagt
 EJB ist kein Produkt, sondern eine Spezifikation, die die Architektur
der EJB-Komponenten und Schnittstellen zwischen EJB-Server und
EJB-Komponenten definiert
 die Spezifikation wird von SUN entwickelt - dies soll aber in
Kooperation mit dem Feedback der industriellen Partner und der
Öffentlichkeit geschehen
28.06.1999
EJB, Norbert Schuler
2
Historie
 Erste Spezifikation 1.0 herausgegeben von SUN am 24. März 1998
 erste Produkte im frühen Sommer 1998 herausgebracht
 erste größere Produkte (EJB-Server) jetzt verfügbar
 EJB-Deployathon Event auf der JavaOne‘99 Konferenz (15-18 Juni)
 anhand einer Beispielanwendung (Car Shipping) wird bei fertigen EJBServer-Implementation demonstriert, ob und wie gut sie die EJBSpezifikation (nur 1.0 erforderlich) erfüllen
http://java.sun.com/features/1999/06/ejbdeploy.html
 EJB Spezifikation 1.1 Public Draft 2 am 24. Juni herausgegeben
28.06.1999
EJB, Norbert Schuler
3
Motivation
 Client/Server Modelle: „two-tier“ entwickelten sich zu „three-tier“
(oder „multi-tier“) Modellen
 Konzentration der fachlichen Anwendungslogik („business logic“) in
„middle-tier“ mit unterliegenden Diensten für die Infrastruktur und
client-seitigen Applikationen für die Benutzerschnittstelle
 aus Zusammenschluß von drei Entwicklungskonzepten bildete SUN
den EJB Standard
 serverseitige Anwendungen in Java (wie mit Servlets eingeleitet)
 Konnektoren zu bestehenden Enterprise Systemen (wie z.B. mit JDBC
für Datenbanken)
 modulare, einfach zu verwendene Komponenten (wie bei JavaBeans)
 Skalierbarkeit, einfache Entwicklung, Verwendung, Pflege und
WORA (write once, run anywhere) für die Anwendungslogik
28.06.1999
EJB, Norbert Schuler
4
Architektur
 EJB- Architektur: Standardarchitektur für Entwicklung von fachlicher
Anwendungslogik in „multi-tier“ Anwendungen als wiederverwendbare
Komponenten
 Teile der Architektur und deren Aufgaben
 EJB Server
kapselt die vorhandenen Systeme und Resourcen, um fundamentale Dienste
in einer standardisierten Schnittstelle für die Beans anzubieten
 EJB home interface
ermöglicht Zugriff auf Dienste zum Lebenszyklus eines Beans
nur für entity-beans: gibt Methoden zum Auffinden von Exemplaren an
 EJB remote interface
deklariert Methoden für fachlichen Zugriff auf das Beans
28.06.1999
EJB, Norbert Schuler
5
Architektur
 EJB Komponenten (die eigentlichen Beans)
Implementation von Methoden korrespondierend zum home interface
Implementation von einfachen Callback-Interfaces zur Unterstützung der
von Container zur Verfügung gestellten Dienste
Implementation fachliche Anwendungslogik nach remote interface
Session-Beans
• existieren nur für die Dauer einer Sitzung zwischen Client und Server
• eingesetzt für Berechnungen oder Zugriffe auf Datenbanken
Entity-Beans
• bilden Objektrepräsentationen von persistenten Daten
• jedes Exemplar mit Primärschlüssel gekennzeichnet
• können Ihre Persistenz selbst verwalten oder Container überlassen
 Deployment Descriptor
enthält Einstellungen für Lebenszyklus, Transaktionsverhalten, Sicherheit
und Persistenz des Beans
28.06.1999
EJB, Norbert Schuler
6
Architektur
 EJB Container
implementiert home und remote interfaces des Beans bei Installation des
Beans im Server und veröffentlicht es unter Verwendung von JNDI
hängt sich über Interfaces des Beans zwischen alle Methodenaufrufe des
Clients an ein Bean - dies geschieht transparent für den Client
verwaltet Lebenszyklus der Komponenten, Transaktionen und Sicherheit und
bei Bedarf auch Persistenz nach Angaben im deployment descriptor
verdeckt für den Client die mögliche Trennung von Bean und Client in
verschiedene Umgebungen auf verschiedenen Systemen im Netzwerk
 der Container ist damit nicht unbedingt eine physikalische Einheit
 EJB-Client
findet Beans per JNDI
verwendet Beans über home und remote interfaces
28.06.1999
EJB, Norbert Schuler
7
Konstruktion
 Konstruktion eines
„session beans“
 remote interface
 home interface
 bean class
 deployment descriptor
 client
 Bean ist in jedem EJB-Container/-Server lauffähig, wobei nur der
deployment descriptor und vielleicht der Client-Code angepasst werden
müssen
28.06.1999
EJB, Norbert Schuler
8
Konstruktion: remote interface
 gibt die anwendungsfachliche Schnittstelle des Beans zum Client an
 Implementation des Interface geschieht durch den Container bei
der Installation des Beans im Server, damit sich der Container bei
allen Client-Methodenaufrufen einklinken kann
 der Entwickler muß entsprechende Methoden auch am Bean
implementieren
package ejb.demo;
import java.rmi.RemoteException;
import java.rmi.Remote;
import javax.ejb.*;
public interface Demo extends EJBObject, Remote {
public String demoSelect() throws RemoteException;
}
28.06.1999
EJB, Norbert Schuler
9
Konstruktion: home interface
 anhand des home interface kann der Container ein neues Bean auf
Geheiß des Clients erzeugen
 Implementation des Interface geschieht ebenfalls durch den
Container bei der Installation des Beans im Server, so daß sich der
Container bei allen Client-Methodenaufrufen einklinken kann
package ejb.demo;
import
import
import
import
javax.ejb.*;
java.rmi.Remote;
java.rmi.RemoteException;
java.util.*;
public interface DemoHome extends EJBHome {
public Demo create() throws CreateException, RemoteException;
}
28.06.1999
EJB, Norbert Schuler
10
Konstruktion: bean class
package ejb.demo;
import
import
import
import
javax.ejb.*;
java.io.Serializable;
java.util.*;
java.rmi.*;
public class DemoBean implements SessionBean {
 Implementation der durch die EJB-Spezifikation vorgegebenen
Schnittstellen für ein Bean
// Implement the methods in the SessionBean interface
public void ejbActivate() { ... }
public void ejbRemove() { ... }
public void ejbPassivate() { ... }
// Sets the session context. @param SessionContext
public void setSessionContext(SessionContext ctx) { ... }
28.06.1999
EJB, Norbert Schuler
11
Konstruktion: bean class
 wenn die Methode create() im home interface aufgerufen wird,
erzeugt der Cointainer ein Bean und ruft daran die folgende
Methode auf
public void ejbCreate () { ... }
 die eigentliche Implementation der Anwendungslogik („business
logic“) wie auch schon im remote interface angegeben
public String demoSelect() throws RemoteException {
return("hello world");
}
}
28.06.1999
EJB, Norbert Schuler
12
Konstruktion: deployment descriptor
 Zur Erinnerung der Begriffsbildung:
 deployment: Installation eines Enterprise JavaBeans in einen Enterprise
JavaBeans Container, dabei werden u.a. die Klassen zur Implemention
des home und remote interfaces erzeugt
 deployment descriptor: enthält Einstellungen für Lebenszyklus,
Transaktionsverhalten, Sicherheit und Persistenz des Beans, nach
denen der Container das Bean verwaltet
 Es gibt keinen vorgeschriebenen Weg, den deployment descriptor
zu erzeugen, dies geschieht nach der jeweiligen Implemention des
EJB Servers/Containers
 Anpassungen notwendig bei Wechsel des EJB-Servers
28.06.1999
EJB, Norbert Schuler
13
Konstruktion: client
package ejb.demo;
import
import
import
import
javax.ejb.*;
javax.naming.*;
java.rmi.*;
java.util.Properties;
public class DemoClient {
public static void main() {
try {
 Erzeugung eines Kontext für JNDI
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.T3InitialContextFactory");
p.put(Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx = new InitialContext(p);
 hier ist der Client-Code abhängig vom verwendeten EJB-Server und
muß bei einem Wechsel angepaßt werden
28.06.1999
EJB, Norbert Schuler
14
Konstruktion: client
 Lookup des home interface per JNDI
DemoHome dhome = (DemoHome) ctx.lookup("demo.DemoHome");
 Erzeugung eines Exemplars des JavaBeans durch den Container
anhand der create()-Methode des home interface
Demo demo = dhome.create();
 Aufruf der Anwendungslogik im JavaBeans durch den Container
anhand der Schnittstelle im remote interface
System.out.println("The result is " + demo.demoSelect());
}
catch (Exception e) { System.out.println(" => Error <="); e.printStackTrace(); }
}
}
28.06.1999
EJB, Norbert Schuler
15
Zusammenspiel mit anderen Architekturen
 EJB und Corba
 EJB soll Corba jetzt und in Zukunft unterstützen
 Beans remote und home interfaces basieren auf RMI und können daher
mit CORBA Objekten über RMI/IIOP (RMI Adaption von SUN/IBM, die
das IIOP Protokoll erfüllt) zusammenarbeiten
 Für die EJB API hat SUN eine standardisierte Abbildung auf CORBA IDL
geschaffen
 JTA (für Transaktionsverwaltung) kann leicht als Schicht über OMG OTS
gelegt werden
 Transaktionen können vom Container, aber auch vom Client oder
Beans selbst verwaltet werden, die dann JTA verwenden können
 Persistenz kann vom Container oder Beans selbst verwaltet werden,
welches dann JDBC/JSQL verwenden kann
28.06.1999
EJB, Norbert Schuler
16
Herunterladen