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