Enterprise JavaBeans Hauptseminar SWT SS01 Andreas Pleuß Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 2 1. Einleitung • Enterprise JavaBeans (EJBs): – Softwarekomponenten – Serverseitig, für verteilte Mehrbenutzeranwendungen – Persistente Datenhaltung • Motivation: Mehrschichtenarchitektur • Grundlage: Spezifikation 2.0 Andreas Pleuß Hauptseminar - EJB 3 Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 4 Systemarchitektur Andreas Pleuß Hauptseminar - EJB 5 Systemarchitektur (2) Andreas Pleuß Hauptseminar - EJB 6 Systemarchitektur (3) Andreas Pleuß Hauptseminar - EJB 7 Grundbestandteile von EJBKomponenten • • • • EJB Class Component Interface Home Interface Deployment Descriptor + Hilfsklassen Andreas Pleuß Hauptseminar - EJB 8 EJB Class • Fachliche Klasse: Implementiert alle fachlichen Methoden aus Component Interface und benötigte Methoden aus Home Interface • Namenskonvention: EJBNameEJB.java Andreas Pleuß Hauptseminar - EJB 9 Component Interface • „Zugriffs-Schnittstelle“: Fachliche Daten und Methoden • Namenskonvention: EJBName.java • Remote Interface (extends javax.ejb.EJBObject) • Spez. 2.0: Local Interface (extends javax.ejb.EJBLocalObject) Andreas Pleuß Hauptseminar - EJB 10 Home Interface • „Verwaltungsschnittstelle:“ Methoden zum Erzeugen und Finden von Komponenten • Namenskonvention: EJBNameHome.java • Remote Home Interface (extends javax.ejb.EJBHome) • Spez. 2.0: Local Home Interface (extends javax.ejb.EJBLocalHome) Andreas Pleuß Hauptseminar - EJB 11 Remote Interfaces vs. Local Interfaces • Kombinationen: – Local Interface und Local Home Interface – Remote Interface und Remote Home Interface – Alle vier Interfaces • Remote: – Ortsunabhängig über Java RMI – „pass by value“ – Alle Methoden werfen java.rmi.RemoteException Andreas Pleuß Hauptseminar - EJB 12 Remote Interfaces vs. Local Interfaces (2) • Local: – Clients: EJBs auf selber JVM – Klassen, die Interfaces implementieren, sind lokale Objekte – „pass by reference“ Andreas Pleuß Hauptseminar - EJB 13 Remote Interfaces vs. Local Interfaces (3) • Vorteile Remote Interfaces: – Ortsunabhängig; flexibel; geringe Kopplung zum Client – Durch „pass by value“ zusätzliche Trennung Andreas Pleuß Hauptseminar - EJB 14 Remote Interfaces vs. Local Interfaces (4) • Vorteile von Local Interfaces: – Kein „Overhead“; günstiger – Keine Einschränkungen für Parameter – Einfache Casts möglich – Weniger mögliche Fehler (RemoteExceptions) – „pass by reference“ bietet zusätzliche Möglichkeiten Andreas Pleuß Hauptseminar - EJB 15 Deployment Descriptor • Enthält strukturelle Informationen über die EJB • Spezifiziert in einer XML Document Type Definition (DTD) Andreas Pleuß Hauptseminar - EJB 16 Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 17 Session Beans • Stellen Geschäftslogik zur Verfügung • Implementieren javax.ejb.SessionBean • Typische Beispiele: Reiseveranstalter, Bankautomat • Stateful oder Stateless Andreas Pleuß Hauptseminar - EJB 18 Session Beans (2) • Stateful Session Beans: – Haben inneren Zustand („Conversational State“) – Zustand bestimmt durch Instanzvariablen – Jede Instanz ist fest einem Client zugeordnet • Stateless Session Beans: – Keine verschiedenen Zustände – Unabhängig vom Client Andreas Pleuß Hauptseminar - EJB 19 Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 20 Entity Beans • Repräsentieren objektorientierte Sicht auf persistente Daten • Haben eindeutigen Primary Key • Sind unabhängig vom Client • Implementieren javax.ejb.EntityBean • Zwei Arten der Persistenzverwaltung: – Bean-Managed Persistence (BMP) – Container-Managed Persistence (CMP) Andreas Pleuß Hauptseminar - EJB 21 Einschub: CMP in Spez. 1.1 • CMP Felder als public deklarierte Instanzvariablen • Deployment Descriptor: Enthält CMP Felder Andreas Pleuß Hauptseminar - EJB 22 Einschub: CMP in Spez. 1.1 (2) public class ArticleEJB implements javax.ejb.EntityBean { public int id; public int price; public int getId() { return this.id; } public int setId(int id) { this.id = id; } ... Andreas Pleuß Hauptseminar - EJB 23 Einschub: CMP in Spez. 1.1 (3) • Unzureichende Festlegungen für: – Abbildung von Abhängigen Serializable Objekten auf Datenbank – Relationen mit anderen EJBs – Spezifizierung der Finder-Methoden Andreas Pleuß Hauptseminar - EJB 24 Abstract Persistence Schema • EJB Class ist abstract • Container Managed Relationships (CMR) => CMP-Felder und CMR-Felder • CMP- und CMR-Felder: – Festgelegt durch abstracte getter- und setterMethoden – Im Deployment Descriptor spezifiziert – Vom Container implementiert Andreas Pleuß Hauptseminar - EJB 25 Beispiel: Abstract Persistence Schema public abstract class Article implements javax.ejb.EntityBean { public abstract int getId(); public abstract setId(int id); public abstract double getPrice(); public abstract setPrice(double Price); ... Andreas Pleuß Hauptseminar - EJB 26 CMP-Felder • Auf Primitive Java Typen und Serializable Typen beschränkt • Set-Methode für Primary Key nicht im Component Interface enthalten Andreas Pleuß Hauptseminar - EJB 27 Container Managed Relationships (CMR) • • • • Relationen zu anderen Entity Beans Nur über Local Interfaces Nicht für Client zugreifbar One-to-one, one-to-many oder many-tomany; uni- und bidirektional Andreas Pleuß Hauptseminar - EJB 28 CMR (2) • Relation zu einer Bean: CMR-Feld vom Local Interface-Typ • Relation zu mehreren Beans: CMR-Feld vom Collection Interface-Typ (java.util.Collection oder java.util.Set) Andreas Pleuß Hauptseminar - EJB 29 EJB Query Language (EJB QL) • SQL-ähnliche Sprache zur Definition von Anfragemethoden (Finder- und Select-Methoden) für CMP Entity Beans • Im Deployment Descriptor • Containerunabhängig, portierbar • Wird compiliert in Sprache zur Anfrage an jeweiligen persistenten Speicher Andreas Pleuß Hauptseminar - EJB 30 EJB QL (2) • Ermöglicht Navigation entlang der Relationen zwischen Entity Beans • Auch Zugriff auf Abstract Persistence Schemas anderer Entitiy Beans zu denen eine navigierbare Relation besteht • Syntax: <select_clause> <from_clause> [<where_clause>] Andreas Pleuß Hauptseminar - EJB 31 EJB QL (3) • Beispiel: SELECT DISTINCT OBJECT(o) FROM order AS o IN (o.articles) AS a WHERE a.shipped = FALSE liefert alle Bestellungen zurück, die unausgelieferte Artikel enthalten Andreas Pleuß Hauptseminar - EJB 32 Finder-Methoden • Um Entity Beans bestimmter Eigenschaften zu finden • Im Remote Home Interface der Entitiy Bean: findMethodenname • Remote Interface als Rückgabewert (gegebenfalls Collection) • Werfen javax.ejb.FinderException Andreas Pleuß Hauptseminar - EJB 33 Finder-Methoden (2) • Spezifiziert durch EJB QL-Anweisung im Deployment Descriptor • Immer notwendig: FindByPrimaryKey(); – benötigt keine EJB QL-Anweisung – Gibt genau ein Remote Interface zurück Andreas Pleuß Hauptseminar - EJB 34 Select Methoden • In der EJB Class der Entity Bean: ejbSelectMethodenname • Nur für interne Nutzung in der Bean • Rückgabewerte: Durch Relationen erreichbare Entity Beans oder CMP-Felder • Werfen javax.ejb.FinderException • Spezifiziert durch EJB QL-Anweisung im Deployment Descriptor Andreas Pleuß Hauptseminar - EJB 35 Fachliche Home Methoden • Zur Implementierung von Fachlicher Logik unabhängig einer Entity Bean Instanz • Wird beim Aufruf auf allen Instanzen der Bean ausgeführt • Im Home Interface: beliebiger Methodenname • In EJB Class: – ejbHomeMethodenname – Müssen dort implementiert werden; zumeist unter Verwendung der Finder- und Select-Methoden Andreas Pleuß Hauptseminar - EJB 36 Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 37 Message-Driven Beans • Verarbeiten asynchron Nachrichten geliefert per Java Message Service (JMS) • Zustandslos • Keine Component und Home Interfaces • Implementiert javax.ejb.MessageDrivenBean und javax.jms.MessageListener Andreas Pleuß Hauptseminar - EJB 38 Message-Driven Beans (2) • Methoden: – Parameterloser Konstruktor – ejbCreate(), ejbRemove() – setMessageDrivenContext( javax.ejb. MessageDrivenContext ctx) – onMessage( javax.jms.Message msg ) Andreas Pleuß Hauptseminar - EJB 39 Gliederung • • • • • • Einleitung Architektur Session Beans Entity Beans Message-Driven Beans Zusammenfassung Andreas Pleuß Hauptseminar - EJB 40 Zusammenfassung • • • • • • Local Interfaces und Remote Interfaces Container Managed Persistence Container Managed Relationships EJB Query Language Fachliche Home Methoden Message-Driven Beans Andreas Pleuß Hauptseminar - EJB 41