47
Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

Embed Size (px)

Citation preview

Page 1: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

Enterprise Application Integration

Björn Eilers

Enterprise Application IntegrationEAI mit der Java 2 Enterprise Editionund Enterprise JavaBeans

Page 2: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

2

Enterprise Application Integration

Björn Eilers

Nachrichtenmanagement

Einordnung in funktionale Bestandteile einer EAI Infrastruktur

Prozessmanagement

MiddlewareAd

apte

r

Met

adat

enba

nk fü

r Zus

atzd

iens

te

Adap

ter

Adap

ter

Adap

ter

Adap

ter

Adap

ter

Physisches Netzwerk

Java 2 Enterprise Edition

Page 3: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

3

Enterprise Application Integration

Björn Eilers

Java 2 Enterprise Edition

Keine Programmiersprache, sondern Spezifikationen und Verfahren zur Entwicklung, Einführung und Verwaltung komplexer und verteilter Anwendungssysteme

Standards für Komponenten, Container und Dienste sowie Definition einer Systemarchitektur

Abstraktion… …von Präsentation und Implementierung

Gleiche Schnittstellen für verschiedene Clients (Browser, Fat Client, Mobiltelefone, …)

…von Geschäftslogik und PlattformFlexible Implementierung von Geschäftsprozessen über wiederverwendbare Komponenten (Enterprise JavaBeans)

Page 4: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

4

Enterprise Application Integration

Björn Eilers

Java 2 Enterprise Edition

Page 5: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

5

Enterprise Application Integration

Björn Eilers

Java 2 Enterprise Edition

Spezifikationsvorgaben in J2EE-Anwendungsservern implementiertLaufzeitumgebung für J2EE Komponenten, die die J2EE Spezifikation erfülltLogische Aufteilung in Container (Web-Container, EJB-Container)Muss, um Spezifikation zu erfüllen, diverse Dienste anbieten

Dienste eines J2EE-Anwendungsservers:WebserverSicherheitsdienste (Authentifizierung, Autorisation, Zugangsbeschränkungen, Verschlüsselung – über JAAS)Transaktionsmanagement (über JTS, JTA)Namensdienste (über JNDI)Persistenzmanagement (über JDBC)Ressourcenverwaltung (Pooling, Aktivierung und Passivierung von EJBs)Interoperabilität: Anbindung von J2EE-fremden Systemen (über CORBA, J2EE Connector Architektur und Web Services)

Page 6: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

6

Enterprise Application Integration

Björn Eilers

J2EE-Komponenten

ServletsJava-Klassen, die HTTP-Anfragen verarbeiten und HTTP-Antworten erstelleni.d.R. Controller-Komponenten für Webanwendungen, manchmal auch ViewAlternativ als Gateway für HTTP-basierenden Protokolle verwendet

Java Server Pages / Java Server FacesMarkup-Dateien, die neben HTML-/XML-Tags auch Java-Code und spezielle JSP-/JSF-Tags enthaltenwerden als Servlet kompiliertView-Komponenten für Webanwendungen

Page 7: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

7

Enterprise Application Integration

Björn Eilers

J2EE-Komponenten

Enterprise JavaBeansKapseln Geschäftslogik, Daten und Nachrichtenverarbeitung für unternehmensweite AnwendungenWerden später im Detail vorgestellt

Ressourcen-Adapter („Konnektoren“)Verbindung zwischen Anwendungsserver und EIS (SAP, Bank- und Versicherungs-EIS auf Mainframes, Message Oriented Middleware…)

Applikationen bzw. AppletsBieten als Client Zugriff auf die Serverfunktionen an.

Page 8: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

8

Enterprise Application Integration

Björn Eilers

Architektur

Üblicherweise Aufteilung in vier Schichten1. Clients (Browser, Thin Clients)2. Präsentationslogik (JSP/JSF, Servlets)3. Geschäftslogik (Enterprise JavaBeans)4. Datenhaltung (relationale und XML-Datenbanken)

