Enterprise Java Beans - Teil 1 Motivation, Übersicht und JMX Service

Werbung
Enterprise Java Beans - Teil 1
Motivation, Übersicht und JMX Service
■ Motivation
■ Enterprise JavaBeans: Konzepte
■ Enterprise JavaBeans: Bean Arten
■ Monitoring und Management Dienst: JMX
Motivation: Trennen von Verantwortlichkeiten
"Separation of Concerns" und Komponenten
School of Engineering
© K. Rege, ZHAW
2 von 60
Ausgangslage
Geräte mit
unterschiedlichen
Eigenschaten
Enterprise Anwendungen
EIS
Daten von
verschiedenen Quellen
School of Engineering
© K. Rege, ZHAW
Peter Tomczyk
200560
3 von
1. Schritt: Trennen von Verantwortlichkeiten
■ Erstellung von "Kapseln" mit klaren Schnittstellen und Aufgaben (z.B. Klassen)
DarstellungsDarstellungs-und
und
Interaktionssteuerung
Interaktionssteuerung
Konto
KontoÜbersicht
ÜbersichtJSF
JSF
Bestellung
Bestellung
Sicherheitsdienst
Sicherheitsdienst
Verbindungsdienst
Verbindungsdienst
LebenszyklusLebenszyklusdienst
dienst
Transaktionssteuerung
Transaktionssteuerung
Konto
Konto
Vertrag
Vertrag
Kunde
Kunde
Zustandsverwaltung
Zustandsverwaltung
Persistenzdienst
Persistenzdienst
Konto
KontoDB
DB
School of Engineering
DB
DBAdministration
Administration
© K. Rege, ZHAW
Peter Tomczyk
4 von 60
2. Schritt: Aufteilung nach Tier-"Rolle"
■ Aufteilung nach Hauptverantwortlichkeit (Darstellung, Logik, Persistenz)
DarstellungsDarstellungs-und
und
Interaktionssteuerung
Interaktionssteuerung
Konto
KontoÜbersicht
ÜbersichtJSF
JSF
Bestellung
Bestellung
Sicherheitsdienst
Sicherheitsdienst
Verbindungsdienst
Verbindungsdienst
Vertrag
Vertrag
Logik
LebenszyklusLebenszyklusdienst
dienst
Transaktionssteuerung
Transaktionssteuerung
Konto
Konto
Darstellung
Kunde
Kunde
Zustandsverwaltung
Zustandsverwaltung
Persistenzdienst
Persistenzdienst
Konto
KontoDB
DB
DB
DBAdministration
Administration
Persistenz
Datenquellen
School of Engineering
© K. Rege, ZHAW
Peter Tomczyk
5 von 60
3. Schritt: Abtrennung von geteilten Diensten
■ Trennung von fachlichen und technischen (geteilten) Bestandteilen
<- fachlich
Konto
KontoÜbersicht
ÜbersichtJSF
JSF
technisch ->
Session
Darstellungsund
Session
Darstellungsund
Verwatlung
Interaktionssteuerung
Verwatlung
Interaktionssteuerung
Application
Client Container
Lebenszyklusdienst
Lebenszyklusdienst
Verbindungsdienst
Verbindungsdienst
Bestellung
Bestellung
Persistenzdienst
Persistenzdienst
Kunde
Kunde
Konto
Konto
Sicherheitsdienst
Sicherheitsdienst
Transaktionssteuerung
Transaktionssteuerung
Vertrag
Vertrag
Konto
KontoDB
DB
School of Engineering
Application
Container
Zustandsverwaltung
Zustandsverwaltung
DB
DBAdministration
Administration
© K. Rege, ZHAW
Persistency
Container z.B.
Database
Peter Tomczyk
6 von 60
Komponenten Definition
■ Komponenten sind vielfältig einsetzbare,
in sich abgeschlossene Funktionseinheiten
■ Komponenten interagieren ausschliesslich über
wohldefinierte Schnittstellen mit ihrer Umgebung.
Component
Component
Container
■ Komponenten leben in einer Laufzeitumgebung
oder auch Einsatzumgebung, dem Behälter
■ Komponenten können leicht und flexibel zu grösseren Funktionseinheiten
gruppiert werden: Aggregation
■ Beispiele:
■
■
■
■
Kunde (Geschäftsobjekt)
Bestellung (Geschäftsobjekt)
Kundenverwaltung (komplexe Komponente)
Produktkatalog (komplexe Komponente)
■ Es gibt keine vordefinierte Granularität aus technischer Sicht
■
eher grobe Granularität (eine bis mehrere Klassen)
School of Engineering
© K. Rege, ZHAW
7 von 60
Komponenten Eigenschaften
■ Komponenten sind Softwaremodule, die auf Binärcodeebene
wiederverwendbar sind
■ Komponenten sind selbstbeschreibend sowohl hinsichtlich ihrer exportierten
als auch ihrer importierten Dienste
■ Komponenten sind konfigurierbar
■ Komponenten können einzeln verteilt werden
■ Komponenten bzw. ihre Konfigurationen werden durch Werkzeuge
unterstützt
■ Komponenten implementieren meist keine Infrastrukturdienste, sondern
beziehen sie aus ihrer Einsatzumgebung (Ausnahme:
Infrastrukturkomponenten)
School of Engineering
© K. Rege, ZHAW
Peter Tomczyk
8 von 60
Komponenten Behälter
■ Der Komponenten Behälter ist die Laufzeitumgebung der Komponenten
■ Der Behälter ist für den Lebenszyklus der Komponenten verantwortlich
(z.B.Instanzierung)
■ Der Behälter ist für die technischen Aspekte (Infrastrukturdienste) der
Komponenten verantwortlich (Sicherheit etc.)
■ Der Behälter bietet selber eine Schnittstelle an, über die die Komponenten die
Dienste in Anspruch nehmen können
■ Der Behälter können selber wieder in einem Behälter eingebettet sein (z.B.
Betriebssystem), schirmen die Komponenten von diesem ab
■ Beispiele von Komponenten in Java:
■
■
JavaBeans : "gewöhnliche" Java Bohnen, z.B. im GUI verwendet, Behälter J2SE
Enterprise JavaBeans: Java Bohnen, die in einem EJB Container leben, Behälter EJB Container
School of Engineering
© K. Rege, ZHAW
9 von 60
Vorteile des gewählten Ansatzes
■ Mehrschichtenarchitektur
■
■
■
Austauschbarkeit einzelner Schichten
1:N-Lösungen (z.B. eine Logik – mehrere Oberflächen)
2-10-50 Regel: 2 Jahren GUI, 10 Jahre Logik, 50 Jahre Daten
■ „Separation of Concerns“
■
technische Aspekte sind separiert -> Konzentration auf Fachlogik
■ Modularisierung
■
Vorgegebene Strukturierung der Aufgabe
■ Verwendung von Komponenten
■
Einfache Entwicklung, Wiederverwendbarkeit und Austauschbarkeit
■ Standardisierung
■
■
Teillösungen von verschiedenen Anbietern: "Best of Breed" Ansatz
Vielfach erprobte Lösungen
■ Aber
■
■
Gefahr der "one-fits-all" Komplexität
z.T: implizite, enge Kopplung von Komponenten und Behälter
■ -> Evolution des Behälters selber ist schwierig
School of Engineering
© K. Rege, ZHAW
Peter Tomczyk
10 von 60
Enterprise JavaBeans: Konzepte
School of Engineering
© K. Rege, ZHAW
11 von 60
Oracle Java Enterprise Edition 5
■ JEE5 früher J2EE:
„J2EE
„J2EEdefines
definesthe
thestandard
standardfor
fordeveloping
developing
component-based
multitier
enterprise
component-based multitier enterprise
applications.“
applications.“[java.sun.com/j2ee/]
[java.sun.com/j2ee/]
"Enterprise
"EnterpriseJavaBeans:
JavaBeans: „...stellt
„...stelltininJ2EE
J2EE
die
zentrale
Technologie
zur
Abbildung
die zentrale Technologie zur Abbildungvon
von
Geschäftslogik
und
Geschäftsdaten
dar.“
Geschäftslogik und Geschäftsdaten dar.“
[Backschat/Gardon]"
[Backschat/Gardon]"
■ Entwickelt von Sun Microsystems (ab 1997)
■ Spezifikationen ursprünglich von Sun/Oracle allein, heute breiter abgestützt
durch den Java Community Process (JCP)
■ Resultate der JCPs werden Java Specification Requests (JSR) bezeichnet
■ JSR220: EJB 3 Standard seit 2006
http://jcp.org/aboutJava/communityprocess/final/jsr220/index.html
School of Engineering
© K. Rege, ZHAW
12 von 60
Oracle Java EE 5
■ Aufteilung in Schichten nach Oracle
http://java.sun.com/javaee/5/docs/tutorial/doc/index.html
http://java.sun.com/javaee/5/docs/api/
School of Engineering
© K. Rege, ZHAW
13 von 60
Java Enterprise Edition: Java EE 5
"HTTP Interpreter"
Browser
Browser
Browser
Client
Browser
Client
Client
Client
Application
Client Container
HTTP
JDBC
JSP/JSF*
JSP/JSF*
Web
WebContainer
Container
z.B.
Tomcat
z.B. Tomcat
RMI/IIOP
SOAP*
NonNonBrowser
Browser
Client
Client
Business
Business
Logic
Logic
EJB Container
z.B. Glassfish
Application Server
Application
Client Container
School of Engineering
Oracle
MySQL
z.B. MQ
Existing
Applications
© K. Rege, ZHAW
14 von 60
Java Enterprise Edition Architektur
■ Die EJB Architektur beschreibt die Verantwortlichkeiten und Interaktionen
folgender Teile
Application
ApplicationServer
Server
EJB
EJBClient
Client
Enterprise
EnterpriseJavaBeans
JavaBeans
EJB
EJBContainer
Container
Object
ObjectRequest
RequestBroker
Broker
Data
DataSources
Sources
EJB
EJBClient,
Client,
z.B.
Tomcat
z.B. Tomcat
Enterprise
Enterprise
JavaBean
JavaBean
EJB Container
z.B. JBoss
Object Request Broker (ORB)
Application Server
School of Engineering
© K. Rege, ZHAW
15 von 60
Anwendungsserver
■ Stellt die Laufzeitumgebung für EJB Container zur Verfügung
■
■
■
■
■
Prozess und Thread Verwaltung
Verwaltung von System Ressourcen
Netzwerkverbindungen
Datenbankverbindungen mit Pooling und Caching
APIs für Systemverwaltung
Linux, Solaris, Windows, etc
School of Engineering
© K. Rege, ZHAW
16 von 60
Enterprise JavaBean (EJB)
■ Komponenten die Anwendungslogik enthalten
■ Meist mehrere, Anwendungsdomänen spezifisch: Kunde, Konto, etc.
■ Implementiert zwei Arten von Schnittstellen:
■
■
fachliche, so dass Anwendung strukturiert wird
technische, so dass sie vom EJB Container verwaltet werden kann
■ Nimmt Dienste des EJB Containers in Anspruch
■ Kann (meist) über das Netzwerk angesprochen werden
Enterprise
Enterprise
JavaBean
JavaBean
School of Engineering
© K. Rege, ZHAW
17 von 60
EJB Container
■ Stellt Laufzeitumgebung in Form von Diensten für Enterprise JavaBeans zur
Verfügung
■ Oracle liefert Spec. und Referenzimplementation
■
Monitoring
Monitoring&&Management
Management
Hersteller: IBM, BEA, JBoss
■ Hersteller sind verpflichtet alle Schnittstellen für
EJB‘s einzuhalten -> Test Suite
-> Kompatibilitätslogo
■ Hersteller darf jedoch sog. "Value-added-features"
einbauen -> Kompatibilitätsprobleme
Lebenszyklusverwaltung
Lebenszyklusverwaltung
Verzeichnis-/Verbindungsdienst
Verzeichnis-/Verbindungsdienst
Zustandsverwaltung
Zustandsverwaltung
Sicherheitsdienst
Sicherheitsdienst
Transaktionssteuerung
Transaktionssteuerung
Persistenzdienst
Persistenzdienst
School of Engineering
© K. Rege, ZHAW
18 von 60
Einordnung
■ Virtual Machine
■ vs. Lightweight Container
Einheit die
verwaltet wird
■ vs. Application Container
VM1
VM2
App
AppAA
App
AppAA
Container 1
Container 2
Bins/Libs
Bins/Libs
Bins/Libs
Bins/Libs
App
AppAA
App
AppAA
Guest
GuestOS
OS
Guest
GuestOS
OS
Bins/Libs
Bins/Libs
Bins/Libs
Bins/Libs
EJBs
Dienste
Dienste
App
AppAA
Hypervisor
Hypervisor
Docker
DockerEngine
Engine
EJB/Web
EJB/WebContainer
Container
Host
HostOS
OS
Host
HostOS
OS
Host
HostOS
OS
Server
Server
Server
Server
Server
Server
School of Engineering
© K. Rege, ZHAW
19 von 60
Container-Bean Interaktionen (3 von 4 Arten)
■ 1. Abfangen (Interception)
■
■
EJB Container Isoliert Enterprise JavaBean von Klient
Setzt z.B. Transaktionen, Sicherheit vor und nach dem Aufruf
■ 2. über Container-Schnittstelle: Aufruf
■
Beans können Methoden des Containers aufrufen um Container Services zu benutzen
■ 3. über Bean-Schnittstelle: Rückruf
■
Beans können aufgerufen werden (Callback) über definierte Interfaces der Beans (oder mit
Annotationen gekennzeichnete Methoden)
EJB Container
Client
client request
Sicherheitsdienst
Sicherheitsdienst
Transaktionssteuerung
Transaktionssteuerung
Persistenzdienst
Persistenzdienst
call to container
Enterprise
Enterprise
JavaBean
JavaBean
School of Engineering
callback
© K. Rege, ZHAW
20 von 60
EJB Client
■ Klient ruft die Enterprise JavaBean auf
■ Aufruf wird durch EJB Container kontrolliert und "abgefangen"
■ Klient findet das Enterprise JavaBean mittels JNDI
■ Klient kann Enterprise JavaBean über den ORB ansprechen
■ Ein Enterprise JavaBean kann selber andere Beans aufrufen -> wird somit
ebenfalls zum "Klienten"
EJB
EJBClient,
Client,
z.B.
Tomcat
z.B. Tomcat
School of Engineering
© K. Rege, ZHAW
21 von 60
Object Request Broker
■ Ermöglicht den Zugriff von Enterprise JavaBean Methoden über Maschinen- und
Prozessgrenzen hinweg
■
■
EJBs müssen gefunden werden (Verzeichnisdienst)
Methoden müssen aufgerufen und Daten müssen ausgetauscht werden können
■ Zumindest RMI muss unterstützt sein, andere Protokolle möglich (CORBA,
SOAP); Serialisierung (Marshalling) der Java Typen muss unterstützt sein
■ Zusätzlich ist ein Verzeichnisdienst erforderlich, z.B. JNDI
■ EJB Client und EJB Container können über ORB miteinander kommunizieren
■ EJB Container können untereinander über ORB kommunizieren
Verzeichnisdienst
Object
Request
Broker
Object
Request
Broker
(ORB)
School of Engineering
© K. Rege, ZHAW
22 von 60
Data Sources
■ Sind die persistenten Datenspeicherung
■ kann eine Datenbank sein -> wird über JDBC angesprochen
■ sollte in verteilten Transaktionen eingebunden werden können -> 2PC Protokoll
unterstützen
■ Können aber auch andere Enterprise Information Systems (EIS) sein (z.B. SAP)
-> eigene Zugriffsprotokolle
School of Engineering
© K. Rege, ZHAW
23 von 60
Enterprise JavaBeans:
Session Beans
Entity Beans
Message Driven Beans
School of Engineering
© K. Rege, ZHAW
24 von 60
3 Arten von Enterprise Beans
■ 3 Arten von Enterprise Beans mit unterschiedlichen Eigenschaften
■ Session Bean
■
■
Enthält die Geschäftslogik
ist entweder stateless oder statefull
■ Entity Bean
■
■
Repräsentiert den Zustand ("Geschäftsobjekte")
Ist persistent, d.h. Werte überdauern Container Neustart
■ Message-Driven Bean
■
Dienst für Zugriff auf asynchrone Schnittstelle (JMS)
Wahl
Wahlder
derArt
Artdes
desBeans
Beans
jejenach
Anforderungen,
nach Anforderungen,
bzw.
bzw.dem
demgewünschten
gewünschten
Verhalten
Verhalten
<<Entity Bean>>
<<Entity Bean>>
Konto
Konto
<<Session Bean>>
<<Session Bean>>
BankService
BankService
<<Entity Bean>>
<<Entity Bean>>
Vertrag
Vertrag
<<MDB>>
<<MDB>>
BankVerbindung
BankVerbindung
School of Engineering
© K. Rege, ZHAW
25 von 60
Session Bean - Eigenschaften
■ Repräsentiert einen Prozess, Verhalten oder Ablauf
■ Enthält die Geschäftslogik
<<Session Bean>>
<<Session Bean>>
BankServices
BankServices
■ Hat keine (persistenten) Daten sondert operiert auf diesen
■ Greift auf andere Beans zu - Session, Entity, MDB
■ Hat einen leeren Konstruktor
■ Ist zustandslos (stateless) oder zustandsbehaftet (statefull) -> später
■ Wird oft direkt vom Klienten lokal oder entfernt aufgerufen
■ Kann (optional) Teil einer Transaktion sein
School of Engineering
© K. Rege, ZHAW
26 von 60
Entity Bean - Eigenschaften
■ Repräsentiert einen Zustand
<<Entity Bean>>
<<Entity Bean>>
■ persistente Werte von Geschäftsentitäten
Konto
Konto
■ Bildet eine Datenquelle auf eine Klasse ab
■ Jede Entity Bean Instanz
■
■
■
■
repräsentiert einen Daten-Satz, z.B. Konto des Herrn Müllers
muss einen eindeutigen Schlüssen haben
kommt nur einmal im System vor
ab EJB3 Entity Bean = JPA Managed Object
■ Überlebt die Verbindungszeit und sogar die Container Lebenszeit
■ Kann nicht direkt vom Klienten angesprochen werden sondern ausschliesslich
über lokale Session Beans
■ Immer Teil einer Transaktion
School of Engineering
© K. Rege, ZHAW
27 von 60
Message-Driven Bean - Eigenschaften
<<MDB>>
<<MDB>>
BankVerbindung
BankVerbindung
■ Realisiert einen asynchronen Prozess oder
ist ein Vermittler
■ Entspricht inhaltlich einem stateless SessionBean
■ MDBs reagieren als Listeners von Meldungs Brokern, die via JMS
angesprochen werden.
■ Die Meldung kann von jeder JEE5 Komponente gesendet werden: einem
Anwendungs-Klienten, einem anderen EJB, einer Web Komponenten oder
einem nicht-JEE5 System: Dient auch als Vermittler zu anderem System
■ Hat keine persistenten Daten oder Zustand
■ Kann optional Teil einer Transaktion sein
School of Engineering
© K. Rege, ZHAW
28 von 60
Übersicht - Eigenschaften
Session Bean
Entity Bean
MDB
Prozess/Logik
Zustand
Vermittler
statefull:ja
ja
nein
Zustands-/
Persistenzverwalter
stateless:-
BMP:Bean
-
statefull:Container
CMP:Container
Lebensdauer
des Zustands
Aufruf/Session
∞
Aufruf
Zugriff
entfernt/lokal
lokal
entfernt
Teil von
Transaktion
optional
immer
optional
Hauptanwendung
Zustand
(indiv. für Klient)
School of Engineering
stateless:nein
© K. Rege, ZHAW
29 von 60
Entwurf: Wahl von Enterprise Bean Typ
■ Meist eindeutig durch Zweck und/oder Eigenschaften bestimmt
■ Prozess/kein Zustand -> Session Bean
■ Mit Zustand als Teil von Prozess -> Entity Bean
■ Mit Zustand entfernter Zugriff -> Session + Entity Bean
■ Schnittstelle zu anderem System MDB
Hat
Hatpersistenten
persistentenZustand,
Zustand,
wird
lokal
über
BankService
wird lokal über BankService
angesprochen
angesprochen
hat
hatkeinen
keineneigenen
eigenenZustand,
Zustand,
verarbeitet
verarbeitetlediglich
lediglichDaten,
Daten,
wird
entfernt
zugegriffen
wird entfernt zugegriffen
<<Entity Bean>>
<<Entity Bean>>
Konto
Konto
<<Session Bean>>
<<Session Bean>>
BankService
BankService
<<Entity Bean>>
<<Entity Bean>>
Vertrag
Vertrag
<<MDB>>
<<MDB>>
BankVerbindung
BankVerbindung
School of Engineering
© K. Rege, ZHAW
Verbindung
Verbindungzu
zuanderer
andererBank
Bank
30 von 60
Aufbau einer EJB Komponente
■ Eine EJB Komponente besteht aus eine Menge von Klassen, Interfaces und
Beschreibungsdateien
■ In EJB 3.0 sind gegenüber EJB 2.1 einige weggefallen
■ Enterprise Bean Klasse: Implementation der Funktionalität; entweder Session
oder MDB
School of Engineering
© K. Rege, ZHAW
Local
Local
Impl
Impl
Remote
Remote
Stub,Impl
Stub,Impl
generiert
Remote
Interface
■ Deployment Descriptor:
Konfigurationseinstellungen eines EJB
Local
Interface
■ Remote und Local Interfaces: Schnittstelle für die eigentliche Logik des Beans;
wird auch benötigt um Hilfsklassen für den entfernen Zugriff zu generieren (z.B.
RMI)
EJB Class
Deployment
Descriptor
Manifest
31 von 60
Remote Interface
■ Schnittstelle für den remote Zugriff auf die EJB Klasse
■ Namenskonvention: BeanNameRemote.java oder auch einfach BeanName.java
■ Hat dieselben Methoden wie die dazugehörige EJB Klasse
■ Stub und Imp für Kommunikation werden aus Interface generiert
■ Impl. delegiert an Container weiter (nicht an EJB Klasse direkt) diese dann
weiter an Bean Implementation
■
Einstiegspunkt für "Interception"; z.B. Sicherheit, Transaktion, etc.
Home
Stub, Imp
Remote
Remote
Stub,
Impl
Stub,
Imp
EJB Class
Remote
Remote
Interface
Interface
public
public interface
interface BankService
BankService {{
public
public KontoData
KontoData getKontoFor(String
getKontoFor(String acctName)
acctName)
throws
Exception;
throws Exception;
}}
Home
Interface
■ Remote Client spricht EJB immer über R. Interface an
Deployment
Descriptor
School of Engineering
© K. Rege, ZHAW
Manifest
32 von 60
Local Interfaces
■ zweiter Satz von Schnittstellen für den lokalen Zugriff
■ zur Optimierung für Zugriff innerhalb derselben VM
■ Namenskonvention: BeanNameLocal.java
■ Entwickler kann Remote, Local Interfaces oder beide erweitern
Home
Local
Stub, Imp
Local
Impl
Impl
Deployment
Descriptor
School of Engineering
© K. Rege, ZHAW
EJB Class
Remote
Stub, Imp
Remote
Interface
public
public interface
interface BankServiceLocal
BankServiceLocal {{
public
public AccountData
AccountData getAccountFor(String
getAccountFor(String acctName);
acctName);
}}
Home
Local
Interface
Interface
■ Achtung: Unterschiede beim Gebrauch: z.B. byRef und byVal
Parameterübergabe, Exceptions
Manifest
33 von 60
Deployment Descriptor
■ ejb-jar.xml: Hier werden die (standard) Konfigurationseinstellungen eines EJB
hinterlegt, diese werden vom EJB Container verwendet um ein EJB ausführen
zu können
■ Ab EJB3 die meisten Eigenschaften von Beans via Annotation
DTO, Exception
etc Classes
Home
Stub, Imp
Remote
Stub, Imp
Remote
Interface
<?xml
<?xmlversion="1.0"
version="1.0"encoding="UTF-8"?>
encoding="UTF-8"?>
<ejb-jar
…
>
<ejb-jar … >
<description>
<description>Stateless
StatelessBankService
BankServiceBean</description>
Bean</description>
<display-name>BankService
Bean
Example
<display-name>BankService Bean Example(stateless)</display-name>
(stateless)</display-name>
<enterprise-beans^/>
<enterprise-beans^/>
</ejb-jar>
</ejb-jar>
…..
…..
Home
Interface
■ können durch Einträge im Deployment Descriptor übersteuert werden
Deployment
Deployment
Descriptor
Descriptor
School of Engineering
© K. Rege, ZHAW
EJB Class
Manifest,
Manifest
etc.
34 von 60
Enterprise Bean Implementation
■ Implementation der anwendungsspezifische Funktionalität
■ Namenskonvention: BeanNameBean.java
■ Implementiert die Home/Remote Interfaces i. Allg. nicht direkt, sondern ist nur
lose verpflichtet über Namenskonvention
}
}
School of Engineering
© K. Rege, ZHAW
Remote
Stub, Imp
EJB Class
EJB Class
Remote
Interface
// own Methods implementation
// own Methods implementation
public AccountData getAccountFor(String acctName) {
public AccountData getAccountFor(String acctName) {
… …
… …
… …
… …
}
}
DTO, Exception etc
Classes
Home
Interface
@Stateless
@Stateless
@Remote (BankService.class)
@Remote (BankService.class)
@Local (BankServiceLocal.class)
@Local (BankServiceLocal.class)
public class BankServiceBean {
public class BankServiceBean {
// Session Bean methods implementation
// Session Bean methods implementation
@PostConstruct
@PostConstruct
public void activate() {…}
public void activate() {…}
Home
Stub, Imp
■ Die Callback Methoden mit den entsprechenden Annotationen, z.B.
@PostConstruct
Deployment
Descriptor
Manifest
35 von 60
Session Bean Implementation
■ Implementiert einen Geschäftsablauf, -Logik, z.B. Banküberweisung
■ Callbacks werden vom Container bei Zustandswechsel aufgerufen
@PostConstruct
public void activate();
2 Varianten von Session Beans
■ Stateless: speichert keine Information zwischen den Aufrufen; dadurch schneller
als statefull
■ Statefull: Zustand wird zwischen Client-Aufrufen gehalten; eine Instanz ist über
mehrere Methodenaufrufe explizit einem Client zugeordnet, bis sie mittels
remove() wieder freigegeben, die Verbindung unterbrochen wird oder ein
Timeout abgelaufen ist.
School of Engineering
© K. Rege, ZHAW
36 von 60
Entity Bean in EJB3 = JPA
■ Ein Entity Bean entspricht einer persistenten Geschäftsentität
■
z.B. einem Datensatz in der Datenbank
■ Jedes Entity Bean wird durch eindeutigen Schlüssel identifiziert
■ Lokal angesprochen via EntityManager
@Entity
@Entity
@Table(name = "Dozenten")
@Table(name = "Dozenten")
public class Dozent implements
public class{Dozent implements
Serializable
Serializable {
String getName() ..
String
getName() ..name) ...
void
setName(String
void setName(String name) ...
}
}
School of Engineering
DTO, Exception etc
Classes
public Collection <Dozent> findByName (String namePattern) {
public Collection <Dozent> findByName (String namePattern) {
return em.createQuery(...)
return em.createQuery(...)
}
}
EJB Class
EJB Class
Remote
Interface
@PersistenceContext (unitName="DozentEntity")
@PersistenceContext (unitName="DozentEntity")
private EntityManager em;
private EntityManager em;
Home
Interface
@Stateless
@Stateless
public class DozentService {
public class DozentService {
Home
Stub, Imp
}
Remote
Stub, Imp
}
Deployment
Descriptor
© K. Rege, ZHAW
Manifest
37 von 60
Interaktion zur Laufzeit
■ Zusammenwirken der verschiedenen Teile am Beispiel Session Bean
Client
Client
Remot
Remot
e
e
Stub
Stub
Impl.
Impl.
Remote
Remote
Interface
Interface
School of Engineering
Remote Interface
Remote Interface
Implementation
Implementation
Bean
Bean Bean
Bean
Instanz
Instanz
Instanz
Bean
Instanz
Bean
Instanz
Instanz
© K. Rege, ZHAW
38 von 60
Zusammenfassung
■ Java EE 5 eine Architektur zur Entwicklung von serverseitigen Komponenten
■ Architektur basiert auf Aufteilung in die 3 Schichten: Präsentation, Logik,
Persistenz
■ Ermöglicht verteilte Anwendung mit standardisierten Kommunikationsprotokollen
■ Komponenten werden als Enterprise JavaBeans (EJB) bezeichnet
■ Es gibt 3 Ausprägungen
■
■
■
Session
Entity
Message Driven Bean
■ Der EJB Container
■
■
ist die Laufzeitumgebung für diese Komponenten.
Verwaltet Enterprise Beans und bietet eine Reihe von Services für die Komponenten an
School of Engineering
© K. Rege, ZHAW
39 von 60
Monitoring und Management Dienst
Monitoring
Management
Monitoring&
& Management
Monitoring
Management
Monitoring&
& Management
Lebenszyklusverwaltung
Lebenszyklusverwaltung
Verbindungsdienst
Verbindungsdienst
Zustandsverwaltung
Zustandsverwaltung
Sicherheitsdienst
Sicherheitsdienst
Transaktionssteuerung
Transaktionssteuerung
Persistenzdienst
Persistenzdienst
School of Engineering
© K. Rege, ZHAW
40 von 60
Monitoring & Management Dienst
■ In einem betrieblichen Umfeld müssen verschiedenartige
Infrastrukturkomponenten überwacht und konfiguriert werden
■ Der Betreiber einer Infrastruktur möchte gerne alle wesentlichen Einstellung
einheitlich auf einem Schirm betrachten und einstellen können
■ Punkt-zu-Punkt Lösungen werden mit der Zeit unübersichtlich
by Max Goff
■ Herstellerlösungen: IBM Tivoli, HP OpenView,Oracle Solstice EM sind "optimiert"
auf eigene Produkte
■ -> Es braucht Standards für die Verwaltung der Ressourcen
■
Bsp: SNMP basierend auf UDP
für Netzwerk-Ressourcen
School of Engineering
© K. Rege, ZHAW
by Max Goff
41 von 60
Monitoring & Management
■ Überwachen eines Systems bzw. einzelner Ressourcen im laufenden Betrieb
für
■
■
■
■
Status Monitoring
Fehlersuche, Diagnose, Debugging
Alarmierung bei Fehlern
Performance Analyse -> Ausgangspunkt für Performance Tuning
■ Konfiguration des Systems bzw.von Ressourcen zur Laufzeit
■
z.B.Logging/Tracing Level Optionen etc.
■ Probleme
■
■
■
Vielzahl von Einzelkomponenten zu überwachen
Unterschiedliche Standards (Hersteller/Produktekategorien)
Werden nicht vom Entwickler vorgenommen
School of Engineering
© K. Rege, ZHAW
42 von 60
Monitoring auf verschiedenen Ebenen
■ vom Betriebssystem bis zur Anwendung
■ Anforderung
■
Plattform Unabhängigkeit
■
Protokoll Unabhängigkeit
■
Information Model Unabhängigkeit
■
Management Anwendung Unabhängigkeit
School of Engineering
© K. Rege, ZHAW
43 von 60
Monitoring von JEE Systemkomponenten
■ Performance Daten/Statistiken
■
■
■
Ermitteln der Aufrufzahlen für Servlets/JSP
Performance/Ressourcenbenutzung, Antwortzeiten (min,max,avg)
Logs/Probleme
■ Transaktionen
■
■
Anzahl von Commits/Rollbacks pro EJB
Durchschnittliche Anzahl von Beans die gelockt sind
■ Connection Pools
■
■
Anzahl von Connections im Pool
Avg.Wartezeit auf Pool-Connections
■ Überwachung der eigenen Applikation
■
■
■
Auslesen/Ändern von Applikationsparametern zur Laufzeit
Backend Ressourcen
Fachliche Properties
■ Zustellung von Nachrichten bei
■
■
Fehler
Zustandsänderungen
School of Engineering
© K. Rege, ZHAW
44 von 60
Java Management Extensions (JMX)
■ JMX besteht aus einer Architektur, einer API und Services für das Management
von
■
■
■
Java Applikationen
Infrastruktur Komponenten
...
■ Ermöglicht das Überwachen von Java Applikationen mit Standard Management
Konsolen
■ unabhängig von Java EE entstanden
School of Engineering
© K. Rege, ZHAW
45 von 60
JMX Architektur
■ <RessourceName>MBean Interface
■
legt die Schnittstelle des MBeans fest
■ <RessourceName> Klasse = "Sonde"
■
Implementiert das Interface, greift auf die Ressource zu (instrumentalisiert) die Ressource
■ <RessourceName> Agent
■
■
Registriert das MBean, inklusive Bekanntmachung der Funktionalität
"Sonde" registriert sich oft auch selber
Ressource
<<interface>>
CoffeeMBean
Management
Console
e.g. JConsole
Coffee
CoffeeAgent
MBeanServer
Connector Services
School of Engineering
© K. Rege, ZHAW
46 von 60
Verschiedene MBean Typen
■ Alles was als Java Objekt darstellbar ist kann mit JMX überwacht (=
instrumentiert) werden (HW,SW,Services,...)
■ Die Instrumentierung erfolgt über MBeans,von denen JMX verschiedene
Varianten vorsieht
■ Die wichtigsten zwei sind:
■ Standard MBeans: Schnittstelle statisch
■
■
■
Schnittstelle durch Java Interface definiert
einfachster Weg für JMX Instrumentierung
aber statisches Interface
■ Dynamic MBeans: Schnittstelle dynamisch
■
■
■
Schnittstellen durch MBeanInfo Klasse definiert
Schnittstelle kann zur Laufzeit verändert werden
aber komplexer in der Implementierung
School of Engineering
© K. Rege, ZHAW
47 von 60
Standard MBean
■ Interface wird vom <Ressource>MBeand spezifiziert
■ Exponiert werden public Attribute, Methoden, Konstruktoren und Notifikationen
(Events)
■ JMX spezifizierte Namenskonventionen für Standard MBeans
■
■
■
Die Ressource muss ein Interface mit Getter/Setter für R/W Attribute bzw. Getter für ReadOnly
Attribute spezifizieren
Das Interface träg den Namen <Ressource>MBean
Eine Klasse <Ressource> muss dieses Interface implementieren
■ MBeans werden meist als Singletons implementiert
School of Engineering
© K. Rege, ZHAW
48 von 60
Hello MBean
■ für ein einfaches MBean müssen 2 Dateien erstellt werden
package
package com.example.jmx;
com.example.jmx;
package
package com.example.jmx;
com.example.jmx;
public
public interface
interface HelloMBean
HelloMBean {{
public
public String
String getGreeting();
getGreeting();
public
void
setGreeting(String
public void setGreeting(String str1);
str1);
public
public int
int getChangeCount();
getChangeCount();
}}
public class Hello implements HelloMBean
public class Hello implements HelloMBean
{{
int
int ctr;
ctr;
String
String greeting;
greeting;
}}
School of Engineering
public
public int
int getChangeCount()
getChangeCount() {{
return
return ctr;
ctr;
}}
public
public String
String getGreeting()
getGreeting() {{
return
return greeting;
greeting;
}}
public
public void
void setGreeting(String
setGreeting(String str1)
str1) {{
greeting=
str1;
greeting= str1;
ctr++;
ctr++;
}}
© K. Rege, ZHAW
49 von 60
Erzeugung der MBean Instanz
Erstellung des Singletons und Registrieren des MBeans in MBeanServer
package com.example.jmx;
package com.example.jmx;
public class Hello implements HelloMBean {
public class Hello implements HelloMBean {
……………
……………
public static void initManagment() {
public static void initManagment() {
try { // Register MBean in Platform MBeanServer
try { // Register MBean in Platform MBeanServer
ManagementFactory.getPlatformMBeanServer().
ManagementFactory.getPlatformMBeanServer().
registerMBean(new Hello (), new ObjectName("hello:type=Hello"));
registerMBean(new Hello (), new ObjectName("hello:type=Hello"));
}catch(JMException ex) {
}catch(JMException ex) {
// TODO handle exception
// TODO handle exception
}
}
}
}
static {
static {
initManagment();
initManagment();
}
}
public void main(String[] artg) throws Exception {
public void main(String[] artg) throws Exception {
log.info("Hello started. Waiting...");
log.info("Hello started. Waiting...");
Thread.sleep(Long.MAX_VALUE);
Thread.sleep(Long.MAX_VALUE);
}
}
School of Engineering
© K. Rege, ZHAW
50 von 60
Dynamic MBean
■ Entwickler hat mehr Kontrolle über Schnittstelle
■ Management Interfaces werden dynamisch zur Laufzeit erzeugt
■
■
Interface kann modifiziert werden ohne den Code zu ändern
Interface kann zur Laufzeit sich dem Zustand der Ressource anpassen
■ MBeans implementieren das Interface DynamicMBean
■
Methoden get/setAttribute(s), getMBeanInfo und invoke
School of Engineering
© K. Rege, ZHAW
51 von 60
Hello DynamicMBean
■package
package com.example.jmx;
package package com.example.jmx;
Beschreibung
Beschreibung
der
derSchnittstelle
Schnittstelle
import java.lang.reflect.*;
import java.lang.reflect.*;
import javax.management.*;
import javax.management.*;
public class HelloDynamic implements DynamicMBean{
public class HelloDynamic implements DynamicMBean{
private String greeting;
private String greeting;
public MBeanInfo getMBeanInfo() {
public MBeanInfo getMBeanInfo() {
MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[1];
MBeanAttributeInfo[] attributes = new MBeanAttributeInfo[1];
attributes[0] = new MBeanAttributeInfo("Greeting", // name
attributes[0] = new MBeanAttributeInfo("Greeting", // name
"java.lang.String", // type
String
"java.lang.String", // type
StringAttribut
Attribut"Greeting"
"Greeting"
"Hello World Text", // description
"Hello World Text", // description
true, // isReadable?
true, // isReadable?
true, // isWritable?
true, // isWritable?
false); // isIs?
false); // isIs?
Constructor[] constructors = this.getClass().getConstructors();
Constructor[] constructors = this.getClass().getConstructors();
MBeanConstructorInfo[] dConstructors = new MBeanConstructorInfo[1];
MBeanConstructorInfo[] dConstructors = new MBeanConstructorInfo[1];
dConstructors[0] = new MBeanConstructorInfo("DynamicMBean", constructors[0]);
dConstructors[0] = new MBeanConstructorInfo("DynamicMBean", constructors[0]);
return new MBeanInfo(this.getClass().getName(),"Test einer Dynamic MBean",
return new MBeanInfo(this.getClass().getName(),"Test einer Dynamic MBean",
attributes,
attributes,
dConstructors,
dConstructors,
new MBeanOperationInfo[0] ,new MBeanNotificationInfo[0]);
new MBeanOperationInfo[0] ,new MBeanNotificationInfo[0]);
}
}
School of Engineering
© K. Rege, ZHAW
52 von 60
… Hello DynamicMBean
public void setAttribute (Attribute attribute) throws AttributeNotFoundException,
public void setAttribute (Attribute attribute) throws AttributeNotFoundException,
InvalidAttributeValueException, MBeanException, ReflectionException {
InvalidAttributeValueException, MBeanException, ReflectionException {
if (attribute.getName().equals("Greeting")) {
if (attribute.getName().equals("Greeting")) {
universelle
greeting = (String)attribute.getValue();
universelleset
setMethode
Methode
greeting = (String)attribute.getValue();
}
}
}
}
public Object getAttribute (String attributeName) throws AttributeNotFoundException,
public Object getAttribute (String attributeName) throws AttributeNotFoundException,
MBeanException, ReflectionException { Object ret = null;
MBeanException, ReflectionException { Object ret = null;
if (attributeName.equals("Greeting")) ret = greeting;
if (attributeName.equals("Greeting")) ret = greeting;
universelle
return ret;
universelleget
getMethode
Methode
return ret;
}
}
public AttributeList setAttributes (AttributeList attributes) {
public AttributeList setAttributes (AttributeList attributes) {
setAttribute(attributes.get(0))}
setAttribute(attributes.get(0))}
public AttributeList getAttributes (String[] attributeNames) {
public AttributeList getAttributes (String[] attributeNames) {
String v = getAttribute (attributeNames[0]);
String v = getAttribute (attributeNames[0]);
Attribute a = new Attribute(attributeNames[0],v);
Attribute a = new Attribute(attributeNames[0],v);
AttributeList al = new AttributeList();
AttributeList al = new AttributeList();
al.add(new Attribute(attributeNames[0],v));
al.add(new Attribute(attributeNames[0],v));
return al;
return al;
}
}
}
universelle set multiple Methode
universelle set multiple Methode
universelle
universelleget
getmultiple
multipleMethode
Methode
public Object invoke (String operationName, Object params[], String signature[]) throws
public Object invoke (String operationName, Object params[], String signature[]) throws
MBeanException, ReflectionException {
MBeanException, ReflectionException {
Object ret = Void.TYPE;
Object ret = Void.TYPE;
return ret;
return ret;
}
}
}
School of Engineering
© K. Rege, ZHAW
53 von 60
Zugriff auf MBean
andere
andereManagement
Management
Anwendung
Anwendung
Zugriff
Zugriffinnerhalb
innerhalbJVM
JVM
entfernter Zugriff
entfernter Zugriff
School of Engineering
© K. Rege, ZHAW
54 von 60
Programmatischer lokaler Zugriff auf MBeans
■ Mittels Standard Adaptern/Connektoren werden die Informationen abgerufen
■ Zugriff auf lokales MBean (in derselben VM)
import
import javax.management.*;
javax.management.*;
import
javax.naming.InitialContext;
import javax.naming.InitialContext;
……
//
// simpliefied
simpliefied version
version if
if there
there is
is only
only one
one MBean
MBean Server
Server in
in the
the Virtual
Virtual Machine
Machine
MBeanServer
mbs=
ManagementFactory.getPlatformMBeanServer();
MBeanServer mbs= ManagementFactory.getPlatformMBeanServer();
■ Direkt über Proxy Instanz
String
String name=""hello:type=Hello";
name=""hello:type=Hello";
HelloMBean
HelloMBean hello
hello == (HelloMBean)MBeanServerInvocationHandler.newProxyInstance(mbs,
(HelloMBean)MBeanServerInvocationHandler.newProxyInstance(mbs,
new
new ObjectName(name),HelloMBean.class,
ObjectName(name),HelloMBean.class, false);
false);
hello.setGreeting("Hallo
Welt");
hello.setGreeting("Hallo Welt");
■ oder über MBeanServer Methoden
String
String name=""hello:type=Hello";
name=""hello:type=Hello";
mbs.setAttribute(new
mbs.setAttribute(new ObjectName(name),
ObjectName(name), new
new Attribute("Name",
Attribute("Name", "Andy
"Andy Schaefer"));
Schaefer"));
http://java.sun.com/j2se/1.5.0/docs/api/javax/management/package-summary.html
School of Engineering
© K. Rege, ZHAW
55 von 60
Entfernter Zugriff - Management Seite
■ JSR-160 Remote Access Specification: definiert und vereinheitlicht verschiedene
JMX Zugriffsarten
■ Lokaler Zugriff (innerhalb VM)
MBeanServer
MBeanServer server
server == ManagementFactory.getPlatformMBeanServer();
ManagementFactory.getPlatformMBeanServer();
ObjectName
ObjectName objName
objName == new
new ObjectName("jmx.example.com:service=HelloMBean");
ObjectName("jmx.example.com:service=HelloMBean");
String
a
=
(String)server.getAttribute(obName,
String a = (String)server.getAttribute(obName, “Greeting”);
“Greeting”);
■ Entfernter Zugriff
JMXConnector c = JMXConnectorFactory.connect(url);
JMXConnector c = JMXConnectorFactory.connect(url);
MBeanServerConnection server = c.getMBeanServerConnection();
MBeanServerConnection server = c.getMBeanServerConnection();
ObjectName objName = new ObjectName("jmx.example.com:service=HelloMBean");
ObjectName objName = new ObjectName("jmx.example.com:service=HelloMBean");
String a = (String)server.getAttribute(obName, “Greeting”);
String a = (String)server.getAttribute(obName, “Greeting”);
c.close();
c.close();
immer
immerschliessen
schliessen
School of Engineering
© K. Rege, ZHAW
56 von 60
Zugriff über die JConsole
School of Engineering
© K. Rege, ZHAW
57 von 60
Zusammenfassung
■ Mit JMX steht eine flexible und mittlerweile bewährte Technologie zur Verfügung
um Monitoring und Management von Applikationen und Servern vorzunehmen
■ JMX erlaubt Monitoring in allen Schichten
■
Selbst tiefere Schichten wie OS und Hardware sind per JMX Wrapper integrierbar
■ Nahezu alle gängigen Application Server arbeiten bereits heute mit JMX
■
Infrastruktur kann auch für eigene Monitoring Aufgaben eingesetzt werden
■ Java Releases ab J2SE 1.5 /JEE 5 bieten eine Standardisierung für das
Applikationsmonitoring basierend auf JMX
School of Engineering
© K. Rege, ZHAW
58 von 60
Anhang A JMX Namenskonvention
■ Objekt Namen
■
[Domain]:property=value[,otherproperty=othervalue]
■ Anmelden
■
z.B. "com.example.jmx:type=CashRegister, com.example.jmx:vendor=Nestle"
■ Abfragen:
■
■
■
■
voll Qualifiziert
" com.example.jmx:type=CashRegister"
oder mit Wildcards
*:type=CashRegister,*
■ *vendor=Nestle
School of Engineering
© K. Rege, ZHAW
59 von 60
Anhang B Einstellungen für Remote Zugriff
■ starten der VM so dass die MBeans auch remote zugegriffen werden können
java
java -Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote \\
-Dcom.sun.management.jmxremote.port=8004
-Dcom.sun.management.jmxremote.port=8004 \\
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.authenticate=false \\
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.ssl=false \\
hello.HelloAgent
hello.HelloAgent
http://www.onjava.com/pub/a/onjava/2004/09/29/tigerjmx.html
School of Engineering
© K. Rege, ZHAW
60 von 60
Herunterladen