Komponentenarchitekturen, Enterprise Java Beans (EJB)

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

Object Relational Mapping
Objektrelationales Mapping mit JPA
Java-Servlets Gliederung: Allgemeine Informationen zu Servlets
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil3.
Kritische Betrachtung
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
Internetzugriff mit Strings und Streams
Objektrelationales Mapping mit JPA Working with Persistent Objects Jonas Bandi Simon Martinelli.
Objektrelationales Mapping mit JPA Getting Started Jonas Bandi Simon Martinelli.
Java 2 Enterprise Edition (J2EE)
Java 2 Enterprise Edition (J2EE)
Stephan Bury  Pascal Busch  Bita Gerami
Stefanie Selzer - Pascal Busch - Michael Kropiwoda
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
Java: Grundlagen der Objektorientierung
Vorlesung: 1 Betriebliche Informationssysteme 2003 Prof. Dr. G. Hellberg Studiengang Informatik FHDW Vorlesung: Betriebliche Informationssysteme Teil2.
Business Logik als EJB-Applikation Gruppe pea19 Raed IssaChristian KubanekHonoré Tiako.
Vererbung Spezialisierung von Klassen in JAVA möglich durch
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
PKJ 2005/1 Stefan Dissmann Klassenhierarchie Person Kunde Goldkunde Lieferant Object.
Transaction Script Software Component Technology for Distributed Applications.
Java2 Enterprise Edition René Noack Mai 2003
JAVA RMI.
JDBC -Java Database Connectivity-. 15./22. April 2004JDBC2 JDBC.... verbindet Java-Programme mit SQL-basierten Datenbanken.. liefert eine generische SQL-API.
Remote Methode Invocation (RMI)
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Klassen und Objekte
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.
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)
JDBC: JAVA Database Connectivity
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einführung Servlets/JSPs
20:00.
Wir bauen uns eine Webapplikation!
Applets Java für’s Web.
Web Services Die Zukunft netzbasierter Applikationen iternum GmbH Alexanderstraße Frankfurt/Main
1 Sg 3 – JSP - Java Server Pages Softwareengineering Praktikum Java Server Pages Nicole Brandstätter Josef Sturm Karl Streicher.
Software Architektur II
Einführung / Geschichte Einführung / Geschichte Motivation Motivation Beispiel Beispiel Architektur / Komponenten Architektur / Komponenten Konfiguration.
EJB-Applikationsserver
Java und Eclipse.
Aichinger Christian, Strasser Jürgen. Inhalt JSF EJB Praxis - Integration.
Getting Started Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Beschreiben Sie das Szenario wenn ein ORB einen Server aktiviert und eine Objektimplementation aufruft. Activate Server impl_is_ready Activate Object (GetID.
Java Server Pages Sergej Keterling
FIN-IVS Dr.Fritz Zbrog Verteilte Systementwicklung EJB Tutorial Was wird für EJB-Entwicklung benötigt ? J2EESDK 1.4 (software developement kit)
Esprit Database Suite Eine leistungsfähige Java-Persistzenzschicht zur einfachen Programmierung von Datenbankapplikation.
Symmetrische Blockchiffren DES – der Data Encryption Standard
Referent: Stephan Metzler
JavaServer Faces Urs Frei. Inhalt JSF Funktionsweise Rückblick JSP Bestandteile von JSF So einfach ist die Anwendung (Beispiel) Eclipse im Einsatz (Entwicklungsumgebung)
Einführung in Web Services Web Services in der Praxis
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
1 Medienpädagogischer Forschungsverbund Südwest KIM-Studie 2014 Landesanstalt für Kommunikation Baden-Württemberg (LFK) Landeszentrale für Medien und Kommunikation.
J2EE-Motivation(I) Anforderungen an heutige Software u.a.:
Web Services Spezielle Methoden der SWT Liste V – WS 2008/2009 Christian Boryczewski.
Rusch Philipp, Spiegel Philipp, Sieber Michael, Ucar Sahin, Wetzel Markus.
© 2012 TravelTainment Einführung in Enterprise JavaBeans Seminarvortrag von Ralf Penners Folie 1 von 34.
Verteilte Anwendungen: J2EE
 Präsentation transkript:

Komponentenarchitekturen, Enterprise Java Beans (EJB) Vorlesung „Informationssysteme: Neuere Konzepte“ Web & Datenbanken Komponentenarchitekturen, Enterprise Java Beans (EJB) Michael Klein, 23.06.2005 Teilweise basierend auf Folien von Daniel Pfeifer, IPD

Motivation für EJB Große Geschäftsanwendung: z.B. Banksystem Früher: Großes, monolithisches System Heute: Verteilte, webbasierte Architektur Klient Klient Klient Server Server DB Um welche Probleme müssen wir uns kümmern?

Infrastrukturelle Probleme in verteilten Systemen Entfernte Methodenaufrufe Lastbalancierung Transparentes Failover (Unmerkliche Umleitung eines Klienten auf einen anderen Server im Fehlerfall) Festschreibung von Geschäftsdaten Transaktionsverwaltung Dynamische Softwareupdates Logging Mehrfädrigkeit (Multithreading) Resource pooling Sicherheit Caching  Middleware Allg.: Schwierig, aufwändig zu programmieren

Idee: Server für Middlewaredienste Server, der diese Middlewaredienste anbietet: Applicationserver Applikation = Code, der in der Laufzeitumgebung des Applicationservers abläuft  Divide and conquer: Trenne infrastrukturelle Aspekte aus dem Anwendungscode und überlasse sie dem Applicationserver

Weitere Idee: Komponenten Idee: Zerlege Anwendung in wieder verwendbare Komponenten Komponente: Stück Software, welches eine wohldefinierte Schnittstelle implementiert.  keine gesamte Anwendung

Komponente – Beispiel (1) Preis-Komponente für Computerhardware Input: Menge von Produkten Output: Endpreis calculate Teilprobleme: Basispreis Mengenrabatte Bundle-Rabatte Sonderpreis Steuern Porto ...

Komponente – Beispiel (2) Preiskomponente auch für andere Gebiete sinnvoll Z.B. bei Autoherstellern zur Berechnung von Preisanfragen über das Internet Postfilialen zur Berechnung von Preisen am Schalter Online-Buchhändlern als ein Teil eines komplexeren Workflows Kapselung der Logik als wieder verwendbare Komponente Entstehung eines Komponentenmarktplatzes

Komponentenarchitektur Satz von Vereinbarungen zwischen Komponente und Applikationsserver, in dem sie läuft ApplicationServer Komponente Vereinbarte Schnittstelle (spezifiziert durch Komponentenarchitektur)

EJB als Komponentenarchitektur Enterprise Java Beans (EJB): Komponentenarchitektur für serverseitige Javakomponenten Enterprise Bean: Eine EJB-Komponente „deployable“ Können in Applikationsserver geladen und ausgeführt werden Vorteile von EJB: Von Industrie standardisiert EJB-Spezifikation ist frei erhältlich (650-seitiges PDF-File) Schnellere Applikationserstellung

Warum Java? Trennung von Interface und Implementierung Sicherheit Keine Zeiger Keine Speicherlöcher Threadverwaltung Große Klassenbibliothek Plattformübergreifend

Andere Komponentenarchitekturen Microsoft .NET Common Object Request Broker Architecture (CORBA) Sun Open Net Environment (ONE)

Aufgaben von EJBs Ausführung von Geschäftslogik Steuerberechnung Einkaufwagen Testen von Authentifizierung, Autorisierung Senden von Bestätigungsmails Zugriff auf Datenbanken Eintragen einer Buchbestellung Überweisen von Geld zwischen Konten Anfragen einer Fehlerdatenbank Zugriff auf externe Systeme SAP R/3, COBOL-Anwendung etc.

Wer ruft EJBs auf? EJBs sind keine GUI-Komponenten! Dynamisch erzeugte Webseiten Servlet JSP Rich Clients Java Applet Anwendungsprogramm Als Webservice SOAP, UDDI, WSDL Komponente

Rollen beim Einsatz von EJBs Tools Tool Provider Application System EJBs Application Assembler Deployer System Administrator EJ Bean Provider EJB Server EJB Server Provider

EJB und J2EE (Java 2 Enterprise Edition) J2EE ist eine Ansammlung von Java- Technologien bzw. Standards, die das Komponentenmodell unterstützen  Spezifikation, kein Produkt! Sun liefert zum Teil Implementierungen oder definiert Standards, die von anderen Herstellern zu erfüllen sind EJB ist ein Teil von J2EE mit einer Referenzimplementierung von Sun http://java.sun.com/j2ee

Ausschnitt aus den J2EE-Technologien (1) JSP, Java-Servlet (bekannt) JDBC (bekannt) Java Transaction API (JTA/JTS) für verteilte logische Transaktion Java Naming and Directory Service (JNDI): Verzeichnisdienst für Java Remote Method Invocation (RMI): entfernter Methodenaufruf über Prozessgrenzen hinweg, inzwischen mit CORBA-Integration (RMI-IIOP)

Ausschnitt aus den J2EE-Technologien (2) EJB JavaMail Java Messaging Service (JMS): asynchrones, zuverlässiges Verschicken von Nachrichten in Objektform Java Connector Architecture (JCA) zur standardisierten Integration von ERP-Systemen wie SAP Java API for XML Parsing (JAXP) Java Authentication and Authorization Service (JAAS)  Zu jeder dieser Technologien gibt es eine API, eine Spezifikation und mind. eine Implementierung

Grundsätzliche Architektur von EJB (1) EJB: Menge von Java-Klassen (3 oder 5) mit genormter Struktur Ausführung dieser Klassen kommen in einem EJB- Containern EJB-Container: Repräsentation eines Applikations- Servers Klienten können über/durch den EJB-Container auf die EJBs zugreifen und deren Methoden aufrufen Die Methodenaufrufe erfolgen üblicherweise über RMI (Remote Method Invocation) Der EJB-Container nimmt den Aufruf entgegen und delegiert ihn an eine entsprechende EJB

Grundsätzliche Architektur (2)

Grundsätzliche Architektur (3) Delegationsprinzip der Container erhält Kontrolle über die EJB-Aufrufe transparent zusätzliche Funktionalität bereitstellbar: Sicherheit Rechteverwaltung Transaktionalität Persistenz Lebenszyklusverwaltung von EJBs Nebenläufigkeit von Beans

2 Arten von EJBs Session Beans: Realisieren Workflows und Dienste Können für statische Funktionalität benutzt werden Mit Zustand (stateful) oder zustandslos (stateless) Nicht persistierbar Bsp: Kreditkartenautorisierer, DNA-Sequenzer Entity Beans Repräsentieren Zustand und Verhalten realer Objekte (zum Beispiel eines Artikels) Werden persistent in einer Datenbank gespeichert Bsp: Bankkonto, Bestellung, Produkt, DNA-Strang

Aufgabe: Finden von Session und Entity Beans Bei der Warenkorbfunktionalität eines Webshobs soll der Kunde die Möglichkeit haben, seine aktuellen ausgewählten Artikel sowie alte Aufträge einsehen zu können. Die Anzeige kann in einer gewünschten Währung erfolgen und berechnet automatisch die anfallenden Portokosten. Nach einem Klick auf „Abschicken“ erhält der Kunde ein persönliches Bestätigungsschreiben und seine Bestellung wird in das System aufgenommen. Er wird anschließend auf eine Seite geleitet, auf der er weitere passende Angebote erhält.

Klienteninteraktion mit Beans Anwendung von Geschäftspartnern Browser HTML SOAP Java-Applikation Java-Applet C++ Client Servlet JSP Webserver CORBA/IIOP RMI RMI EJB Session Bean EJB Session Bean EJB Entity Bean ApplicationServer

Eine EJB im Detail (1) 3 (Java-) Klassen bzw. Interfaces Die Bean-Klasse: Funktionalität der Bean (wichtigste Klasse) Das Home-Interface: Schnittstelle zum Erzeugen, Finden und Löschen von EJBs durch Klienten Das Remote-Interface stellt die „öffentlichen“ Methoden aus der Bean-Klasse den Klienten (für den Aufruf über RMI) zur Verfügung Analog zu Home- und Remote-Interface können noch zwei weitere Klassen (Local-Home- und Local- Remote-Interface) für nicht-RMI-Zugriffe auf Beans hinzukommen...

Eine EJB im Detail (2)

EJB-Object EJB-Container = Indirektionsstufe zwischen Klient und Bean Aufruf der Bean nie direkt, sondern immer über EJB-Object EJB-Object weiß bescheid über Netzwerk Transaktionsschutz Sicherheit EJB-Object = Teil des Kontainers, wird automatisch vom Server-Provider aus der Enterprise Bean erzeugt.

Delegation über EJB-Object

Klientenzugriff auf eine EJB (1) Die Klient besorgt sich Zugriff auf einen als bekannt vorausgesetzten JNDI-Server Über JNDI (dem Java Verzeichnis-Dienst) sucht (und findet) er das Home-Interface der entsprechenden EJB Möglich, weil das entsprechende EJB-Home-Interface mit einem Namen (einem Java-String) im JNDI- Verzeichnis registriert sein muss. Über das Home-Interface kann man dann EJBs mit speziellen find- und create-Methoden finden bzw. erzeugen. Man erhält dann eine RMI-Referenz auf eine Bean. Die Referenz implementiert das Bean-Remote-Interface

Klientenzugriff auf eine EJB (2)

Beispiel EJB: Hello World Komplett lauffähiger Code für EJB und aufrufenden Klient Implementiert als stateless Session-Bean (zustandslos, nicht persistent) Liefert den String „Hello, World!“ an den Klienten, dieser gibt in auf der Konsole aus

Hello World: Hello.java Remote Interface package hello; /** * This is the HelloBean remote interface. */ public interface Hello extends javax.ejb.EJBObject { * The one method - hello - returns a greeting to the client. public String hello() throws java.rmi.RemoteException; }

Hello World: HelloBean.java package hello; import javax.ejb.SessionContext; // Implemented as stateless session bean. public class HelloBean implements javax.ejb.SessionBean { // EJB-required methods public void ejbCreate() {} public void ejbRemove() {} public void ejbActivate() {} public void ejbPassivate() {} public void setSessionContext(SessionContext ctx) {} // Business methods public String hello() return "Hello, World!"; }

Hello World: HelloHome.java Home Interface package hello; /** * One create() method is in this Home Interface, which * corresponds to the ejbCreate() method in HelloBean. */ public interface HelloHome extends javax.ejb.EJBHome { /* * This method creates the EJB Object. * * @return The newly created EJB Object. Hello create() throws java.rmi.RemoteException, javax.ejb.CreateException; }

Hello World: HelloClient.java package hello; import javax.naming.Context; import javax.naming.InitialContext; import java.util.Properties; public class HelloClient { public static void main(String[] args) throws Exception { Properties props = System.getProperties(); // Obtain the JNDI initial context. Context ctx = new InitialContext(props); // Get a reference to the hello home object Object obj = ctx.lookup("ejb/local/examples/HelloWorld"); HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject.narrow(obj, HelloHome.class); // Creat an instance of the hello ejb through hello home Hello hello = home.create(); // Call the hello() method on the EJB object. System.out.println(hello.hello()); // Remove the ejb instance. home.remove(); } }

Besonderheiten Hello, HelloBean und HelloHome erweitern jeweils Standard-EJB-Schnittstellen (nämlich EJBObject, SessionBean bzw. EJBHome Notwendig damit der EJB-Container die EJB gemäß der Spezifikation verwalten kann! Die Methoden ejbCreate(), ejbRemove(), ejbActivate(), ejbPassivate() werden vom EJB-Container als „Callbacks“ beim Lebenszyklusmanagement aufgerufen Die EJB hat dann die Möglichkeit noch Aktivitäten auszuführen, bevor der Container in den Lebenszyklus eingreift.

Lebenszyklus einer Bean Um Ressourcen (wie etwa Hauptspeicher) zu schonen kann und darf der Container Beans auslagern (zum Beispiel serialisiert auf die Festplatte schreiben) und später – wenn notwendig – wieder einlagern Bean-Instanzen können auch in Pools vorgehalten werden um dann effizient aktiviert zu werden (instance pooling) Die Methoden der vorigen Folien unterstützen diese Vorgänge von Seiten der Bean

Lebenszyklusdiagramm für Stateful Session-Beans

Installation von Beans Beans sollen installiert (deployed) werden können, während der EJB-Server arbeitet (hot deployment) Das ist wichtig, wenn der EJB-Server unternehmenskritische Anwendungen birgt (Beispiel Bank-Server, Einkaufsportal...)  Deployment ist eigenständiger Prozess Funktionsweise hängt vom EJB-Server-Produkt ab (bei JBoss: entspr. Dateien in ein besonderes Verzeichnis kopieren...)

Format für Bean-Deployment Ist durch den EJB-Standard spezifiziert Die kompilierten Klassen einer EJB werden in ein Java-Archiv gepackt (.jar Datei) Zusätzlich: Meta-Informationen über die EJB in einer XML-Datei – dem Deployment Descriptor .jar und xml Datei werden (mit einigen weiteren Dateien) zu einem Enterprise Archiv (.ear Datei ähnlich zu .jar Datei) geschnürt. Diese Datei wird dann „deployed“.

Deployment Deskriptor Enthält viele wichtige Infos für den EJB- Container, damit dieser weiß, wie er eine EJB behandeln soll  Geht nicht notwendig aus den Klassen der EJB hervor U.a. beschreibt der Deskriptor wie eine Bean zu behandeln ist bzgl. Transaktionalität Zugriffrechten und Schutz Persistenz Failover (Verhalten beim Absturz der EJB-Servers) Nebenläufigkeit Struktur eines Deskriptors ist Teil des EJB-Standards

Der HelloWorld-Deskriptor <ejb-jar> <enterprise-beans> <session> <ejb-name>Hello</ejb-name> <home>hello.HelloHome</home> <remote>hello.Hello</remote> <local-home>hello.HelloLocalHome</local-home> <local>hello.HelloLocal</local> <ejb-class>hello.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans> </ejb-jar>

EJB und Datenbanken

Entity Beans (1) Repräsentieren persistente Zustände Der Standard für Entity-Beans ist auf ein (simples) Objekt-Relationales-Mapping ausgelegt, d.h. Speicherung in relationaler DB Andere Persistenztechniken möglich

Entity Beans (2) Persistenz kann vom EJB-Container (transparent) erledigt werden  CMP – container managed persistence ... oder von Hand in der Entity Bean programmiert werden  BMP – bean managed persistence Im 2. Fall kann man zum Beispiel JDBC verwenden

Zur Verdeutlichung...

CMP versus BMP Wie gesehen: bei BMP muss man O/R Mapping für jede Klasse „von Hand“ programmieren Man muss aber nicht JDBC verwenden Bei CMP über nimmt der Container die Implementierung/Umsetzung der ejbLoad(), ejbStore(), ejbCreate(), ejbRemove() – Methoden Detaillierte Mapping-Infos kommen in den Deployment-Deskriptor und in container- spezifische XML-Dateien

Was sind also EJBs? Was sind Enterprise Java Beans (EJB)? Serverseitige Komponentenarchitektur zur einfachen Erstellung von komponentenbasierten Anwendungen, die verteilt skalierbar zuverlässig sicher sind, ohne die komplexen Infrastrukturaufgaben selbst programmieren zu müssen.  Bereitstellung der Infrastruktur durch industrielle Applicationserver.

Zusammenfassung Delegation Komponente Middleware EJB-Object Home vs. Remote Interface EJB-Kontainer Komponentenarchitektur CMP vs. BMP J2EE Applicationserver Session-Bean vs. Entity Bean

Literatur Buch Ed Roman, Scott Ambler, Typer Jewell Mastering Enterprise Java Beans (2nd Edition) Wiley ISBN 0-471-41711-4 Auch kostenlos im Internet herunterladbar (Anmeldung erforderlich): http://www.theserverside.com/books/wiley/masteringEJB/

ANHANG (für Interessierte)

Entity Bean – Beispiel Code Repräsentiert Personen-Objekte mit Namen und Id (Schlüssel) BMP Daten über JDBC in rel. Datenbank gespeichert Neben Standard Bean-Klassen gibt es noch die PersonPK (=Primary Key) die den DB-Schlüssel Id repräsentiert DB besteht aus (einziger Tabelle) Person(id, ownerName)

Person.java Remote Interface package examples; import javax.ejb.*; import java.rmi.RemoteException; public interface Person extends EJBObject { public String getName() throws RemoteException; public void setName(String name) throws RemoteException; public String getID() throws RemoteException; public void setID(String id) throws RemoteException; }

PersonHome.java Home Interface package examples; import javax.ejb.*; import java.util.Collection; import java.rmi.RemoteException; public interface PersonHome extends EJBHome { public Person create(String id, String ownerName) throws CreateException, RemoteException; public Person findByPrimaryKey(PersonPK key) throws FinderException, RemoteException; }

PersonPK.java Bean PK = Primary Key package examples; import java.io.Serializable; public class PersonPK implements java.io.Serializable { public String personID; public PersonPK(String id) { this.personID = id; } public PersonPK() {} public int hashCode() { return personID.hashCode(); } public boolean equals(Object person) { return ((PersonPK)person).personID.equals(personID); } PK = Primary Key

PersonBean.java (1) Bean package examples; import java.sql.*; import javax.naming.*; import javax.ejb.*; import java.util.*; public class PersonBean implements EntityBean { protected EntityContext ctx; private String id; // PK private String ownerName; public AccountBean() {} public void setOwnerName(String name) { ownerName = name; } public String getOwnerName() { return ownerName; } public String getID() { return id }; public void setID(String id) { this.id = id; }

PersonBean.java (2) public void ejbRemove() throws RemoveException { PersonPK pk = (PersonPK) ctx.getPrimaryKey(); String id = pk.id; PreparedStatement pstmt = null; Connection conn = null; try { conn = getConnection(); pstmt = conn.prepareStatement("delete from persons where id = ?"); pstmt.setString(1, id); if (pstmt.executeUpdate() == 0) { throw new RemoveException("Person " + pk + " failed remove."); } } catch (Exception ex) { throw new EJBException(ex.toString()); } finally { /* ... close JDBC resources... */ } }