Auch Drei-Schichten-Architektur möglich:1. Client mit Präsentationslogik (Fat-Client, Applet, …)2. Geschäftslogik (Enterprise JavaBeans)3. Datenhaltung

Page 9: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

9

Enterprise Application Integration

Björn Eilers

Architektur

JSP/

JSF

Servlets

Web Container

Session Bean

Session Bean Entity Bean

Entity BeanMessage-driven Bean

Browser

Mobiltelefon

Fat Client

Message Queue

Externes System

RMI/IIOP

HTTP

Datenbank

Datenbank

Web Service

Endpunkt

Web ServiceClient

SOAP

J2EE Applikationsserver

HTTP

EJB C

ontainer

SicherheitWeb

ServicesXML-

Dienste

JDBCJTA/JTS

JMSJavaMail

JAF

Basis-dienste

Firewall

Page 10: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

10

Enterprise Application Integration

Björn Eilers

Enterprise JavaBeans

Komponenten zur Implementierung von Geschäftsprozessen, Daten und Nachrichtenverarbeitung

Entity BeansDaten für unternehmensrelevante GeschäftsobjekteWerden in persistentem Speicher gesichert (i.d.R. Datenbank)Bean-managed Persistence: Bean kümmert sich selber um ihre PersistenzContainer-managed Persistence:

Container kümmert sich um Persistenzermöglicht automatische Verwaltung von Relationen zwischen Entitäten (Container-Managed Relationships)EJB-Query Language zum Auffinden von Entitäten in Datenbank; Bean wird über Schema angesprochen

Gemeinsam von mehreren Clients nutzbarz. B. Bankkonto, Flugreservierung, Kundendaten

Page 11: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

11

Enterprise Application Integration

Björn Eilers

Enterprise JavaBeans

Session BeansImplementierung von Geschäftsprozessen als DienstZustandslos:

Für simple Geschäftsprozesse; kann von mehreren Clients gleichzeitig benutzt werdenKeine Daten zwischen Methodenaufrufen gespeichert, arbeiten nur auf übergebenen DatenKönnen ab EJB 2.1 Dienste auch als Web Service anbietenz. B. Geldentnahme von Bankkonto

Zustandsbehaftet:Speichern Daten über mehrere MethodenaufrufeMethodenaufrufe können Zustand der Bean verändernnur von einem Client nutzbar; Daten nicht persistentz. B. Veränderung eines Warenkorbs bei Online-Einkauf

Page 12: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

12

Enterprise Application Integration

Björn Eilers

Enterprise JavaBeans

Message-Driven BeansStellt einen Nachrichtenempfänger dar (nicht automatisch auch einen Sender!)Serverseitige Geschäftslogik für Verarbeitung asynchroner NachrichtenBietet auf Wunsch Zustellungsgarantie (Ausfall des Systems sorgt nicht für Verlust der Nachricht)Client kommuniziert nur über Nachrichtenaustausch, Bean „lauscht“ auf das Eintreffen neuer Nachrichtenz. B. Datenabgleich zwischen zwei Filialen, Ausführung eines WorkflowsWerden in nächster Veranstaltung detailliert vorgestellt

Page 13: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

13

Enterprise Application Integration

Björn Eilers

Enterprise JavaBeans

Weiterhin für Deployment von Enterprise JavaBeans benötigt:

Deployment DeskriptorenXML-Dokumente zur Beschreibung der Bean-Klassen und -Interfaces, der Bean-Eigenschaften sowie zur Konfiguration der Bean im ApplikationsserverEin herstellerunabhängiger Deskriptor (ejb-jar.xml), ein oder mehrere herstellerabhängige Deskriptoren (jboss.xml, sun-ejb-jar.xml, …), um server- und datenbankspezifische Eigenschaften zu definieren

JAR-Archive mit Deployment Descriptoren, kompilierten Klassen und Interfaces sowie benötigten Bibliotheken

Page 14: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

14

Enterprise Application Integration

Björn Eilers

Zugriff auf Entity und Session Beans

