Enterprise JavaBeans Architektur Folien zum IFC-Vortrag am 20.12.2000 Java 2 Enterprise Edition – Überblick 1/2 JDBC (Java Database Connectivity) RMI (Remote Method Invocation) JNDI (Java Naming and Directory Interface) Java IDL / CORBA (Interface Description Language / Common Object Request Broker Architecture) 20.12.2000 ©2000, Elmar Seestädt 2 J2EE-Überblick 2/2 JMS (Java Message Service) JTA (Java Transaction API) Java Servlets / JSP (Java ServerPages) EJB (Enterprise JavaBeans) 20.12.2000 ©2000, Elmar Seestädt 3 Was sind Enterprise JavaBeans Verteiltes Komponenten Modell JavaBeans als RMI-Remote Objekte Können die Vorteile des Frameworks nutzen Transaktionen Persistenz Sicherheit Resourcen-Pools Andere Java-API‘s Brauchen eine Laufzeitumgebung (EJBContainer) 20.12.2000 ©2000, Elmar Seestädt 4 EJB-Container Dient als Laufzeitumgebung für EJB Sun liefert nur eine Referenzimplementation Hersteller ist verpflichtet alle Zusagen für EJB‘s einzuhalten -> Kompatibilitätslogo Hersteller darf sog. Value-added-features einbauen BEA Weblogic Server, EnHydra Open Source Projekt -> Kompatibilitätsprobleme Einige Details sind nicht standardisiert: z.B. Laden des Datenbanktreibers 20.12.2000 -> Herstellerspezifisch ©2000, Elmar Seestädt 5 Beantypen Entity Beans Session Beans Persistenz Business Methoden Finder Methoden PrimaryKey Container Managed Persistence (CMP) Bean Managed Persistence (BMP) 20.12.2000 Überdauern nur eine Benutzersitzung Applikations Logik Statefull Session Beans Stateless Session Beans ©2000, Elmar Seestädt 6 Session Beans Statefull Stateless Haben über Methodenaufrufe hinweg einen Zustand Sind für eine Sitzung spezifisch Z.B. Abwicklung eines Workflows Z.B. Shopping Cart 20.12.2000 Speichern keinen Zustand Vergleichbar mit statischen Methoden einer Klasse Eine Bean kann von verschiedenen Benutzern gleichzeitig genutzt werden Z.B. Druckdienste anbieten ©2000, Elmar Seestädt 7 Home Interface Factory zum erzeugen von Instanzen Namenskonvention: Extends EJBHome DeinBeanNameHome.java public EJBMetaData getEJBMetaData() throws java.rmi.RemoteException; public void remove(...) throws java.rmi.RemoteException, RemoveException; Methoden zum Erzeugen von Beans 20.12.2000 public void create(...) throws java.rmi.RemoteException, evtl. andere Exceptions ©2000, Elmar Seestädt 8 Remote Interface Interface für die Remote ausführbaren Methoden Namenskonvention: Extends EJBObject DeinBeanName.java public public public public public EJBHome getEJBHome() throws java.rmi.RemoteException; Handle getHandle() throws java.rmi.RemoteException; Object getPrimaryKey() throws java.rmi.RemoteException; boolean isIdentical(EJBObject obj) throws java.rmi.RemoteException; void remove() throws java.rmi.RemoteException, RemoveException; Enthält weiter die Business und Bean Methoden 20.12.2000 ©2000, Elmar Seestädt 9 Bean Implementation Implementation der aus den Interfaces vorgegebenen Methoden Implementiert die Home/Remote Interfaces nicht direkt, sondern ist nur lose verpflichtet die vereinbarten Methoden zu implementieren Namenskonvention: Implementiert das SessionBean Interface DeinBeanNameBean.java public void ejbActivate() throws java.rmi.RemoteException; public void ejbPassivate() throws java.rmi.RemoteException; public void ejbRemove() throws java.rmi.RemoteException; public void setSessionContext(SessionContext ctxt) throws java.rmi.RemoteException; Enthält zu jeder create(...) eine korrespondierende ejbCreate(...) Methode 20.12.2000 ©2000, Elmar Seestädt 10 CMP-Entity Bean Der EJB-Container übernimmt das Datenbankmapping Auf einfache Datenrelationen beschränkt Man braucht kein SQL selbst schreiben, sondern gibt nur die Datenfeld/Tabellenspalte Relation an Man hat evtl. Probleme bei der Skalierung der Applikation Für die Finder Methoden wird ein herstellerabhängiges kurzes Skript geschrieben 20.12.2000 ©2000, Elmar Seestädt 11 Home Interface Gleiche Konventionen wie bei Session Beans Es gibt sog. Finder Methoden: Mindestens vorhanden: Liefern entweder DeinBeanName oder Enumeration/Iterator Konvention: 20.12.2000 public DeinBeanName findByPrimaryKey(PKType pk) throws java.rmi.RemoteException, FinderException; public ... findByIrgendwas(...) throws java.rmi.RemoteException, FinderException; ©2000, Elmar Seestädt 12 Bean Implementation Implements EntityBean public void ejbLoad() throws java.rmi.RemoteException; public void ejbStore() throws java.rmi.RemoteException; public void ejbActivate() throws java.rmi.RemoteException; public void ejbPassivate() throws java.rmi.RemoteException; public void ejbRemove() throws java.rmi.RemoteException; public void setSessionContext(SessionContext ctxt) throws java.rmi.RemoteException; public void unsetSessionContext() throws java.rmi.RemoteException; Die Methoden aus dem EntityBean Interface werden nur leer implementiert Man braucht nur die Business Methoden implementieren 20.12.2000 ©2000, Elmar Seestädt 13 BMP-Entity Bean Man muß nun selbst das Finden, Laden, Speichern, Erzeugen und Zerstören der Beans kodieren Man kann auch komplexe Datenzusammenhänge modellieren Die entsprechenden SQL Befehle sind alle selbst zu schreiben Bei der Skalierung auftretende Probleme kann man nun durch „schlaueren“ Code umgehen 20.12.2000 ©2000, Elmar Seestädt 14 Bean Implementation Es wird wieder das EntityBean Interface implementiert Die vorgegebenen Methoden werden nicht leer, sondern mit Inhalt implementiert Zu den ejbCreate(...) Methoden gibt es korrespondierende ejbPostCreate(...) Methoden 20.12.2000 ©2000, Elmar Seestädt 15 Implementationstrick Um Implementationsfehler zu umgehen kann man das Remote Interface implementieren. Damit man die EJBObject Methoden nicht implementieren muss gibt es folgenden Trick: EJBObject DeinBeanNameRemote erbt DeinBeanName 20.12.2000 implementiert DeinBeanNameBean ©2000, Elmar Seestädt 16 Literatur Java Enterprise in a Nutshell – David Flanagan Core Servlets and Java ServerPages – Marty Hall Designing Enterprise Applications with J2EE – Nicholas Kassem Enterprise JavaBeans – Richard Monson-Haefel 20.12.2000 ©2000, Elmar Seestädt 17