Design Patterns und CORBA

Transcription

Design Patterns und CORBA
Design Patterns und
CORBA
Heiko Abraham
[email protected]
21. Januar 2001
Seminarvortrag “Softwarearchitekturen”
Universität Freiburg
1
Seminar ’Softwarearchitekturen’
Inhalt
1.
Einleitung
Beispiel
2.
CORBA - Überblick
Eckpunkte
Architektur
3.
Entwurf mit CORBA
4.
CORBA und Design Patterns
Skallierung
Beispiele
5.
Zusammenfassung
H.Abraham
2
Seminar ’Softwarearchitekturen’
1. Einleitung
Beispiel: Informationsdienst
Situation:
vernetzte und verteilte Systeme
starke Heterogenität
Datenbank 1
Intranet
Internet
Datenbank 2
rechnerseitig:
Daten- und Funktionsverbund
– Redundanz, Lastverteilung
–
Anforderungen:
an die Softwarearchitektur
ISP
ApplicationsServer
GSM
Flexibilität
Wiederverwertbarkeit/Wartbarkeit
Interoperabilität
H.Abraham
3
Seminar ’Softwarearchitekturen’
1. Einleitung
Beispiel: Informationsdienst
Situation:
vernetzte und verteilte Systeme
starke Heterogenität
Datenbank 1
Intranet
Internet
rechnerseitig:
Datenbank 2
Daten- und Funktionsverbund
– Redundanz, Lastverteilung
–
Anforderungen:
an die Softwarearchitektur
ISP
ApplicationsServer
GSM
Flexibilität
Wiederverwertbarkeit/Wartbarkeit
Interoperabilität
Middleware kann helfen
H.Abraham
4
Seminar ’Softwarearchitekturen’
1. Einleitung
Beispiel: Informationsdienst
Situation:
Datenbank 1
vernetzte und verteilte Systeme
starke Heterogenität
Intranet
Internet
rechnerseitig:
Datenbank 2
Daten- und Funktionsverbund
– Redundanz, Lastverteilung
–
Anforderungen:
ISP
ApplicationsServer
GSM
an die Softwarearchitektur
Flexibilität
Wiederverwertbarkeit/Wartbarkeit
Interoperabilität
Middleware kann helfen
H.Abraham
Objekt-Bus und bestehende Technologie verwenden
5
Seminar ’Softwarearchitekturen’
Eckpunkte
2. CORBA - Überblick
CORBA = Common Object Request Broker Architecture
CORBA = Industriestandard, sehr stabil und offen
CORBA = Spezifikationsprodukt der Object Managment Group (OMG)
Festlegung der Object Managment Architecture (OMA)
– Kommunikation von Objekten über Object Request Broker (ORB)
– Definition der (Komponenten-) Schnittstellen, Interface Definition Language (IDL)
– Definition von allgemeinen Diensten (CORBAservices)
–
Bestehende Technologien verwenden
Objektorientiertes Modell für Client-Server-Architekturen verwenden
Implementierung in mehrere Programmiersprachen möglich
(Ada, Java, C++, C, Smalltalk, COBOL, Tcl, Perl)
H.Abraham
6
Seminar ’Softwarearchitekturen’
Architektur
2.CORBA - Überblick
Object Managment Architecture (OMA)
anwendungsnahe Dienste
zur Objektbearbeitung
CORBAfacilities
Application
Objects
Vertical Facilities
Healthcare
Finance
spezifische AnwendungsDienste
etc.
Horizontal Facilities
Distributed
Documents
Information
Managment
System
Managment
Task
Managment
allgemeine anwendungsübergreifende Dienste
Properties
Licensing
Collections
Query
Externalization
Persistence
Relationships
Time
Security
Concurrency
Transactions
Trader
Life Cycle
Naming
Events
Object Request Broker (ORB)
allg. Dienste zur
Objektbearbeitung
CORBAservices
H.Abraham
7
Seminar ’Softwarearchitekturen’
Architektur
2.CORBA - Überblick
Kurz und kleingedruckt : die CORBAservices
1.
Event-Service - Komponenten registrieren ihr Interesse an Ereignissen, die in einem Event-Channel gesammelt werden.
2.
Naming-Service - ermöglicht es Objekten, andere Objekte über ihren Namen zu finden.
3.
Life-Cycle-Service - Operationen zum kopieren, verschieben oder löschen von Objekten.
4.
Trader-Service - stellt die "Gelben Seiten" für Objekte bereit.
5.
Transaction-Service - stellt ein zweistufiges Bestätigungsprotokoll zur Verfügung, (flache / geschachtelte Transaktionen).
6.
Concurrency-Control-Service - umfaßt einen Lock-Manager, der im Auftrag Sperrungen vornehmen kann.
7.
Security-Service - Framework für Sicherheit ; (Vertraulichkeit, Integrität, Unwiderlegbarkeit und Abrechenbarkeit).
8.
Time-Service - für Uhrzeitsynchronisation oder zum Auslösen von zeitgetriggerten Ereignissen in verteilten Anwendungen.
9.
Relationship-Service - erlaubt es, dynamische Verknüpfungen zwischen Komponenten zu erstellen.
10.
Persistence-Service - zum Speichern von Objekten in Datenbanken über einheitliche Schnittstelle.
11.
Externalization-Service - eine Standardmethode, um mittels Streaming Daten zwischen Komponenten auszutauschen.
12.
Query-Service - stellt Abfrageoperationen für Objekte bereit.
13.
Collection-Service - ermöglicht es, Schnittstellen von Objekten in Collections zu sammeln und zu manipulieren.
14.
Licensing-Service - bietet Möglichkeiten, die Nutzung der Komponenten abrechnen zu können.
15.
Properties-Service - erlaubt es, Name-Wert-Paare mit beliebigen Komponenten zu assoziieren.
H.Abraham
8
Seminar ’Softwarearchitekturen’
Architektur
2.CORBA - Überblick
Komponenten von CORBA
Object
Implementation
Client
Dynamic Client
IDL
Interface Stubs
Invocation
ORB
Interface
ORB
Interface
Dynamic
Static
Skeleton
Skeletons Invocation
Object Adapter
Interface
Repository
Object Request Broker Core
ORB-Interface ist für alle ORBs identisch
static IDL-Stubs und static IDL Skeletons existieren pro Objekt
generell sind mehrere Object-Adapter möglich
H.Abraham
Implementation
Repository
9
Seminar ’Softwarearchitekturen’
Architektur
2.Corba - Überblick
Komponenten von CORBA - Operationsaufruf (mit Namensdienst)
Object
Implementation
Client
Dynamic Client
IDL
Interface Stubs
ORB
Interface
ORB
Interface
Invocation
Dynamic
Static
Skeleton
Skeletons Invocation
Object Adapter
Request
Interface
Repository
...
Naming
....
ORB
Implementation
Repository
find object, use name-service
Key="IOR:01f3ffbf..."
CORBAservice
316 Byte
Möglichkeiten, die ein CORBA-ORB bietet
statische und dynamische Methodenaufrufe
Verknüpfungen auf Hochsprachenebene
Ortstransparenz (ohne Programmieraufwand)
Eingebaute Sicherheit (Dienste: Security, Transation, ...)
Koexistenz mit existierenen Systemen (RPC, DCOM ...)
H.Abraham
10
Seminar ’Softwarearchitekturen’
3. Entwurf mit CORBA
Motivation für Programmierer: Wie komme ich zum Code?
Objekt-Spezifikation in IDL
IDL-Compiler
Client
Stub Body
Client Stub Klasse
Server Skeleton Klasse
erzeugen + Code
implementieren
erzeugen + Code
implementieren
Compiler / Linker
Client
Programm
H.Abraham
Server
Skeleton Body
Compiler / Linker
Server
Programm
11
Seminar ’Softwarearchitekturen’
Code-Beispiel (ORBit)
3.Entwurf mit CORBA
Beispiel - eine Zufallszahl vom Server erfragen:
interface Random {
long lrand48();
};
File: random.idl
Server Implementierung
#include
#include
#include
#include
#include
#include
$ orbit-idl random.idl
Client Implementierung
#include
#include
#include
#include
automatisch
generierte
Files
<stdio.h>
<stdlib.h>
<orb/orbit.h>
"random.h"
Client
int main (int argc, char *argv[]) {
CORBA_Enviroment ev;
CORBA_ORB orb;
CORBA_Object server;
CORBA_long answer;
Random random_client = CORBA_OBJECT_NIL;
random-common.c
random.h
random-stubs.c
<stdio.h>
"stdlib.h"
"string.h"
"signal.h"
"orb/orbit.h"
"random.h"
PortableServer_ServantBase__epv base_epv = { NULL, NULL, NULL };
POA_Random__epv random_epv = { NULL, Random_lrand48 };
POA_Random__vepv poa_random_vepv = { &base_epv, &random_epv };
POA_Random poa_random_servant = { NULL, &poa_random_vepv };
Server
random-skels.c
int main(int argc, char* argv[]) {
CORBA_ORB orb;
CORBA_Enviroment ev;
PortableServer_ObjectId objid = {0, sizeof("myRandom"), "myRandom"};
PortableServer_POA poa;
CORBA_char* objref;
signal(SIGTERM, exit);
CORBA_exception_init(&ev);
orb=CORBA_ORB_init(&argc,argv,"orbit-local-orb".&ev);
server=CORBA_ORB_string_to_object(orb, argv[1],&ev);
if(!server) { printf("cannot bind\n"); return 1; }
CORBA_exception_init(&ev);
orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev);
POA_Random__init(&poa_random_servant, &ev);
long rnd_num;
rnd_num=Random_lrand48(server, &ev);
printf("a random number: %d", rnd_num);
poa = (PortableServer_POA)CORBA_ORB_resolve_initial_references(orb, "RootPOA", &ev);
PortableServer_POAManager_activate(PortableServer_POA__get_the_POAManager(poa, &ev), &ev);
PortableServer_POA_activate_object_with_id(poa, &objid, &poa_random_servant, &ev);
CORBA_Object_release(server,&ev);
CORBA_Object_release((CORBA_Object)orb, &ev);
return 0;
random_client = PortableServer_POA_servant_to_reference(poa, &poa_random_servant, &ev);
if(!random_client) {
printf("cannot get objref\n");
return 1;
}
objref = CORBA_ORB_object_to_string(orb, random_client, &ev);
fprintf(stderr, "object-reference: %s\n", objref);
CORBA_free(objref);
};
File: random-client.c
CORBA_ORB_run(orb, &ev);
return 0;
}
CORBA_long Random_lrand48(Random _obj, CORBA_Enviroment * ev) {
CORBA_long retval;
retval = random();
return retval;
}
File:
Bsp: ORBit-0.5.0 (C)
H.Abraham
Compiler / Linker
Compiler / Linker
Client Programm
Server Programm
File: random-client
random-server.c
File: random-server
12
Seminar ’Softwarearchitekturen’
4. CORBA und Design Patterns
Motivation:
zuverlässige und “gute” Software-Entwicklung
schnelle Entwicklungszyklen
Wartbarkeit
Technik um Softwareteile oder -komponenten wiederzuverwenden
mittels Design Pattern:
Darstellung erfolgreicher (OO)-Lösungen zu bestimmten wiederkehrenden Problemen
Lösungen nicht als Code, sondern in sprachunabhängiger Form
H.Abraham
13
Seminar ’Softwarearchitekturen’
4.CORBA und Design Patterns
Wie Patterns beschreiben? (nach Vortrag “Patterns”, Seite 11)
! Name und Klassifikation
! Zweck
! Motivation
! Anwendbarkeit
! Struktur
! Mitwirkende (Pattern)
! Folgen
! Implementation
! Beispiel-Code
! Anwendungsbeispiel
! Verwandte Patterns
H.Abraham
Was tut das Pattern?
anhand eines Szenarios
In welchen Situationen diese Pattern benutzen?
Graphische Darstellung der Struktur des Pattern
teilhabende Klassen und Objekte und ihre Aufgabe
aus der Anwendung des Pattern
Einige Tips, Sprachabhängigkeiten, Schwierigkeiten
zur Illustration
aus echtem System
Unterschiede, Kombinationsmöglichkeiten
14
Seminar ’Softwarearchitekturen’
4.CORBA und Design Patterns
Skallierungsmodell
Ansatz: [2] Design Patterns nach Most Applicable Scale ("hauptsächliche Anwendungsebene")
in einem Skalierungsmodell ordnen
Objects
and
Classes
Verbund von Objekten
Microarchitecture
Wiederverwendung von Microarch.
Framework
Class Hierarchies
einzelnes ausführbares Programm
Application
Programming - Object Wrapping
Programme im Corba-Umfeld
System
Horizontal - Vertical - Metadata
Organisatorische Einheit
Enterprise
Reference Models - Infrastructures - Policies
Verbund von Enterprises
Global
Standards - Internet
(blau = nicht weiter beschieben)
H.Abraham
15
Seminar ’Softwarearchitekturen’
Skallierungsmodell-Detail
4.CORBA und Design Patterns
Application Design Patterns
Maximizing Parallism
Improving Object Implementations
Modifying Client Stubs and other Tricks
System Design Patterns
Prinziples of Object-Oriented Architecture
Fundamental Structural Patterns
Advanced System Design Patterns
Using OMG CORBAServices
Enterprise Design Patterns
Building an Organizational Infrastructure
Global Design Patterns
Role of Open Systems
Internet Design Patterns
H.Abraham
16
Seminar ’Softwarearchitekturen’
4.CORBA und Design Patterns
Skallierungsmodell (2)
Anmerkung:
genannte Design Patterns orientiert an CORBA
sind sehr allgemein gehalten
allgemeines Ziel:
gekapseltes Design
besseres Objekt-Managment
Kommunikation und Kooperation mit bestehenden Standards
Performance-Gewinn
senken des Netzwerk-Traffic
H.Abraham
17
Seminar ’Softwarearchitekturen’
4.CORBA und Design Patterns
Pattern an folgende Beispiele (einfacht):
! ORBlet
! ORB
Global Design Pattern
! Operating Enviroment
! Naming Service
! Distributed Callback
Application Design Pattern
Datenbank 1
Intranet
Internet
Datenbank 2
Bezug zum einleitenden Beispiel wird gesucht
' &%('
%"#&#
%(#
&#
"#
"
"$#
"$#
$#
" $#
" $"$"
ISP
ApplicationsServer
GSM
H.Abraham
18
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Global Design Pattern - ORBlet
Zweck:
Zugriff auf CORBA-basierende Anwendungen und CORBAservices über WebBrowser
Realisierung:
benutze Java-Applet (enthält CORBA client stubs)
ORB-Kommunikation über Internet Interoperability Protokoll (IIOP)
asynchrone Aufrufe verwenden
Struktur:
ORB
Java-Applet
Browser
Verteilte
Anwendung
(DBMS, Lotus, TP-Monitor)
z.B.: Client-PC am ISP
H.Abraham
19
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Global Design Pattern - ORBlet (2)
Beispiel:
Datenbank 1
Internet
Intranet
ORBit
JacORB
Anwendung
CORBA-IIOP
Java-Applet
Corba-Server
Browser
hole HTML-Seite
HTTP-Server
ISP
hole Applet
hole HTML-Seite (benutze Pattern Standards, z.B. HTML3.2)
hole Applet (Applet ist ein Pattern, das auf dem Pattern Java aufbaut)
starte Applet (im WebBrowser)
CORBA-IIOP
H.Abraham
20
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Enterprise Design Pattern - ORB
Zweck:
(transparentes) verteiltes Arbeiten (mit Objekten) in heterogener Umgebung.
unabhängig von Betriebssystem, Implementierungssprache und Lokalität
Realisierung:
ORB als vermittelnder Agent zwischen Client und Server ) OMA
Application Objects
CORBAfacilitiesObjects
Application Interface
CORBAfacility Interface
CORBA-Object Request Broker
CORBAservice Interface
CORBAservicesObjects
H.Abraham
21
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Enterprise Design Pattern - ORB (2)
Folgen:
separate Kompilation notwendig
reduzieren der Komplexität der Anwendung
separieren der Anwendung von der Infrastruktur
etwas Overhead
Ausblick:
über Half-Bridge die ORBs transparent verbinden
damit Lösung: administrativer Bedürfnisse, Diensttypen, Sicherheitsaspekte...
Server
Client
Half
Bridge
Half
Bridge
DSI
DII
ORB A
ORB B
oder DCOM
Domain A
H.Abraham
Domain B
22
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Enterprise Design Pattern - Operating Enviroment
Zweck:
Interoperabilität zwischen existierenden Produkten
Realisierung:
benutze Konvertierungs-Service und zentrale Datenbank
UNIX
Windows
Conversion
Service
MS-Word 97
FrameMaker
Communication Infrastructure
Rich Text
Format (RTF)
Linux
ApplixWare (Word)
H.Abraham
Windows
WordPerfect
Mac
Document
Database
MS-Word 5.0
23
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Enterprise Design Pattern - Operating Enviroment (2)
Folgen:
Unabhängigkeit von Hersteller und Produkt
genereller Informations-Import realisierbar
Änderungen in Daten verifizierbar
jede Einheit mit mehr Autonomie
Unterstützung von speziellen Tools ( )
höhere Produktivität)
Beispiel : einleitender Informationsdienst:
“Kunde” kann angeben, welches Datenformat er wünscht, oder
kann Konvertierungs-Service nutzen
Kommunikation über ORB
H.Abraham
24
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
System Design Pattern - Naming Service
Zweck:
Objekt anhand eines Namens im Namensraum finden bestimmen
Realisierung:
nutze repository zum speichern von Namen und Objekt-Referenz
Namensbindung relativ
zwei Grundoperatoren: store(bind) und retrieve(resolve)
Ort
Mexico
Japan
Hawaii
Ort.Mexico.Verkauf.Saft
zusammengesetzter Name
(compound name)
Verkauf
Objekt-Name
Obst
H.Abraham
Saft Wein
Kontextname
25
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
System Design Pattern - Naming Service (2)
Beispiel:
implementierter ORB kennt einige “initial services”
Beispiel - Code-Fragment (ORBit-C)
int main (int argc, char *argv[]) {
CORBA_Environment ev;
CORBA_ORB orb;
...
CosNaming_NamingContext name_srv; /* name server */
CosNaming_Name* serv_name;
/* This holds the name of our server */
CosNaming_Name* serv2_name;
/* This holds the name of our server2 */
factory fac, fac2;
/* the server-side factory object */
...
orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev);
...
/* get the name server from the ORB */
name_srv = CORBA_ORB_resolve_initial_references(orb, "NameService", &ev);
...
/* store(bind) the name of the object implementation */
CosNaming_NamingContext_bind(name_srv,serv_name, fac, &ev);
...
/* retrieve(resolve) the reference of the object implementation */
serv2_name=create_name(“Ort.Mexico.Verkauf.Saft”);
fac2 = CosNamingContext_resolve(name_srv, serv2_name, &ev);
...
}
H.Abraham
26
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Application Design Patterns - Distributed Callback
Zweck:
Client soll, während er auf einen Request wartet nicht blockieren
Realisierung:
synchrone Operatoren in (asynchrone) oneway-Operatoren umwandeln
Client mit Callback-Interface ausstatten
Struktur:
1) Client kehrt sofort
zurück und arbeitet
weiter
4) Client erhält das
Ergebnis bei Abfrage
der Event-Loop
H.Abraham
Operation
Callback
2) Server bearbeitet
den Request
3) Server ruft den
Client und liefert
das Ergebnis
27
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Application Design Patterns - Distributed Callback (2)
Folgen:
Client-Callbacks in verschieder Reihenfolgen
nur primitive Fehlerbehandlung (keine Exceptions)
Zustellung (oneway) nicht garantiert
Implementierung:
Ausgangsoperation (IDL):
interface app {
string get_info( in string my_data);
};
konvertieren zu:
interface app_callback; /* forward */
interface app { /* this interface defines the server object */
oneway void get_info( in string my_data, in app_callback my_callback);
};
interface app_callback { /* this interface must be implemented by the client */
oneway void callback( in string return_value, in long status);
};
H.Abraham
28
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Application Design Patterns - Distributed Callback (3)
Beispiel:
Konvertierungs-Service vom Informationsdienst
get_pdf()
Object1
1)
Client
4)
callback()
2)
get_txt()
H.Abraham
700ms
3)
Object2
200ms
29
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
5. Zusammenfassung
Zu CORBA:
für viele Betriebssysteme / Hochsprachen (frei) verfügbar
IDL-Schnittstelle nur mit Syntax
Design Pattern und CORBA:
Design Pattern nach Anwendungsebene skalliert
Buch: leider bei gewisse Pattern zu abstrakten Formulierungen
bzw. mageren Beispiele - damit kein erwünschter Praxisbezug
Ziel von viele Pattern: Performance / Netzwerk-Traffic verbessern
Gut: System-unabhängige Dienste vorhanden: (Naming, Event, Transaction, Lock...)
–
werden aber nur gering beachtet
Fraglich: Sicherheitskonzept auf Ebene des verwendeten ORB (Speicherraum)
H.Abraham
30
Seminar ’Softwarearchitekturen’
Beispiele
4.CORBA und Design Patterns
Quellen
[1] R. Orfali, D. Harkey, J. Edwards, Instant CORBA, Addison-Wesley, 1998, ISBN 3-8273-1325-2
[2] T. J. Mowbray und R. C. Malveau, CORBA Design Patterns, Wiley Computer Publishing, 1997, ISBN 0-471-15882-8
[3] John Siegel, CORBA - Fundamentals and Programming, Wiley Computer Publishing, 1996, ISBN 0-471-12148-7
[4] Folien “Patterns”, Seminar “Softwarearchitektur”, Nov. 2000, www.informatik.uni-freiburg.de
Ein Überblick über einige ORBs gibt http://www.vex.net/˜ben/corba/index.html
Abkürzungen
CORBA
= Common Object Request Broker Architecture
DII
= Dynamic Invocation Interface
DSI
= Dynamic Skeleton Invocation
OMA
= Object Managment Architecture
OMG
= Object Managment Group
ORB
= Object Request Broker
RPC
= Remote Procedure Call
IDL
= Interface Definition Language
H.Abraham
31