Zugriff auf Entity und Session Beans über zwei Wege möglichEntfernter Zugriff von außerhalb der virtuellen Maschine, in der der Applikationsserver läuft

Beans müssen „Remote Interfaces“ implementierenZugriff über RMI/IIOP (Remote Method Invocation/Internet InterORB Protocol)Argumente und Ergebnisse werden als Werte übergebenDurch Netzwerkübertragung, Marshalling und Demarshalling hoher Overhead; Aufrufe sehr langsam

Lokaler Zugriff innerhalb der virtuellen MaschineBeans müssen „Local Interfaces“ implementierenSehr schnell, da Beans direkt aufgerufen werden könnenArgumente und Ergebnisse werden als Referenzen übergebenEntity Beans: ermöglicht durch den Container verwaltete Relationen

Page 15: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

15

Enterprise Application Integration

Björn Eilers

Zugriff auf Entity und Session Beans

Beans über JNDI auffind- und zugreifbarKonvention: Alle Beans unter Wurzel ejb/ ablegenAblauf:1. Erzeugen eines initialen Kontext2. Suchen der Bean im JNDI-Namensraum3. Wenn aufgefunden, Referenz auf Bean holen4. Bean benutzen

Page 16: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

16

Enterprise Application Integration

Björn Eilers

Grundlegender Aufbau von Entity und Session Beans

Remote und/oder Local Interfaces: Definieren die Geschäftsmethoden einer BeanErben von javax.ejb.EJBObject bzw. javax.ejb.EJBLocalObject

RemoteHome und/oder LocalHome Interfaces:Definieren Methoden zum Verwalten von Beans Erzeugen, Löschen, Auffinden, Aktivieren und PassierenErben von javax.ejb.EJBHome bzw. javax.ejb.EJBLocalHome

Bean-Klassen:Implementieren die in den Interfaces definierten Geschäfts- und VerwaltungsmethodenMüssen javax.ejb.EntityBean (Entity Beans) bzw. javax.ejb.SessionBean (Session Beans) implementieren

Page 17: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

17

Enterprise Application Integration

Björn Eilers

Exkurs: XDoclet

Engine zur Unterstützung von Attribute-Oriented Programming:Source Code-Erzeugung mit Hilfe von Meta-Informationen in JavaDoc-ähnlichen KommentarenAus XDoclet-Tags und Sourcecode Informationen extrahieren, daraus Supportklassen und -dateien generieren

Kommentare auf Klassen-, Methoden und Attributebene möglichDokumentation unter http://xdoclet.sf.net/ Beispiel: Java-Klasse als Enterprise JavaBean deklarieren

/** @ejb.bean name = "Example" * local-jndi-name="ejb/examples/Example" * type="CMP" * cmp-version="2.x" * schema = "Example" */public abstract class ExampleBean { [...] }

Page 18: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

18

Enterprise Application Integration

Björn Eilers

Definition von Entity Beans

Bean wird mithilfe von XDoclet Meta-Angaben beschriebenArt der Bean (Entity Bean, CMP)Name der Bean und JNDI-Context, unter dem Bean bereitstehtSchema, als das Bean in EJB-QL angesprochen werden kannArt des Zugriffs: für Entity Beans lokal, sonst kein CMR möglichName des Primärschlüssels

Klasse als abstract deklarieren, muss Interface javax.ejb.EntityBean implementieren

Beinhaltet Methoden zur Verwaltung des Lebenszyklus und des Bean-Umfeldes: ejbActivate, ejbPassivate, ejbLoad, ejbStore, (un)setEntityContext

Page 19: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

19

Enterprise Application Integration

Björn Eilers

Definition von Entity Beanspackage lspi.eai.phonebook;

import java.rmi.*;import javax.ejb.*;

/** @ejb.bean name="Entry" * display-name="EntryEB" * description="A phonebook entry" * jndi-name="ejb/Entry" * local-jndi-name="ejb/Entry" * type="CMP" * cmp-version="2.x" * view-type="local" * schema = "Entry" * primkey-field = "id" * * @ejb.persistence table-name = "phonebook_entries" * @jboss.persistence create-table = "true" alter-table = "true" * * @ejb.home local-class = "lspi.eai.phonebook.EntryLocalHome" * @ejb.interface local-class = "lspi.eai.phonebook.EntryLocal" */

