Enterprise Java Beans

Ähnliche Dokumente
Web 2.0 Software-Architekturen

Web 2.0 Software-Architekturen

Softwareentwicklung mit Enterprise JAVA Beans

Der lokale und verteilte Fall

Enterprise Java Beans

J2EEKurs. Enterprise JavaBeans Einführung. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany, Universität Freiburg, Germany

Entwicklung von Web-Anwendungen auf JAVA EE Basis

5.2 Workshop EJB. Entwicklung von EJB-Anwendungen. Das JOnAS-System

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

4.2 Workshop EJB. Entwicklung von EJB-Anwendungen

EJB jar.xml und Name Service (JNDI)

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Analyse und praktischer Vergleich von neuen Access- Layer-Technologien in modernen Webanwendungen unter Java. Oliver Kalz

Enterprise JavaBeans

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Enterprise Java Beans (EJB)

Mobile und Verteilte Datenbanken

11. Enterprise Java Beans Grundlagen der Programmierung II (Java)

Fujitsu BeanConnect TM V3.0 Software 0 FUJITSU LIMITED 2013

Anwendung eines Enterprise Java Beans

Softwareentwicklung mit Enterprise JAVA Beans

CORBA. Eine kurze Einführung. Common Object Request Broker Architecture. Ying Lu

Übungen zu Softwaretechnik

Erste Erfahrungen mit NSASJ anhand der OmnivoBase Portierung. September 2013

Java 2, Enterprise Edition Einführung und Überblick

Warum EJB Technologie (1)?

Die Programmiersprache Java. Dr. Wolfgang Süß Thorsten Schlachter

Web Services. XML, WSDL, SOAP und UDDI Einblicke und Ausblicke J.M.Joller 1

Java RMI Remote Method Invocation

Enterprise Java Beans

Application Server Application Server: Motivation Application Server: Begriff

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

Aspektorientierte Middleware Florian Wagner

SE2-10-Entwurfsmuster-2 15

-Testen verteilter Anwendungen

Themen. Web Service - Clients. Kommunikation zw. Web Services

CORBA. Systemprogrammierung WS

ORACLE Business Components for Java (BC4J) Marco Grawunder

ObjectBridge Java Edition

Workflow, Business Process Management, 4.Teil

Verteiltes Rechnen. Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff

COMMON OBJECT REQUEST BROKER ARCHITECTURE. Dmytro Pyvovar Otto-von-Guericke Universität Magdeburg

OERA OpenEdge Reference Architecture. Mike Fechner PUG Infotag 19. Mai 05 Frankfurt

J2EE-Praktikum. Enterprise JavaBeans Patterns. Peter Thiemann. J2EE-Praktikum, WS2005/2006. Universität Freiburg

Web-Services Implementierung mit Java

Workshop Java Webentwicklung Tapestry. Ulrich Stärk

Java Beans Enterprise Java Beans. Eine kurze Einführung in die Welt der Bohnen

Workshop Java Webentwicklung Einführung in Hibernate. Ulrich Stärk

J2EEKurs. J2EE eine Plattform für betriebliche Anwendungen. Peter Thiemann. Sommercampus J2EEKurs, Freiburg, Germany,

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Erstellung eines Frameworks für Shop Systeme im Internet auf Basis von Java

Große Übung Praktische Informatik 1

Remote Method Invocation

Architektur des agimatec-validation Frameworks

EJBs und Sicherheit. Vorlesung: Applikationsserver. Prof. Dr. Ch. Reich furtwangen.de furtwangen.

Etablierung serviceorientierter Architekturen mit Web Services

Auszug aus JAX-WS Folien

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

6. Java Java Beans und Enterprise Java Beans

Factory Method (Virtual Constructor)

Beispiel: JavaBeans. Enterprise JavaBeans: Server-Komponenten

Enterprise Java Beans Einführung

Java Enterprise Architekturen Willkommen in der Realität

Gregor Raschke 2008 HIBERNATE. Eine Einführung

Workshop 6. Einführung in die objektorientierte Programmierung. Teil: Java mit BlueJ

Schritt 5: Session Beans

Client/Server-Programmierung

Client/Server-Programmierung

