Wiederverwendung durch Komponentenmodelle – und Middleware

Werbung
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
6. Design – Wiederverwendung durch
Komponentenmodelle – und Middleware
14. Mai 2002
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-2-
1
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Ziel
•
•
•
•
Verständnis für Komponenten und deren Einsatz
Unterstützung von Komponenten durch Services
Beispiel J2EE als eine mögliche Technologie
Zusammenhang mit Middlewaretechnologien
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-3-
Wiederverwendung mithilfe von Komponentenmodellen
• Für komplexe Systeme reicht eine einfache Aufteilung in
mehrere Schichten nicht aus!
– Präsentation – Differenzierung Layouting, Zugriff, Kontrolle
• MVC hatten wir schon
– Geschäftslogik: ?
• Wie umgehen mit vielen Klassen?
• Haben diese ggf. verschiedene Aufgaben/Rollen?
• Hier sind „Komponenten-Modelle“ sehr hilfreich
– Wiederverwendung von
• Wissen (im Sinne des SW-Engineering)
• Design Konzepten
• Programmcode
– Zerlegung
• Überschaubare, verteilbare Blöcke
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-4-
2
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Komponenten – Begriffsdefinition
• „A component is a nontrivial, nearly independent, and
replaceable part of a system that fulfills a clear function in the
context of a well-defined architecture. A component conforms
to and provides the physical realization of a set of interfaces“.
Philipp Kruchten, Rational.
• „A software component is a unit of composition with
contextually specified interfaces and explicit context
dependencies only. A software component can be deployed
independently and is subject to third-party software.“ Clemens
Szyperski, ComponentSoftware.
• Eine in sich vollständige, wieder benutzbare Software-Einheit
mit wohldefiniertem Interface, integrierbar über eine geeignete
(Netzwerk-) Plattform (mit loser Kopplung). Eine Komponente
beinhaltet auch Tests, Manuals, etc.
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-5-
Komponenten – Nutzen
• Qualitätssteigerung & Produktivitätssteigerung durch getestete,
anpassbare Komponenten
• Defekt-Elimination
• Klare Grenzen zu sich ändernden Teilen (Austausch)
• Reduzierte Entwicklungs- und Wartungskosten durch
– Gekaufte Teile (COTS) bei geeigneter Integrationstechnologie
– Standards
– Robuste Architekturen, die Komponentenintegration unterstützen
• Time-To-Market & bessere Planbarkeit durch Verringerung der
Komplexität der Software
• Bestehende SW wird wieder verwendbar durch Middleware
• Zerschlagen grosser, monolithischer Entwicklungen in kleinere
Einheiten (selbstständig testbar, austauschbar)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-6-
3
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Komponenten – Beispiele
• Technische Komponenten, z.B. Zahlengeneratoren,
Session Management,..
• Geschäftliche Einheiten, z.B. Einkaufswagen,
Verzeichnis, Katalog, ERP Integration,..
• Domain/Prozess-bezogene Einheiten, z.B.
Auftragssystem, Online-Broker,..
• Beachte: Komponenten können unterschiedlicher
Granularität sein
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-7-
Komponenten – Charakteristika
•
•
•
•
•
•
•
•
Schnittstelle
Komponenten-Infrastruktur
System zusammensetzen (Assembly) statt „nur“ bauen
Anpassung zur Compile-Time versus Run-Time –
„Komponenten werden zur Bauzeit erzeugt, Objekte
zur Laufzeit“
„Buy before Make“
Lebenszyklus wird unterstützt (Design, ..., Tests)
Wiederverwendbarkeit – Design der Komponente
Granularität – Distributed C. / Business C. / Business
Component System
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-8-
4
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Vorgehensweise – Randbedingungen
• „Komponenten sollen das Leben erleichtern“, d.h.:
– Bei Auswahl oder Entwicklung einer Komponente ist eine leichte
Integrierbarkeit & Anpassbarkeit notwendig
– Daher Wahl einer Infrastruktur / Middleware recht zentral
• Services, die von Komponenten genutzt werden könnten
–
–
–
–
–
–
–
Transparente Transportmechanismen, Datenkonversionen
Life-Cycle Support
Transaktionsunterstützung
Event-Management
Security
Verzeichnisse
...
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-9-
Vorgehensweise – Verwendung von Komponenten
• Komponenten Selektion/Qualifikation
– Marktstudie, Analyse
– Evaluation und Auswahl
• Anpassung der Komponente
– White/grey/black box
– Parametrieren, Ableiten, Integrieren, Wrapper, Bridge,
• Zusammenbau der Komponenten zu Systemen (Assembly)
– Integration durch
•
•
•
•
Message orientierte Middleware
Objekt Request Broker Architektur
Datenbank zentrischer Ansatz
Webservices
– Für „proprietäre“ Software gelten normale Entwurfs-Prozesse
• Pflege und Weiterentwicklung des Systems
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-10-
5
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Vorgehensweisen – Bau von Komponenten – best practices
• Fokus auf Autonomie, Flexibilität & Wiederverwendbarkeit
–
–
–
–
–
Hat die Komponenten einen Nutzen?
Kann sie „generisch“ gebaut werden?
Was alles kann/muss parametrisierbar sein?
Ist sie in sich abgeschlossen?
Welche Architektur soll zugrunde liegen?
• Iterative Entwicklung unterstützt Identifikation von
Komponenten
• Entwurf eines Komponenten-Systems: geeignete Fassaden
nutzen (Interface und Implementierung trennen)
• Skalierbarkeit & verteilte Bearbeitung ins Kalkül nehmen
• Reduktion von Netzwerkzugriffen
• Transaktionen? Mehrere kurze ACID Transaktionen statt einer
grossen → Skalierbarkeit
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-11-
Komponenten – Präsentationsschicht – Technologie
• Client-Komponenten (Hier nicht vertieft)
– HTML, XML, Javascript
– Java Applet
– Plug In
• Server-seitige Präsentation
– Script-Sprachen,
– MVC mit JSP & Servlets, Portlets (!)
• Beispiele für Komponenten
– Formulare, Navigation, Anzeige (Tree,..), Portal Elemente
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-12-
6
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Präsentationsschicht – Model-View-Controller
serverseitig, kurze Wiederholung
HTML Seite
mit Formular
neue Seite:
HTTP Response
submit: HTTP Request
View (Servlet/JSP)
View (Servlet/JSP)
Controller-Servlet
Model (Bean)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-13-
Präsentationsschicht – Portlets
• spezialisierte JSP (Tags): unterstützen Kapselung und
Wiederverwendung spezifischer Teile eines Portals
• Integration auf Präsentationslayer & auch
Geschäftslogik!
• Können verschachtelt sein
– Einfache Portlets z.B. Öffnen/ Schliessen von Seiten (ViewSpezifische Komponenten)
– Komplexe Portlets nutzen, gekapselt, spezifische Dienste
• Noch jung, Standards auf dem Wege. Vgl. BEA, IBM,
Epicentric
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-14-
7
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Beispiel
(Yahoo)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-15-
Komponenten – Geschäftslogik –Basistechnologien
•
•
•
Fokus auf Schnittstelle (Design by Contract) + Technologie
Middleware nutzen: Komponenten bauen und isolieren!
TP Monitore (hier nicht weiter betrachtet)
•
Interface-basierend
– CICS, TUXEDO
– Objekt Request Broker: CORBA CCM, DCOM
– RMI
•
Application-Server (hier Fokus Java – Interface + Dienste + ..)
– JSP, Portlet, MVC – Generierung von Präsentations-Komponenten
– J2EE – Nutzung von Java-Komponenten
•
Message-basierend
– Topics
– Queues
– Tupelspace / Blackboard
•
Webservices :Im Kommen.
– WSDL, UDDI, ..
– .NET
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-16-
8
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Interface-basierte Schnittstellen- & Komponentenmodelle
• Reichhaltigkeit („entfernter“) Methoden
(Gegensatz zur Nachrichten-basierte Middleware:
Reichhalt an Nachrichten)
• Vertreter: CORBA, DCOM, DCE, RMI, J2EE-EJB,
Java-Connector Architektur, .NET
• Aufruf einer Komponente über eine Menge von
Funktionen, die spezifisch für die Komponente sind
• „Container“ wird genutzt
– um systemspezifische Details einerseits anzubieten
– und andererseits deren Implementierung zu abstrahieren und
zu verstecken
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-17-
Aufbau einer „Distributed Component“
• Funktionalität / Implementierung und Konfiguration
• Logische Schnittstelle (Abstraktion)
• Schnittstellen Implementation (Stub, Skeleton) - Adapter
• Komponenten Infrastruktur (Transport,..) / Container
Client
Adapter
Komponente
Adapter
Komponente
Adapter
Komponenten Infrastruktur
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-18-
9
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Distributed Components
public
public interface
interface Account
Account {{
public
double
getBalance()
public double getBalance() throws
throws Throwable;
Throwable;
}}
Schnittstelle
Für Client
AdapterInfrastruktur
public
public class
class AccountServer
AccountServer implements
implements Account
Account {{
double
bal;
double bal;
public
public PersonServer(double
PersonServer(double balance){
balance){
Serverseitige
this.bal
this.bal == balance;
balance;
Implementierung,
}}
Läuft im
public
public int
int getBalance(){
getBalance(){
Container
return
return bal;
bal;
}}
}}
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-19-
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-20-
10
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
J2EE (1)
• Java Plattform für E-Business Applikationen
• Enterprise Edition: Robuste Plattform für unternehmensweite,
geschäftskritische Anwendungen
– Einbindung in Unternehmensinfrastruktur
– Transaktions-Unterstützung
– Datenbank Zugriff (nächste Vorlesung - Wir betrachten heute keine
Entitity Beans!)
• N-tier Architekturen mit 2 primären Ausprägunen
– Web basiert
– Traditionelle Client/Server Architektur
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-21-
J2EE (2)
• J2EE Komponentenmodelle basieren und nutzen
– EJB
– JMS
• Ziele
– Einfachheit von Entwicklung, Wartung, Administration von
grossen, Plattform unabhängigen, Server-basierten
Anwendungen
– Rollenbasierte Entwicklung
– „write once run everywhere“: Abstraktion der SystemInfrastruktur wie Nachrichtenaustausch, Transaktionsunterstützung, Verzeichnisdienste, Datenbankzugriff
• Technisch realisiert durch sog. Application Server
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-22-
11
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
J2EE – Grundstruktur – Aussensicht
Fat-Client
Fat-Client
Backendsysteme
J2EE Applikation Server
Servlet Engine
Fat-Client
EJB Container
Ledger
Enterprise
Applikation
Callcenter
Fat-Client
Web-Client
Web-Client
Web-Client
Web-Client
Enterprise Applikation
Mainframe
Enterprise Applikation
...
Enterprise
Applikation
DB
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-23-
J2EE – Architektur – Service Architektur
Systemverhaltens- und Domain-Grenze
Domain Model
JSP/Servlet
Client
Account Services
ApplikationsObjekte
Order Services
Java Client
Billing Services
Domain Objekte
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-24-
12
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
J2EE – Komponentenmodell – Innensicht
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-25-
J2EE & Web-Aufrufe
Browser
Browser
sendet
request
Web-Server
Server
empfängt
request
Servlet
Engine
Benutzer-Aktion (Click)
Server sendet
HTML zum
Browser
Servlet Engine
sucht Controller /
erzeugt Thread
EJB Container
Browser zeigt
HTML
Ergebnis
View bildet
Ergebnis in
HTML ab
Controller
nutzt Model
(proxy)
Model (proxy)
nutzt EJB home &
remote Methoden
Session EJB nutzt
Businessmethoden
Session EJB
gibt Ergebnis
an Model
Entity EJB ≡ BO‘s
Database / Legacy
RDBMS und/oder Persistence Layer
liefern BO Daten
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-26-
13
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
EJB Server und EJB Container mit Diensten
• In einem EJB-Server können mehrere EJB Container
laufen
• System-Dienste des Containers
–
–
–
–
–
–
–
Transaktionsverarbeitung
Sicherheit
Middleware: verteilte Komponenten und Kommunikation
Nebenläufigkeit
Management des Lebenszyklus von Komponenten
Datenbank-Zugriffsmanagement
…
• Kombiniert Interface-Ansatz mit Aspekten der TPMonitore (ako „Component Transaction Processing“)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-27-
J2EE Dokumentation
• J2EE Platform Specification
– API´s
– Release Level (Kompatibilität, Portabilität)
• J2EE Compatibility Test Suite
– Konformität von Application Servern mit der Spezifikation
• J2EE Reference Implementation
– Operationelle Definition der J2EE Plattform
• J2EE Application Model
– Guide
– Beispiele und Design Patterns
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-28-
14
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
J2EE API´s
• Enterprise JavaBeans 2.0 (EJB) – 3 Arten von Beans und deren
Nutzung
• Java Server Pages 1.2 (JSP)
• Java Servlet API
• Java Naming and Directory Interface API (JNDI)
• JDBC API 2.0 – Zugriff auf relationale Datenbanken
• Java Transaction API 1.0 (JTA): Klammerung von
Datenbankoperationen zu einer Einheit
• J2EE Connector Architecture 1.0 (JCA) – EAI
• Java Message Services 1.0 (JMS)
• JavaMail Technology (1.2)
• Java API for XML Processing 1.1 (JAXP)
• Java Authentication and Authorization Services 1.0 (JAAS)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-29-
J2EE - EJB
Home
Interface
1: Create/find/
remove
Home
Implementation
Home Stub
2: remote stub
Client
extends javax.ejb.EJBHome
life cycle methods: creating, removing and finding
Remote
Interface
create/find/remove
extends javax.ejb.EJBObject
Businessmethoden einer Bean
EJB
Container
business methods,
remove
3. business methods,
Remove
Remote
Object
Stub
Remote
Bean
Object
ImplemenImplementation
tation
extends javax.ejb.EntityBean / javax.ejb.SessionBean
implements business methods
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-30-
15
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
EJB
• Serverseitige Komponente für Business-Logik und
Business-Daten
• EJBs ≠ Java Beans (Client-Seite)
• Komponentenmodell für die Entwicklung &
Verteilung von Java Komponenten in einer verteilten
Multi-Tier-Umgebung
• Portabel und protokollneutral => nicht an bestimmten
Webserver gebunden
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-31-
EJB – Session Beans
• Bilden Geschäftsprozess ab (→ vgl. Use Cases), keine
Geschäfts-Entitäten / -Dinge
• Koordiniert und kontrolliert den Informationsfluss und die
Geschäftslogik zwischen verschiedenen Entitäten
• Sind nicht persistent, können aber „stateless“ oder „stateful“
sein
– Stateless: keiner Session zugeordnet. Innerhalb der Session Bean
dürfen keine Informationen gespeichert werden
– Stateful: einer Session zugeordnet, speichern Informationen
zwischen Aufrufen. (conversational state)
• Einem Client für den gesamten Life Cycle zugewiesen.
• Nicht in einem Pool von freien Instanzen genutzt
• Repräsentieren keine Entititäten! Sondern den Zustand eines Ablaufes.
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-32-
16
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
EJB – Entity Beans (Vorgriff auf nächste Woche)
• Repräsentieren persistente Daten und Domain Objects
• Bieten create, find & delete Methoden zum Zugriff auf
Datenbank
• 2 Varianten
– Entity Bean mit Bean managed Persistance
– Entity Bean mit Container managed Persistance
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-33-
EJB – Message Beans
•
•
•
•
•
•
Neu in JB 2.0
Beim Eintreffen einer Nachricht aktiviert
Asynchron und stateless
onMessage() enthält die Business Logic
Hat kein Home oder Remote interface
Ist einer JMS Queue oder einem Topic zugeordnet
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-34-
17
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
J2EE: EJB API Client-Seite
• Initialisierung
Prop.put(Context.INITIAL_CONTEXT_FACTORY,
“com.ejbhome.naming.spi.rmi.RMIInitCtxFactor“);
Context = new InitialContext(prop);
• Home interface aufrufen (loopkup)
WarenkorbHome wk_home = (Warenkorb_Home)
context.lookup(„Warenkorb“);
• Business-Objekt erzeugen
wk_personwk = wk_home.create(„Meier“);
• Suchen (schon eine Entity vorhanden?)
wk_nutzerwk = wk_home.findByPrimaryKey(…);
• Business Objekt aufrufen
wk_Personwk.add(myProdukt);
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-35-
J2EE: EJB API Server-Seite
•
•
•
Home Interface
public interface WarenkorbHome
extends javax.ejb.EJBHome {
Warenkorb create() throws
java.rmi.RemoteException,
javax.ejb.CreateException;
}
Remote Interface
public interface Warenkorb extends javax.ejb.EJBObject
{
Void add(Object o) throws java.rmi.RemoteException;
}
EJB Implementation
public class WarenkorbEJB implements
javax.ejb.SessionBean {
// folgend die Implementierung..
}
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-36-
18
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services : ein paar kurze Beispiele
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-37-
Java Naming & Directory Interface (JNDI)
• standardisierter Zugriff auf verschiedenste Verzeichnis- und
Namensdienste (LDAP, DNS, NIS, RMI, CORBA,…)
– Anforderung von Objekten, Ressourcen, EJB-Schnittstellen
– Speicherung und Lesen von beliebigen Java Objekten
– Allgemeine Directory Operationen (wie Assoziieren von Attributen mit
Objekten, Suchen nach Objekten über Attribute)
• EJB Container Hersteller muss einen JNDI Dienst anbieten
LDAP
Directory
Role
EJB Store
src
EJB Home A
User
a.java
User
b.java
EJB Home B
JNDI
Java Application / EJB / Servlet
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-38-
19
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Nutzung von JNDI im Servlet – init
public void init() throws ServletException {
try {
Properties p = new Properties();
// ... JNDI properties - Herstellerspezifisch
p.put(Context.INITIAL_CONTEXT_FACTORY,
“weblogic.jndi.TengabInitialContextFactory“);
p.put(Context.PROVIDER_URL,
“t3://localhost.7001“);
Context jndiContext = new InitialContext(p);
WarenkorbHome home =(WarenkorbHome)
jndiContext.lookup(„WarenkorbHome");
} catch (Exception e) { e.printStackTrace(); }
}
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-39-
Nutzung von JNDI im Servlet – Verwendung je Thread
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException,
IOException {
Warenkorb wk = home.create(nextID);
home
String wk_user = req.getParameter(“inputName“);
wk.setName(wk_user);
PrintWriter out = res.getWriter();
// .. Seitenerzeugung folgt
…
}
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-40-
20
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Java Transaction API und Service
• JTA (Java Transaction API)
– Programmier-Schnittstelle für Ressourcen-Manager &
Transaktions-Systeme.
• Java Transaction Service (JTS)
– Standard Transaction Management API für Java
– Vom Herstellern vom Transaktions-Manager implementiert
• Zugang zu transaktionsorientierten Umgebungen (Prozeßmonitore,
Transaktionsmanager,..)
• Integration klassischer TP-Monitore, wie CICS ohne weiteres
möglich
• Was nutzen uns Transaktionen? → Beispiel
„Kontenbewegung“
– Atomicity, Consistency, Isolation, Durability
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-41-
Transaktionen – einige Aspekte
• Container Managed
– Container definiert, wann eine Transaktion anfängt und endet
– Einfache Programmierung, da Delegation an Container
– Typisch: Transaktion startet direkt vor dem Aufruf einer
Session-EJB-Methode und endet direkt nach der Methode
– Keine verschachtelten Transaktionen
– Transaktion (welche Methode soll transaktionell sein) wird
beim Deployment definiert
• Program Managed
– „Do it yourself“
– Stateful Session Beans erlauben Transaktionen über mehrere
Aufrufe hinweg (lange Transatkionen können problematisch
sein)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-42-
21
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Container Managed - Transaktionskontrolle
• Was soll beim Aufruf von einer EJB zur anderen in
einer Transaktion passieren? Welche „Kontext“ ist
gültig?
Caller
Callee
TX1
m1() m1() {
...
b2.m2();
...
}
m2()
m2() {
...
}
TX?
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-43-
Container Managed – Transaktionskontrolle (2)
Attribute
Required
Required
RequiresNew
RequiresNew
Caller‘s Transaction
Callee‘s Transaction
none
T1
T2
none
T2
T1
T2
T1
none
error
Mandatory
Mandatory
T1
T1
none
none
NotSupported
NotSupported
T1
none
none
none
T1
T1
none
none
T1
error
Supports
Supports
Never
Never
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-44-
22
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Program Managed Transaction - Beispiel
Public void doStuff() {
UserTransaction ut = context.getUserTransaction();
try {
ut.begin();
// tu irgendwas wichtiges
..
// das könnte auch auf mehrere Methoden in einem
// stateful session Bean verteilt sein!
ut.commit();
} catch (Exception ex) {
// die Transaktion nicht durchgeführen
ut.rollback();
}
}
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-45-
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-46-
23
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Middleware
• Komponente, die zwischen 2 oder mehr Programmen
vermittelnd arbeitet.
• Eigenschaften (gewünscht):
– Verstecken von Verteilung und Heterogenität (location
transparency, access transparency)
– Formatkonvertierung
– Effizienter Transport, preiswerte Verpackung (Marshalling)
– Unterstützung des Auffindens der Kommunikationspartner
(Directory-Services)
• Bemerkung: Middleware ist meist aber nicht immer
Software
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-47-
Konzepte
• Koppelung
– Enge/Starke Kopplung – synchrone Kooperation
– Lose/Schwache Kopplung
• Synchrone Kooperation
• Asynchrone Kooperation
• Arten
– Nachrichten
– Interfaces
• Zeit- und Transaktionsverhalten
• Dienstqualität (garantierte Auslieferung, weniger als 100%,..)
• Kommunikationspartner
– 1:1, 1:n, n:m
• Compile-Time versus Run-Time
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-48-
24
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Varianten
• Basis: RPC
• Nachrichten-Orientiert
– Topics basierte Nachrichten (publish/subscribe)
– Message Queues (werden wir nicht vertiefen)
– Tupel-Space
• Schnittstellen-Orientiert
– Object Request Broker
– Connector-API
– RMI
• Datenorientiert
• Beispiele in Java, vorgestellte Konzepte sprachunabhängig
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-49-
Remote Procedure Call (RPC)
RPC = Basis vieler Inter-Prozeß-Kommunikations-Mechanismen
(wie z.B. DCOM, JavaBeans, CORBA), nicht transparent
Client
Server
Anwendung
Anwendung
Client Stub
Server Stub
Client Run-Time Library
Server Run-Time Library
Transport
Transport
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-50-
25
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-51-
Message Oriented Middleware (MOM)
• Messaging: lose Kopplung von Anwendungen;
(selbstbeschreibende) Nachrichten werden übertragen
• Komponenten werden somit die eine wohldefinierte Menge an
Nachrichten ausgezeichnet.
• Message Oriented Middleware (MOM) nutzt
–
–
–
–
publish/subscribe (Topic basierend)
message queuing (Kanal basierend)
Tupel-Spaces (Topic-basierend)
Ein Request/Reply ist ebenfalls möglich.
• Asynchronität (Message kann „durable“ sein)
• Einfache, standardisierte Interfaces, vielfältige Nachrichten (zu
interpretieren, XML, name-value)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-52-
26
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Java Message Service (JMS) – Beispiel einer MOM
• API für die Nutzung von (unternehmensweiten)
Messaging Systemen
• Einfache Programmierung von asnychronen, lose
gekoppelten Systemen
• EJBs können auf einfache Weise Nachrichten
verschicken und empfangen
– Nachrichtenankunft löst Event aus -> Methodenaufruf
• Zwei Arten
– Point to Point/Queues – 1 Nachricht hat genau 1 Empfänger
– Publish Subscribe – jeder Subscriber erhält eine Nachrichten
Kopie
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-53-
MOM: Topic basierte Schnittstellen
Producer1
Producer2
Message Broker
Consumer X
Consumer Y
subscribe (a,b)
publish(a)
publish(a)
subscribe(a,b)
publish(b)
publish(b)
publish(b
)
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-54-
27
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
MOM: Topic Basierte Schnittstellen: Request Publisher
• Initialisierung
session
= connection.createTopicSession(
transacted, ackMode);
topic
= session.createTopic(”warenkorb");
publisher = session.createPublisher(topic);
• Nachricht erzeugen
message
= session.createMapMessage();
message.setString(„Funktion“,“add“);
message.setString(„produktID“,12345); //...
• Nachricht versenden
publisher.publish(message);
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-55-
MOM: Topic Basierte Schnittstellen: Request Subscriber
• Initialisierung
session
= connection.createTopicSession(..);
topic
= session.createTopic(”warenkorb");
subscriber= session.createSubscriber(topic);
• Listener aufsetzen
consumer = new TopicListener();
subscriber.setMessageListener(consumer);
• Listener wird aufgerufen bei Nachrichtenerhalt
void onMessage(Message message);
• message.getMapNames() & weitere getFunktionen: jeder Wert der Nachricht aufrufbar
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-56-
28
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
MOM: Topic Basierte Schnittstellen: JMS Reply
• Nun ist die Nachricht in der Komponente angekommen.
• Weiterverarbeitung als Black-Box (Auswertung von „Funktion“,
„ProduktID“,...)
• Die interne Repräsentation interessiert gar nicht! D.h. die
Komponente praktiziert
– Trennung von Interface und Implementation
– Wahlfreiheit, die Komponente auszutauschen!
• Antwort an Client
–
–
–
–
Client ist ebenfalls geeignet registriert (Subscriber mit onMessage(..))
Server schickt seinerseits einen Request (benötigt aber keinen Reply)
Client empfängt damit die Antwort
Hilfsmittel: Message von Client an Server beinhaltet
setJMSReplyTo(Destinitation to) bzw. ein get dazu
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-57-
Topic Basierte Middleware: JMS - sonstiges
• Nachrichten Formate
– TextMessage, BytesMessage, MapMessage (Hashtable),
StreamMessage, ObjectMessage
• Quality of Service
– Persistent/non-persistent delivery
– Prioritäten, „time to live“, Transaktionen
• „Threaded“ Programmier-Modell
• Outside the JMS spec:
– Security services
– Management services
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-58-
29
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Message Queue
Producer1
Producer2
1: a
3: c
2: b
4: d
| | | | | |c|a|
5: a
7:
| | | | | |d|b|
Consumer1
d
6: b
Consumer2
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-59-
Message Queue API – JMS – Writer
• Initialisierung
factory
= context.lookup(..);
conn
=
factory.createQueueCommunication(..);
Session
= conn.createQueueSession(..);
queue
= session.createQueue(„aQueue“);
sender
= session.createSender(queue);
• Nachricht erzeugen
message
= session.createObjectMessage(…);
• Nachricht versenden
sender.send(message);
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-60-
30
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Message Queue API – JMS – Consumer
• Initialisierung
Session
queue
receiver
= conn.createQueueSession(..);
= session.createQueue(„aQueue“);
= session.createReceiver(queue);
• Listener aufsetzen
consumer = new MyConsumer();
receiver.setMessageListener(consumer);
• Listener wird aufgerufen bei Nachrichtenerhalt
void onMessage(Message message);
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-61-
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-62-
31
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Tupelspace API für JMS
• Wichtigste Primitive:
–
–
–
–
write
read, readIfExists
take, takeIfExists
notify
• Nachrichten „Anpinnen“
Message msg
= new Message("Hello World",0);
JavaSpace space = SpaceAccessor.getSpace();
space.write(msg, null, Lease.FOREVER);
• Nachricht „lesen, aber nicht anhängen“
Message template = new Message(); //...
Message result
= (Message) space.read(
template, null, Long.MAX_VALUE);
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-63-
Tupel-Space
Participant2
write
Message2
Message1
write
Participant1
e
tak
rea
Participant3
Participant4
write
Message3
d
read
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
Participant5
-64-
32
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Agenda
• Komponentenmodelle & Middleware
–
–
–
–
–
–
Begrifflichkeiten
J2EE
Services
Middleware
Messaging / JMS
Tuple Space
• Für Interessierte ein kurzer Exkurs: „RMI, CORBA
und dahinter…“
– Wie funktioniert Kommunikation allgemein in Java?
– Wo kommt der Mechanismus her, wie geht es weiter?
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-65-
Java Remote Method Invocation RMI
• Kommunikation für verteilte Java-Anwendungen
– Aufruf von Methoden in einer anderen JVM, auf einem
anderen Host
– Referenz auf das „entfernte“ Objekt durch
• Bootstrap Naming Service von RMI oder
• über (Aufruf-) Argument bzw. Rückgabewert
– Ein „Server“ kann gleichzeitig wiederum „Client“ sein
• Java Objekt Serialization
– Speichern und Zurückholen von Java Objekten
– somit Zustand serialisiert über einen Stream kommuniziert
(read/write wie bei einer Datei)
• Basis-Kommunikationsmechanismen: Sockets
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-66-
33
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
RMI Ablauf
JNDI
1: lookup
Stub
2: get
Java
JavaVM
VM
Java Applikation
3: call
8: result
Java
JavaVM
VM
5: call OBJ
4: call Skeleton
Stub
Netz
Skeleton
7: result to Stub
Java Object
6: return result
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-67-
Java RMI over IIOP
• RMI-IIOP (Remote Method Invocation - Internet InterORB Protocol)
– RMI nutzt das Corba-Protokoll IIOP
– Brückenfunktion: Mixed Language Programming
• IIOP (Internet Inter-ORB Protocol)
– Kommunikationsprotokoll von CORBA
– Standard-Protokoll: von jedem ORB unterstützt
– Besteht aus GIOP und TCP/IP.
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-68-
34
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Common Object Request Broker (ORB) Arch.
Object
Implementation
Client
Interface
Repository
Dynamic
Invocation
Client IDL
Stubs
ORB
Interface
Dynamic
Static
Skeletons Skeleton
Interface
Basic
Object
Adapter
Implementation
Repository
Object Request Broker
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-69-
Bsp: CORBA IDL / API
• Definition eines Kontraktes (Schnittstellendefinition)
module service {
interface ServerManager {
Server newServer(in string name);
};
interface Server {
void alive(in string name);
void query(in string request, out string
reply);
}};
• Umsetzung erfolgt sprachenabhängig.
• CORBA sorgt dafür, diesen Dienst verteilt nutzen zu können.
• Nach dem Binden an Naming/Directory Service transparent.
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-70-
35
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
CORBA
• Ortstransparenz
• bedingt Zugriffstransparenz (naming service)
NamingServer
2
lo
up
ok
1r
eg
ist
er(
)
()
3 execute()
Client
Server
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-71-
Webservices
•
•
Weiterentwicklung von CORBA, RMI, DCE, …
Funktionsaufruf via standardisiertem Mechanismus übers Internet
Backend Components
Naming Service
UDDI
Component
J2EE-component
register
WSDL
lookup
Web Service
Access
SOAP/HTTP
Client
CORBA-CCM
Legacy
JMS-Component
DB
Component
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-72-
36
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Java und dahinter… „Java und .NET - JUMP
Ca. 20 Sprachen
Java
C#
…
VB.Net
Compiler
Compiler
Compiler
Compiler
Compiler
Compiler
Compiler
Compiler
Java
ByteCode
MSIL
JUMP
Converter
Class
Loader
Laden
• via Filesystem
• via Netz
Visual Studio .NET
Common
Common
Language
Language
Runtime
Runtime
CLR
CLR
.NET Framework
• MSIL: Microsoft Intermediate Language
• JUMP: Java User Migration Path (to Microsoft .NET)
Nur pure Java – Keine Unterstützung für API´s wie RMI
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-73-
Fragen beim Einsatz eines Komponentenmodells (hier
J2EE)
•
Architektur
–
–
–
–
–
•
System in die Schichten zerlegen
Entscheiden wo welches Objekt ‚lebt‘
Benötigte Services & deren ‚Service Manager‘ identifizieren
Eigene Service-Architektur entwickeln (was bietet man selbst als Service)
Definieren des Services API (XML ?)
Transaktionsmodel
– Art benötigter Transaktionen festlegen
– Entscheiden ob und wie write-write Konflikte erkannt werden
•
Objekt Zustand und Verteilung
– So wenig Objekte verteilen wie nötig
– Zahl der remote Referenzen gering halten
– Kommunikationsvolumen gering halten
• Serialisierte Objektgeflecht nur wenn unbedingt notwendig
→ besser kleine Teile, Leichtgewichtige Objekte schicken, State Objekte,
Application Objekte (als „Sammler“)
• Nur vom Client benötigte Daten senden
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-74-
37
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Fragen beim Einsatz eines Komponentenmodells (hier
J2EE)
•
Skalierung des Systems
– Anforderungen?
• Zahl konkurrierende Benutzer
• Antwortzeiten?
– Stateful versus Stateless Session Beans
•
•
•
•
Stateless Beans können von vielen Sessions benutzt werden
aber Session Status Informationen müssen geeignet abgelegt werden
HTTPSession? Beans? Datenbank?...
Zahl stateful Beans die zu verkraften sind
– EJB versus Java Classes
• EJB sind „Schwergewichte“ → Systemlast im EJB Container.
• Mischung aus Entity Objekten und abhängigen, normalen Java-Objekten
– Einsatz von Pooling-Strategien
– Behandlung grosser Ergebnismengen
•
O/R mapping
• Komponenten mit dem Ziel der Autonomie entwickeln
• Definiere / Nutze Standards für „schlanke“, einfache und kohärente
Schnittstellen
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
-75-
Literatur
• Bücher
–
–
–
–
–
–
Professional EJB, Wrox
Business Component Factory, Herzum, Wiley
Software Reuse, Jacobson et al, Addison Wesley
Client Server Survival Guide, Robert Orfali et al., Wiley
Java Enterprise in a Nutshell, Flanagan et al, O‘Reilly
Objekt-Spektrum, Java Magazin,..
• WWW
– Cetus-Links (www.cetus-links.org)
– Natürlich: www.java.sun.com
• Empfehlung: Java (J2EE) erlaubt auf einfache Weise, mit Web
und Komponenten Implementierungen durchzuführen →
Spielen Sie damit!
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-76-
38
Einführung in das Software-Engineering - Design: Komponenten &
Middleware
Sommersemester 2002
Übung
• Nun nach dem GUI unserer Bank die entsprechende Business
Logik realisieren
– Wahlweise einfache Java Klassen (empfohlen)
– Oder für Mutige EJBs (Sven fragen – JBoss)
• Hinweis: alle persistenten Zugriffe (- das was wir gerne in einer
DB hätten -) simulieren (Konstante Objekte o.ä.)
Web-Server
Web-Client
Servlets
JSP
Java Bean
Oder EJB
Const.
JDBC
DB
Sommersemester 2002 Einführung in das Software-Engineering - Design: Komponenten & Middleware
Dr. Walter Kuhn
-77-
39
Herunterladen