public abstract class EntryBean implements EntityBean { [...] }

Definition der Entity Bean

Angaben zur Datenbank

Klassennamen der Local- und LocalHome-Interfaces

Page 20: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

20

Enterprise Application Integration

Björn Eilers

Definition von Entity Beans

import java.rmi.*;import javax.ejb.*;

public abstract class EntryBean implements EntityBean {

private EntityContext ctx;

public void ejbActivate() throws EJBException, RemoteException {} public void ejbPassivate() throws EJBException, RemoteException {} public void ejbLoad() throws EJBException, RemoteException {} public void ejbStore() throws EJBException, RemoteException {}

public void setEntityContext(EntityContext ctx) throws EJBException { this.ctx = ctx; }

public void unsetEntityContext() throws EJBException { this.ctx = null; } [...]}

Lebenszyklus der Bean

Umgebung der Bean

Page 21: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

21

Enterprise Application Integration

Björn Eilers

Definition von Entity Beans

Methoden zum Erzeugen neuer Entitäten implementierenEine oder mehrere ejbCreate und ejbPostCreate-Methoden (jeweils paarweise); mit XDoclet-Tags als create-Methoden deklarierenejbCreate-Methode füllt Bean mit zugehörigen Daten; Rückgabe vom Typ des Primärschlüssels, jedoch immer null ejbPostCreate-Methode populiert Relationen zu anderen Entity Beans (bei Container-Managed Relationships; erst nach Erzeugung der Bean möglich); Rückgabe ist void

Persistente Felder abstract mit get- und set-Operationen definierenMit XDoclet als persistente Felder deklarieren und Primärschlüssel identifizieren

Zusätzliche Geschäftsmethoden implementieren

Page 22: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

22

Enterprise Application Integration

Björn Eilers

Definition von Entity Beans /** @ejb.create-method view-type = "local" */

public Long ejbCreate(String lastname, String firstname, Long dateOfBirth, String phoneNumber) throws CreateException { setId(Long.valueOf(System.nanoTime())); setLastname(lastname); setFirstname(firstname); setDateOfBirth(dateOfBirth); setPhoneNumber(phoneNumber); return null; }