Webservices. 1 Einführung 2 Verwendete Standards 3 Web Services mit Java 4 Zusammenfassung. Hauptseminar Internet Dienste

Jürgen Schwab, debis Systemhaus

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Enterprise JavaBeans Überblick

Next generation open source BPM JBoss jbpm 4. Java Forum Stuttgart

Enterprise JavaBeans Überblick

Java Beans ( )

Architekturen für verteilte Internetdienste

Spring Dynamic Modules for OSGi Service Platforms

Konfigurationslanleitung für J2EE und Eclipse im KBS-Pool

Überblick Produkte. ORACLE AS 10g R3 JAVA Programming. (5 Tage)

Struts 2 Das Imperium schlägt zurück?

Enterprise JavaBeans (mit JBoss)

AVID-Übung 3. EJB mit JBoss und Eclipse. 17. Juni Andreas I. Schmied Abteilung Verteilte Systeme Projektgruppe AspectIX

Spring Dynamic Modules for OSGi Service Platforms

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Application Frameworks

Informationsintegration und Web-Portale. Tutorial: Enterprise Java Beans. Erik Buchmann

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Wiederholung: Beginn

WebService in Java SE und EE

Multimedia im Netz. Wintersemester 2011/12. Übung 10. Betreuer: Verantwortlicher Professor: Sebastian Löhmann. Prof. Dr.

SAP NetWeaver Gateway. 2013

6.9 Java Server Pages

WebSphere Application Server Installation

Folgende Voraussetzungen für die Konfiguration müssen erfüllt sein: - Ein Bootimage ab Version Optional einen DHCP Server.

Softwareentwicklung mit Enterprise JAVA Beans

Integration von Web Services in J EE Anwendungen mit XFire. 1/26 André Janus - Integration von Web Services in J EE Anwendungen mit XFire

Nathan Burgener. Design by Contract. Modul SWE

Transkript:

Enterprise Java Beans Einführung in die J2EE EJB Technologie Prof. Dr. Nikolaus Wulff

Übersicht Client-Server Grundlagen HelloWorld mit RMI und CORBA Struktur einer Client-Server-Architektur EJB Basics und die Java2 Enterprise Edition J2EE HelloWorld mit EJB EJB3.0 und Annotations Prof. Dr. Nikolaus Wulff 2

Client-Server Topologien Server Agent Client Client Client Agent Agent Master Agent Agent Slave Slave Slave Prof. Dr. Nikolaus Wulff 3

Problemstellung Heterogene Plattformen Referenzierung von Objekten an unterschiedlichen Lokationen Speicher Verwaltung Unterschiedliche Programmiersprachen Unterschiedliche Netzwerk Protokolle Persistenz in verteilten Umgebungen Standardisierung Prof. Dr. Nikolaus Wulff 4

Etablierte Standards Socket-Kommunikation - TCP/IP Remote Procedure Call - RPC Low Level Common Object Request Broker Architecture Remote Method Invocation - RMI Enterprise Java Beans - EJB High Level OO Paradigma Java Messaging Service - JMS Distributed Component Object Model - DCOM MicroSoft Prof. Dr. Nikolaus Wulff 5

HelloWorld Pseudo Code Lokaler Methodenaufruf: HelloInterface h = new HelloImpl(); h.sayhello("helloworld"); Remote Methodenaufruf: HelloInterface h = HelloFactory.lookup("myServer","myObject"); h.sayhello("helloworld"); dauert ~ 1-4 NanoSec dauert ~ 5-50 MilliSec!!! Prof. Dr. Nikolaus Wulff 6

RMI Architektur Client Application Remote Interface Remote Object RMI Stub Class Skeleton Class Remote Reference Layer Transport Layer (JRMP) Prof. Dr. Nikolaus Wulff 7

HelloWorld mit RMI RMI Framework generated by RMIC Developer defined Prof. Dr. Nikolaus Wulff 8