PersonBean.java (3) public void ejbLoad() { PersonPK pk = (PersonPK) ctx.getPrimaryKey(); String id = pk.id; PreparedStatement pstmt = null; Connection conn = null; try { conn = getConnection(); pstmt = conn.prepareStatement( "select ownerName from persons where id = ?"); pstmt.setString(1, id); ResultSet rs = pstmt.executeQuery(); rs.next(); ownerName = rs.getString("ownerName"); } catch (Exception ex) { throw new EJBException("Person " + pk + " failed to load.", ex); } finally { // ... close JDBC resources... } }

PersonBean.java (4) public PersonPK ejbFindByPrimaryKey(PersonPK key) throws FinderException { PreparedStatement pstmt = null; Connection conn = null; try { conn = getConnection(); pstmt = conn.prepareStatement("select id from persons where id = ?"); pstmt.setString(1, key.toString()); ResultSet rs = pstmt.executeQuery(); rs.next(); return key; } catch (Exception e) { throw new FinderException(e.toString()); } finally { // ... close JDBC resources... }

PersonBean.java (5) public void ejbActivate() {} public void ejbPassivate() {} public void setEntityContext(EntityContext ctx) { this.ctx = ctx; } public void unsetEntityContext() { this.ctx = null; } public void ejbPostCreate(String accountID, String ownerName) {} public void ejbStore() { // ... Ähnlich wie ejbLoad ... } public PersonPK ejbCreate(String id, String ownerName) throws CreateException { // ... Ähnlich wie ejbFindByPrimaryKey ...

PersonBean.java (6) public Connection getConnection() throws Exception { try { Context ctx = new InitialContext(); javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup("java:comp/env/jdbc/ejbPool"); return ds.getConnection(); } catch (Exception e) { throw e; }

Ok – eine Menge Code... Das meiste sind JDBC Zugriffe die Tabellenzeilen auf EJB-Felder abbilden Noch mehr Callbacks als bei Session Beans: PersonBean erweitert javax.ejb.EntityBean und muß nun ejbLoad() zum Laden der Bean aus der DB und ejbStore() zum Speichern den Bean in DB implementieren sowie einige weiter Methoden... ejbFind...() Methoden dienen zum Finden von Enitity Beans über Suchkritierien Es werden dann (meist) Kollektionen von Schlüsseln (wie etwa PersonPK) zurückgegeben.