public void ejbPostCreate(String lastname, String firstname, Long dateOfBirth,

String phoneNumber) throws CreateException { // keine Relation zu füllen }

Füllen der Entität mit initialen Werten

Falls notwendig,Erzeugung von Relationen

Page 23: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

23

Enterprise Application Integration

Björn Eilers

Definition von Entity Beans /** @ejb.pk-field

* @ejb.persistent-field * @ejb.interface-method view-type="local" */ public abstract Long getId();

/** @ejb.interface-method view-type="local" */ public abstract void setId(Long id);

/** @ejb.persistent-field * @ejb.interface-method view-type="local" */ public abstract String getFirstname(); public abstract void setFirstname(String firstname);

public abstract String getLastname(); public abstract void setLastname(String lastname);

public abstract String getPhonenumber(); public abstract void setPhonenumber(String phonenumber);

public abstract Long getDateOfBirth(); public abstract void setDateOfBirth(Long dateOfBirth);

Definition persistenterFelder

Page 24: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

24

Enterprise Application Integration

Björn Eilers

Auffinden von Entity Beans

Geschieht über EJB-QL:Vereinfachtes SQL-Derivat (reine Anfragesprache!)Grundsyntax:SELECT OBJECT(identifier) FROM Schemaname AS identifier [WHERE identifier.feldname = ?1 AND identifier.relation.feldname = ?2]?n: n-ter Parameter der Methodensignatur

Definition von find-Methoden in LocalHome-Interface (Konvention: findByXXX(), findAll())

Methode findByPrimaryKey(PKKlasse primaryKey) immer definiertRückgabekardinalität 0..1: Rückgabetyp ist Local-Interfacez. B. EntryLocal findByName(String lastname, String firstname)Rückgabekardinalität 0..n: Rückgabetyp ist java.util.Collection bzw. java.util.Enumeration

Page 25: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

25

Enterprise Application Integration

Björn Eilers

Auffinden von Entity Beans

Mit XDoclet: Definition in Klassenkommentar der Bean-KlasseParameternamen voll qualifiziert angeben (z.B. java.lang.String anstelle von String)

/** * @ejb.finder * signature = "java.util.Collection findAll()" * query = "SELECT OBJECT(e) FROM Entry AS e" * @ejb.finder * signature = "lspi.eai.phonebook.EntryLocal * findByName(java.lang.String lastname, java.lang.String * firstname)" * query = "SELECT OBJECT(e) FROM Entry AS e WHERE e.lastname = ?1 AND * e.firstname = ?2" */

Page 26: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

26

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

CMR zwischen zwei Entity Beans möglich, wenn diese lokale Interfaces benutzen undPersistenz vom Container gemanaged wird

Mögliche KardinalitätenOne-to-One (1:1)One-to-Many (1:n)Many-to-One (n:1)Many-to-Many (n:m)

Können gerichtet oder ungerichtet seinUnidirektional (ausgehende Bean kennt Zielbean, aber nicht umgekehrt)Bidirektional (Beans kennen sich gegenseitig)

Page 27: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

27

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

Relationen sowohl in Quelltext (über get- und set-Methoden) als auch in Deployment Deskriptor definieren (wird von XDoclet übernommen)

Anlegen von Relationenbei X:1: abstrakte get- und set-Methoden vom Typ des Local-Interfaces der Zielbeanbei X:n: abstrakte get- und set-Methoden vom Typ java.util.Collection bzw. java.util.SetDefinition der Relation per XDoclet-Tags (@ejb.relation sowie @jboss.relation)

Bei unidirektionalen Relationen Definition einer "virtuellen" Rückbeziehung

Page 28: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

28

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

public class Example1Bean { [...] /** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex1-knows-Ex2" * @jboss.relation * related-pk-field = "example2Id" * fk-column = "fk_example2Id" * fk-constraint = "true" */ public abstract Example2Local

getExample2();

/** @ejb.interface-method * view-type = "local" */ public abstract void

setExample2(Example2 example2); [...]}

public class Example2Bean { [...] /** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex2-knows-Ex1" * @jboss.relation * related-pk-field = "example1Id" * fk-column = "fk_example1Id" * fk-constraint = "true" */ public abstract Example1Local

getExample1();

/** @ejb.interface-method * view-type = "local" */ public abstract void

setExample1(Example1 example1); [...]}

Beispiel für eine bidirektionale 1:1-Beziehung

Page 29: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

29

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

public class Example1Bean { [...] /** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex1-knows-Ex2" * @jboss.relation * related-pk-field = "example2Id" * fk-column = "fk_example2Id" * fk-constraint = "true" */ public abstract Example2Local getExample2();

/** @ejb.interface-method * view-type = "local" */ public abstract void setExample2(Example2

example2); [...]}

public class Example2Bean { [...]/** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex2-knows-Ex1" */ public abstract java.util.Collection

getExamples();

/** @ejb.interface-method * view-type = "local" */ public abstract void

setExamples(java.util.Collection examples);

[...]}

Beispiel für eine bidirektionale 1:n-Beziehung

Page 30: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

30

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

public class Example1Bean { [...] /** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex1-has-Ex2" */ public abstract java.util.Collection

getExamples2();

/** * @ejb.interface-method * view-type = "local" */ public abstract void

setExamples2(java.util.Collection examples2);

[...]}

public class Example2Bean { [...] /** @ejb.interface-method * view-type = "local" * @ejb.relation * name = "Example1-Example2" * role-name = "Ex2-has-Ex1" */ public abstract java.util.Collection

getExamples1();

/** * @ejb.interface-method * view-type = "local" */ public abstract void

setExamples1(java.util.Collection examples1);

[...]}

Beispiel für eine bidirektionale n:m-Beziehung

Page 31: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

31

Enterprise Application Integration

Björn Eilers

Beziehungen zwischen Entity Beans

public class Example1Bean { [...] /** @ejb.interface-method view-type = "local" * @ejb.relation name = "Example1-Example2" * role-name = "Example1-has-Examples2" * target-ejb = "Example2Bean" * target-role-name = "Example2-referenced-by-Example1" * target-multiple = "no" * @jboss.relation related-pk-field = "example2Id" * fk-column = "fk_example2Id" * fk-constraint = "true" */ public abstract Example2Local getExample2();

/** @ejb.interface-method view-type = "local" */ public abstract void setExample2(Example2Local example2); [...]}

Beispiel für eine unidirektionale 1:(1)-Beziehung

Page 32: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

32

Enterprise Application Integration

Björn Eilers

Definition von Session Beans

Definition der Meta-Informationen wieder über XDocletTyp angeben: "Stateless" für zustandslose, "Stateful" für zustandsbehaftete Session BeansIn der Regel keine lokalen, sondern remote Interfaces für Kommunikation mit Bean

Klasse muss javax.ejb.SessionBean implementierenMethoden ejbRemove(), ejbActivate(), ejbPassivate(), setSessionContext(…) für Lebenszyklus- und Umgebungsverwaltung

Bei zustandslosen Beans parameterlose ejbCreate()-Methode, bei zustandsbehafteten Beans ejbCreate(…)-Methoden frei definierbar

Page 33: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

33

Enterprise Application Integration

Björn Eilers

Definition von Session Beans

package lspi.eai.phonebook;

import java.rmi.*;import javax.ejb.*;

/** * @ejb.bean name="Phonebook" * display-name="PhonebookSB" * description="Business logic of a phonebook" * jndi-name="ejb/example/Phonebook" * type="Stateless" * view-type="remote" * * @ejb.home remote-class = "lspi.eai.phonebook.PhonebookHome" * @ejb.interface remote-class = "lspi.eai.phonebook.Phonebook" */public class PhonebookBean implements SessionBean { [...]}

Meta-Informationen:Zustandslos, remote

Interfaces sindremote

Page 34: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

34

Enterprise Application Integration

Björn Eilers

Definition von Session Beans

Für Zugriff auf Entity Beans und andere Session Beans: lookupXXX()-Methoden erzeugen

Auffinden benötigter Beans im JNDI-Namensdienst

private EntryLocalHome lookupEntryLocalHome() throws NamingException {InitialContext ctx = new InitialContext();try {EntryLocalHome entryHome =

(EntryLocalHome)ctx.lookup("ejb/example/Entry");return entryHome;} finally {if (ctx != null) ctx.close();}

}

Page 35: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

35

Enterprise Application Integration

Björn Eilers

Definition von Session Beans

Geschäftsmethoden definierenDa Zugriff remote erfolgt, muss java.rmi.RemoteException geworfen werdenGeschäftsmethode über XDoclet-Tag @ejb.interface-method deklarierenDaten von/für Entity Beans in Data Transfer Objects / Value Objects verpacken

Entity Beans nicht serialisierbarDTO: Einfache JavaBean, die java.io.Serializable implementiert und get- und set-Methoden anbietet

Page 36: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

36

Enterprise Application Integration

Björn Eilers

Definition von Session Beans

/** @ejb.interface-method view-type = "remote" */public EntryDTO findEntry(String lastname,

String firstname) throws RemoteException {try {EntryLocalHome entryHome = lookupEntryLocalHome();EntryLocal entry = entryHome.findByName(lastname, firstname);Calendar dateOfBirth = new GregorianCalendar();dateOfBirth.setTimeInMillis(

entry.getDateOfBirth().longValue());EntryDTO entryDTO = new EntryDTO(dateOfBirth, entry.getLastname(), entry.getFirstname(), entry.getPhoneNumber());return entryDTO;} catch (NamingException e) {throw new RemoteException(e.getMessage());} catch (FinderException e) {return null;}

}

Page 37: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

37

Enterprise Application Integration

Björn Eilers

Bean Deployment

1. Bean-Klasse implementieren2. XDoclet auf Bean-Klasse anwenden

Generiert Local/Remote- und LocalHome/Home-Interfaces sowie Deployment Deskriptoren

3. Quellen kompilieren4. Kompilierte Klassen und Deployment Deskriptoren in JAR-Datei

packenKlassen mit Packagestruktur übernehmenDeployment-Deskriptoren in Unterverzeichnis META-INF/ packen

5. JAR-Archiv auf dem Server deployenBei lokaler JBoss-Installation in Unterverzeichnis server\default\deploy kopierenFür die Übungen: http://wi-vm215.uni-muenster.de:8080/deployment

Page 38: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

38

Enterprise Application Integration

Björn Eilers

Client-ProgrammierungZugriff auf Session Beans über JNDI

Wichtig: jbossall-client.jar, Remote-/RemoteHome-Interfaces und DTO-Klassen im Pfad des Clients!

public PhonebookHome getPhonebookHome() { String JBOSS_HOST = "wi-vm215.uni-muenster.de"; Properties p = new Properties(); p.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); p.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces"); p.setProperty("java.naming.provider.url", JBOSS_HOST); try { InitialContext ctx = new InitialContext(p); phonebookHome = (PhonebookHome)ctx.lookup("ejb/example/Phonebook"); return phonebookHome; } catch (NamingException e) { e.printStackTrace(); }}

Page 39: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

39

Enterprise Application Integration

Björn Eilers

Client-Programmierung

Benutzung der Bean im Client:

try { PhonebookHome phonebookHome = getPhonebookHome(); Phonebook phonebook = phonebookHome.create(); EntryDTO entry = phonebook.findEntry("Meyer", "Ute");} catch (CreateException ce) { ce.printStackTrace();} catch (RemoteException re) { re.printStackTrace();}

Page 40: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

40

Enterprise Application Integration

Björn Eilers

EAI mit J2EE

Anbindung J2EE-fremder Systeme auf zwei ArtenÜber CORBA

Java-Interfaces der Beans (insb. Session Beans) in CORBA-IDL abbildenVerbindung über IIOP-Protokoll möglichUnterstützung für Authentifizierung/Autorisation, VerschlüsselungTransaktionssicherheit Hoher Implementierungsaufwand

Über Web ServicesSeit J2EE v1.4/EJB 2.1: Stateless Session Beans als Web Service EndpunkteVerbindung mit WS über SOAPAuthentifizierung/Autorisation, Verschlüsselung, Sitzungsverfolgung möglich, aber aufwändigRelativ einfach zu implementieren

Page 41: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

41

Enterprise Application Integration

Björn Eilers

EAI mit J2EE: Session Bean als Web Service

1. Service Endpoint Interface (SEI) definierenenthält durch WS bereitgestellte Geschäftsmethoden kann weniger Methoden anbieten, als Bean bereitstelltInterface erweitert java.rmi.RemoteMethoden müssen java.rmi.RemoteException werfen

package lspi.eai.phonebook;import java.rmi.*;public interface PhonebookSEI extends Remote { public EntryDTO findEntry(String lastname, String firstname) throws RemoteException; public EntryDTO[] findEntries() throws RemoteException; public void addEntry(EntryDTO entry) throws RemoteException;}

Page 42: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

42

Enterprise Application Integration

Björn Eilers

EAI mit J2EE: Session Bean als Web Service

2. Deployment Descriptor ejb-jar.xml aktualisierenHinzufügen eines <service-endpoint>-Tags unter /ejb-jar/enterprise-beans/session

<ejb-jar [...]> <enterprise-beans> <session > <description><![CDATA[Business logic of a phonebook]]></description> <display-name>PhonebookSB</display-name> <ejb-name>Phonebook</ejb-name> <home>lspi.eai.phonebook.PhonebookHome</home> <remote>lspi.eai.phonebook.Phonebook</remote> <service-endpoint>lspi.eai.phonebook.PhonebookSEI</service-endpoint> <ejb-class>lspi.eai.phonebook.PhonebookBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> </session> </enterprise-beans></ejb-jar>

Page 43: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

43

Enterprise Application Integration

Björn Eilers

EAI mit J2EE: Session Bean als Web Service

3. WSDL-Datei und Meta-Informationen für Web Service aus Service Endpoint Interface generieren

benötigt wscompile aus dem Java Web Services Developer Pack 2erzeugt Hilfsklassen, WSDL- und Mapping-Dokumente (bildet Java-Datentypen auf Web Service-Elemente ab)

Page 44: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

44

Enterprise Application Integration

Björn Eilers

EAI mit J2EE: Session Bean als Web Service

4. Speziellen Web Service-Descriptor webservices.xml definieren<webservices> <webservice-description> <webservice-description-name>PhonebookService</webservice-description-name> <wsdl-file>META-INF/wsdl/PhonebookService.wsdl</wsdl-file> <jaxrpc-mapping-file>META-INF/PhonebookService_mapping.xml</jaxrpc-mapping-

file> <port-component> <port-component-name>PhonebookService</port-component-name> <wsdl-port>PhonebookSEIPort</wsdl-port> <service-endpoint-interface>lspi.eai.phonebook.PhonebookSEI</service-

endpoint-interface> <service-impl-bean> <ejb-link>Phonebook</ejb-link> </service-impl-bean> </port-component> </webservice-description></webservices>

Page 45: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

45

Enterprise Application Integration

Björn Eilers

EAI mit J2EE: Session Bean als Web Service

5. Beans und Deployment Deskriptoren in JAR-Archiv packenWSDL-Datei in Verzeichnis META-INF/wsdlwebservices.xml und Mapping-Datei nach META-INF

6. JAR-Datei deployenBei lokaler Installation wieder nach server/default/deployAnsonsten über das Web-Interface hochladenInstallation kann über http://localhost:8080/ws4ee überprüft werden (bzw. über Web-Interface)

7. Ansprechen des Web Services über AxisGenerierung der Client-Dateien wie in WS-Vorlesung mithilfe von WSDL2Java

Page 46: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

46

Enterprise Application Integration

Björn Eilers

Telefonbuch-Beispiel

Telefonbuch-Beispiel mit Schritt-für-Schritt-Anleitung im Netz unter

http://www.wi.uni-muenster.de/pi/lehre/ss06/EAI/j2ee_jboss.php

+findEntry( lastname : String, firstname : String )+createNewEntry( entry : EntryDTO )

+getEntries()

<<SessionBean>>Phonebook

<<EntityBean>>Entry

-telephoneNumber : String-dateOfBirth : long-firstname : String-lastname : String-id : long

<<ValueObject>>EntryDTO

-telephoneNumber : String-dateOfBirth : Calendar-firstname : String-lastname : String-id : long

PhonebookGUI

+...()

-phonebook1-entries0..*

Page 47: Enterprise Application Integration Björn Eilers Enterprise Application Integration EAI mit der Java 2 Enterprise Edition und Enterprise JavaBeans

47

Enterprise Application Integration

Björn Eilers

Literatur

Roman, E., et. al.: Mastering Enterprise JavaBeans, Third Editionhttp://www.theserverside.com/books/wiley/masteringEJB/index.tss

Engel, A., Koschel., A., Tritsch, R.: J2EE kompakt, Spektrum Akademischer Verlag 2002Guter Einstieg in die Materie, obwohl z. T. überholt

J2EE Specification 1.4 / EJB Specification 2.1http://java.sun.com/j2ee/1.4/docs/#specs

Technische Kurzdokumentationen zu J2EEhttp://www.torsten-horn.de/techdocs/#JEE (einführende Beispiel in J2EE)