Start des Hello Servers public class HelloImpl implements HelloInterface { //... public static void main(java.lang.string[] args) { try { String url = args[0]; // 1. Server Instanz erzeugen System.out.println("Erzeuge Server"); HelloImpl hello = new HelloImpl(); // 2. Server Instanz beim Naming Service bekannt machen System.out.println("Registriere Server "+hello); Naming.rebind(url,hello); } System.out.println("Server "+url+" ready... ); }catch(exception e) { System.err.println(e); e.printstacktrace(); } Prof. Dr. Nikolaus Wulff 9

HelloClient mit RMI public static void main(java.lang.string[] args) { throws Exception { String url = args[0]; // 1. Referenz auf den Server per Naming Service System.out.println("Suche Server "+url); Remote ref = Naming.lookup(url); // 2. Cast auf den gewünschten Typ HelloInterface hello = (HelloInterface) ref; System.out.println("Fand "+hello); // 3. Remote Call ausführen long time = System.currentTimeMillis(); hello.sayhello("hello vom HelloClient "+time); } System.out.println("done..."); Prof. Dr. Nikolaus Wulff 10

CORBA Architektur Client Application CORBA Interface Corba Object (Servant) IDL Stub Class (z.b. Java) ORB (z.b. Visigenic) IDL Beschreibung ORB Interface IIOP TCP/IP IDL Skeleton Class (z.b. C++) ORB (z.b. Iona Orbix) Prof. Dr. Nikolaus Wulff 11

HelloWorld mit CORBA CORBA Framework generated by IDLJ Developer defined Prof. Dr. Nikolaus Wulff 12

HelloClient mit CORBA public static void main(java.lang.string[] args) { throws Exception { String name = args[0]; // 0. Referenz auf ORB Singleton und den NamingService org.omg.corba.orb orb = ORB.init(args,null); NamingContext naming = getnamingcontext(orb); // 1. Lookup mittels NamingService NameComponent[] component= {new NameComponent(name,"")}; org.omg.corba.object ref = naming.resolve(component); // 2. CORBA Cast per narrow mit Helper Klasse HelloInterface hello = HelloInterfaceHelper.narrow(ref); System.out.println("Fand "+hello); } // 3. Remote Call ausführen long time = System.currentTimeMillis(); hello.sayhello("hello vom HelloClient "+time); Prof. Dr. Nikolaus Wulff 13

Was fehlt...? Das RMI und CORBA Beispiel zeigt: Lookup der Remote Objekte per Naming Service einfacher Methodenaufruf des Remote Objektes was fehlt ist die HighLevel Architektur für: Client-Server generell Objekt Lifecycle Session Handling Transaktionen (Two-Phase-Commit) Objektpersistenz und -referenzierung... Prof. Dr. Nikolaus Wulff 14

Von RMI zu EJB Native RMI bietet wenig Unterstützung hinsichtlich C/S-Architekturen CORBA enthält viele Services wie TransactionService SecurityService EventService... Unterstützung der Hersteller war zurückhaltend... Sun legte 1998 mit der EJB1.0 Spezifikation ein neues objektorientiertes Komponentenmodel für verteilte Anwendungen vor, das nahtlos in die Java2 Enterprise Edition (J2EE) integriert ist. Prof. Dr. Nikolaus Wulff 15

EJB Zielsetzung The Enterprise JavaBeans architecture will be the standard component architecture for building distributed object-oriented business applications in the Java programming language. The Enterprise JavaBeans architecture will make it possible to build distributed applications by combining components developed using tools from different vendors. The Enterprise JavaBeans architecture will make it easy to write applications: Application developers will not have to understand low-level transaction and state management details, multi-threading, connection pooling, and other complex low-level APIs. Enterprise JavaBeans applications will follow the Write Once, Run Anywhere philosophy of the Java programming language. An enterprise Bean can be developed once, and then deployed on multiple platforms without recompilation or source code modification. The Enterprise JavaBeans architecture will address the development, deployment, and runtime aspects of an enterprise application s life cycle. Prof. Dr. Nikolaus Wulff 16

EJB Zielsetzung (II) The Enterprise JavaBeans architecture will define the contracts that enable tools from multiple vendors to develop and deploy components that can interoperate at runtime. The Enterprise JavaBeans architecture will be compatible with existing server platforms. Vendors will be able to extend their existing products to support Enterprise JavaBeans. The Enterprise JavaBeans architecture will be compatible with other Java programming language APIs. The Enterprise JavaBeans architecture will provide interoperability between enterprise Beans and Java 2 Platform Enterprise Edition (J2EE) components as well as non-java programming language applications. The Enterprise JavaBeans architecture will be compatible with the CORBA protocols. Prof. Dr. Nikolaus Wulff 17

EJB in a Nutshell EJBs laufen in einem ApplikationsServer und werden von einem EJBContainer verwaltet. EJB Server EJB Container EJB Home Interface Client EJB Remote Interface EJB Bean Prof. Dr. Nikolaus Wulff 18

Die Schnittstellen im Überblick Prof. Dr. Nikolaus Wulff 19

Die EJB1&2.0 Schnittstelle Eine Enterprise JavaBean besitzt für den Client zwei öffentlich sichtbare Schnittstellen: EJB-Home es spezifiziert die Lookup- und Finder-Methoden um eine Referenz auf das Remote Interface zu erhalten EJB-Remote es stellt die eigentliche öffentliche Schnittstelle der EJB da. Hier sind die Business-Methoden der EJB deklariert. Seit EJB 2.1 EJB-Lokal nicht sichtbar für Client! Bietet Klassen auf der Serverseite Zugriff auf die Business-Methoden der EJB ohne Netzwerkzugriff. Prof. Dr. Nikolaus Wulff 20

Der EJB Container Zentraler Bestandteil der EJB Spezifikation ist der EJB Container, er ist zuständig für: Persistenz der EJBs Transaktionen Sicherheitsaspekte Lifecycle und Runtimesupport Ein EJB Container Provider wird den Entwickler mit entsprechenden Tools für das Deployment und Monitoring der EJBs ausstatten. EJB Server und EJB Container Provider sind meist identisch. Die Spezifikation schreibt die API zwischen dem Server und dem Container nicht vor. Prof. Dr. Nikolaus Wulff 21

EJB Rollen Developer / EJB Provider definiert Remote- und Home-Interface und die Implementierung Application Assembler verwendet die EJBs und bindet sie in den Kontext einer Applikation ein Deployer integriert die ejb-jar Archive in einen EJB Server und generiert die serverspezifischen Stub- und Skeltonklassen für die Verteilung. System Administrator administriert Transaction, Security, Container, Server und Resourcen Server Provider und Container Provider Prof. Dr. Nikolaus Wulff 22

EJB im J2EE Model Client Applikationen, Applets, Browser Präsentation JSP, Servlets und andere UI Business Ebene EJBs und JavaBeans Integrations Ebene JMS, JDBC, Connectors und Legacy Resourcen Datenbanken und externe Systeme Benutzer Interaktion Single sign-on,sessionverwaltung, Formatierung und Zustellung Geschäftslogik, Transaktionen, Daten und Services Resource adapters, rule engine und workflow, Altanwendungen Daten und externe Dienste Prof. Dr. Nikolaus Wulff 23

J2EE Architektur Browser HTTP SSL Web Container EJB Container JSP Servlet EJB Application Client Container Application Client, Applet HTTP SSL JMSJNDI JTA Java JDBC Mail RM I- IIOP JAF J2SE JMSJNDI JTA Java JDBC Mail RM I- IIOP JAF J2SE Database JMSJNDI JDBC RMI RM I- IIOP J2SE Prof. Dr. Nikolaus Wulff 24

EJB Typen Es gibt drei Arten von EJBs Session Beans: Sie kapseln Applikationslogik und dienen als Fassade, um die Kommunikation zwischen Client- und Serverkomponenten zu orchestrieren. Sie können mit oder ohne Zustand behaftet sein. Entity Beans: Sie stellen persistente Business Objekte da. Datenbankzugriffe werden in Entity Beans transparent vor dem Client verborgen. Die Persistenz kann automatisch vom Container verwaltet werden, container managed persistence (CMP), oder direkt vom EJB Entwickler per Hand eingebaut werden, bean managed persistence (BMP). Message Beans: Sie sind die EJB Variante für Nachrichtenaustausch nach der JMS Spezifikation. Sie haben kein Home Interface und keinen Zustand. Prof. Dr. Nikolaus Wulff 25

EJB Typen Logische Hierarchie Prof. Dr. Nikolaus Wulff 26

HelloWorld mit EJB EJB Framework Developer defined Prof. Dr. Nikolaus Wulff 27

EJB Client public static void main(java.lang.string[] args) { throws Exception { HelloHome home; String jndiname = args[0]; Context context = new InitialContext(); // 1. Referenz auf den Server per JNDI System.out.println("Suche Server "+jndiname); Object ref = context.lookup(jndiname); // 2. RMI-IIOP Cast auf das HomeInterface home = (HelloHome) PortableRemoteObject.narrow( ref,hellohome.class); // 3. Create Methode zum Erzeugen des EJBObjects HelloInterface hello = home.create(); System.out.println("Fand "+hello); // 4. Remote Call ausführen long time = System.currentTimeMillis(); hello.sayhello("hello vom HelloClient "+time); } Prof. Dr. Nikolaus Wulff 28

Einsatzbereich von EJBs Je nach Aufgabenstellung werden unterschiedliche EJBs verwendet: Stateless SessionBean: Allgemeine Services Statefull SessionBean: Benutzerspezifischer Service, wird häufig zur Transaktionssteuerung der persistenten Objekte verwandt. Entity Bean: Langlebige persistente Objekte verwaltet innerhalb einer Datenbank. Message Bean: Asynchrone Kommunikation. Prof. Dr. Nikolaus Wulff 29

LifeCycle Der EJB-Container übernimmt die EJB Erzeugung, Aktivierung, Passivierung und Vernichtung. Hierzu dienen die Schnittstellenmethoden ejbcreate, ejbactivate, ejbpassivate und ejbremove. Ferner sind im Home Interface noch weitere Finder Methoden vermerkt. Je nach Bean Typ sind unterschiedliche Szenarien vorgesehen. Die EJB Spezifikation schreibt vor, in welcher Reihenfolge diese Methoden vom Container auszurufen sind. Prof. Dr. Nikolaus Wulff 30

Stateless SessionBean Does not Exist ejbremove() Method-Ready Pool Class.newInstance() setsessioncontext() ejbcreate() business method Prof. Dr. Nikolaus Wulff 31

Stateful SessionBean ejbremove() Does not Exist Class.newInstance() setsessioncontext() ejbcreate() instance throws system exception timeout timeout Method-Ready ejbpassivate() ejbactivate() Passive business method Prof. Dr. Nikolaus Wulff 32

EntityBean Does not Exist Object.finalize() unsetentitycontext() ejbselect() ejbpassivate() ejbremove() business method Pooled Ready Class.newInstance() setentitycontext() ejbfind() ejbcreate() ejbpostcreate() ejbactivate() ejbload() ejbstore() BMP Prof. Dr. Nikolaus Wulff 33

Message-Driven Bean Does not Exist ejbremove() Method-Ready Pool Class.newInstance() setmessagedrivencontext() ejbcreate() onmessage() Prof. Dr. Nikolaus Wulff 34

1:1 1:N und N:M Beziehungen Beziehungen zwischen EntityBeans werden vom EJB Container verwaltet. Da die EJB Klassen abstrakt sind, können diese nicht direkt vom Entwickler gepflegt werden, es müssen entsprechende abstrakte Setter- und Getter- Methoden in der EJB vorgesehen werden. I.A. werden die Assoziationen bei der Erzeugung der Bean gesetzt. Dies darf allerdings nicht bei ejbcreate sondern erst beim ejbpostcreate Event geschehen. Prof. Dr. Nikolaus Wulff 35

ejbpostcreate Die ejbcreate-methode wird gerufen bevor eine EntityBean in der Datenbank angelegt wird. Bei BMP Beans muss jetzt vom Entwickler selbständig für die Persistenz gesorgt werden. Falls die EJB Fremdbeziehungen zu anderen Beans hat, so werden diese in der ejbcreate-methode übergeben, dürfen jedoch noch nicht gesetzt werden. Hierzu ist eine ejbpostcreate-methode mit gleicher Signatur notwendig. ejbpostcreate wird gerufen nachdem ein Record für die EJB in der Datenbank angelegt ist. Prof. Dr. Nikolaus Wulff 36

ejbpostcreate Beispiel public abstract class ShoppingCartBean implements EntityBean { public Long ejbcreate(userlocal user) throws CreateException { setid(createpk()); return null; } public void ejbpostcreate(userlocal user) throws CreateException { setuserlocal(user); } ShoppingCart wird bei der Erzeugung mit einer lokalen UserBean assoziert. Prof. Dr. Nikolaus Wulff 37

1:N Beziehung mit XDoclet /** * @ejb.interface-method generate="local" * @ejb.relation name="user-to-shoppingcart" * role-name="user-of-shoppingcart" * target-ejb="user" * target-role-name="shoppingcart-to-one-user" * * @jboss.relation fk-column="user_id" * related-pk-field="id" */ public abstract UserLocal getuserlocal(); /** * @ejb.interface-method generate="local" */ public abstract void setuserlocal(userlocal user); 1:N Beziehung zwischen User und ShoppingCard, notiert mit XDoclet. Prof. Dr. Nikolaus Wulff 38

ShoppingCart getuser /** * @ejb.interface-method * */ public User getuser() throws EJBException { try { UserLocal userlocal = getuserlocal(); return getuserhome().findbyprimarykey( userlocal.getid()); } catch(exception e) { throw new EJBException("getUser: "+e,e); } } Der ShoppingCart User wird in der ejbcreate- Methode als lokale Objekt gesetzt. Per getuser kann auf die lokale Instanz remote zugegriffen werden... Prof. Dr. Nikolaus Wulff 39

Die Many Beziehung /** * @ejb.interface-method * @ejb.relation name="user-to-shoppingcart" * role-name="user-has-shoppingcarts" * target-ejb="shoppingcart" * target-multiple="true" * * @jboss.relation fk-column="cart_id" * related-pk-field="id" */ public abstract Collection getshoppingcarts(); /** * @ejb.interface-method */ public abstract void setshoppingcarts(collection carts); In der UserBean ist die many Relation hinterlegt JBoss generiert auch die Relationstabelle... Prof. Dr. Nikolaus Wulff 40

/** * @ejb.bean name="shoppingcart" * type="cmp" cmp-version="2.x" primkey-field="id" * view-type="both" jndi-name="ejb/shoppingcart" * * @ejb.ejb-ref ejb-name="book" * @ejb.ejb-ref ejb-name="user" * * @ejb.finder signature="collection findall()" * query="select OBJECT(o) FROM ShoppingCart AS o" * * @ejb.finder signature="collection findbyuser(bookstore.bean.user user)" * query="select OBJECT(o) FROM ShoppingCart AS o WHERE o.userlocal =?1" * * @ejb.transaction type="required" * @ejb.data-object equals="true" * @ejb.pk generate="false" * @ejb.persistence table-name="shoppingcarts" * @ejb.value-object name="shoppingcart" match="*" * * @jboss.create-table "true" * @jboss.remove-table "true" * @jboss.tuned-updates "false" * @jboss.read-only "false" * OQL Tabellen Generierung Prof. Dr. Nikolaus Wulff 41

EJB 2.x Entwicklung Schritte zur Erstellung einer EnterpriseBean: Design der Remote (Business) Schnittstelle. Erstellung einer Home Schnittstelle mit Create- und Finder-Methoden. Codierung einer Bean Implementierung mit passenden ejbcreate- und ejbfinder-methoden. Implementierung der Business-Methoden in der Bean. Testen der Lokalen Bean. Erstellung eines Deployment-Deskriptors. Packen des Archives Deployment im ApplicationServer Testen der Remote Bean. Prof. Dr. Nikolaus Wulff 42

Bookstore Factory Fassade Die BookstoreBean dient als Fassade, um eine ShoppingCart für einen User zu erzeugen. Die ShoppingCart ejbcreate-methode erwartet eine Bean vom Typ UserLocal, die passend zur User Referenz gefunden werden muss. Die Lokale Referenz kann mit der LokalHome Schnittstelle und dem PrimaryKey der Bean ermittelt werden. Die Schritte sind invers zu der getuser Methode der ShoppingCart. Prof. Dr. Nikolaus Wulff 43

Bookstore Factory Methode public ShoppingCart createshoppingcart(user user) throws EJBException { try { ShoppingCartHome home = getshoppingcarthome(); UserLocalHome localhome = getuserlocalhome(); UserLocal localuser = localhome.findbyprimarykey(user.getid()); ShoppingCart cart = home.create(localuser); return cart; } catch (Exception ex) { throw new EJBException(ex); } } Zum Erzeugen einer ShoppingCart im Bookstore ist eine lokale UserBean notwendig. Per findbyprimarykey mit UserLocalHome... Prof. Dr. Nikolaus Wulff 44

XDoclet versus ejb-jar.xml Die vielen Annotationen für XDoclet wirken auf den ersten Blick sehr unübersichtlich. Tatsächlich sind sie jedoch ein großer Fortschritt: alle Annotationen hätten per Hand in der ejb-jar.xml selber codiert werden müssen. alle Home, LocalHome sowie Data und Value Klassen hätten händisch immer parallel codiert werden müssen. Das Datenbankschema hätte händisch synchronisiert werden müssen. Diese Aufgaben werden von XDoclet übernommen. In der EJB 3.0 Spezifikation wird dies durch die neuen JDK1.5 Annotation automatisiert... Prof. Dr. Nikolaus Wulff 45

EJB3 Session Beans Annotations kennzeichnen den Life-Cycle. Meist wird ein Business Interface deklariet von dem eine Lokal- und eine Remote-Schnittstelle abgeleitet werden die in einer POJO Bean implementiert sind. Die EJB Schnittstellen werden mit @Remote und @Local gekennzeichnet, die Implementierung mit @Stateless bzw. @Statefull. Die ejbcreate und ejbremove Methoden können frei vergeben werden und sind mit @PostCreate und @PreDestroy zu annotieren. Prof. Dr. Nikolaus Wulff 46

Stateless Session Beispiel /** * Calculator service interface. */ public interface Calculator extends Serializable { double calculate(double x, char op, double y); } @Remote public interface CalculatorRemote extends Calculator {} @Local public interface CalculatorLocal extends Calculator {} Implementierung: @Stateless public class CalculatorBean implements CalculatorRemote, CalculatorLocal { @PostConstruct protected void created() { System.out.println("created " + this); } Prof. Dr. Nikolaus Wulff 47

Test der Sesson Bean Die Bean wird per JNDI Kontext referenziert: private Calculator service; /** * @throws java.lang.exception */ @Before public void setup() throws Exception { Context ctx = new InitialContext(); service = (Calculator) ctx.lookup(jndiname); assertnotnull("no calculator service found", service); } /** * Test method for {@link de.lab4inf.service.calculator#calculate(d */ @Test public void additiontest() throws Exception { double x = 2.3, y = 3.6; assertequals(x + y, service.calculate(x, '+', y), eps); } Prof. Dr. Nikolaus Wulff 48

EJB3.x persistente EntityBean Seit dem JDK1.5 hat das Konzept der Annotations Einzug in die EJB 3.0 Spezifikation gefunden. Die XDoclet Tags können fast 1:1 als Annotations formuliert werden. EJBs sind jetzt reine Plain-Old-Java-Objects (POJO) Annotations des javax.persistence Pakets: @Entity Markiert die Klasse als EJB @Table Gibt den Tabellennamen des Mappings an @Column Speichert das Attribut in der Tabellenspalte @Id Markiert den PrimaryKey der Tabelle Prof. Dr. Nikolaus Wulff 49

EJB3.0 Annotations Beispiel public javax.persistence.*; @Entity @Table(name="book") public class Book { private Integer id; private String title; // and further attributes... /** * @return the id */ @Id @GeneratedValue(strategy = GenerationType.AUTO) public Integer getid() { return id; } Prof. Dr. Nikolaus Wulff 50

EJB3.x per Hibernate Hibernate ist ein OR-Mapper, der direkt die EJB3.x Annotations verwendet. Ganz normale POJOs können direkt mit Hibernate persistent gemacht werden und sie unterscheiden sich nicht von gleichartigen EJB 3.x Instanzen. Die Entscheidung ob ein POJO eine EJB ist, wird erst zur Laufzeit vom Container entschieden... Ein EJB3.0 Container generiert den passenden Glue-Code für die Remote Schnittstellen, Hibernate belässt es bei der reinen Persistenz. Prof. Dr. Nikolaus Wulff 51