Enterprise JavaBeans

Werbung
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
Herunterladen