Design Patterns und CORBA Heiko Abraham abraham@informatik.uni-freiburg.de 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: Datenbank 1 vernetzte und verteilte Systeme starke Heterogenität rechnerseitig: Intranet Internet Datenbank 2 Daten- und Funktionsverbund Redundanz, Lastverteilung Anforderungen: an die Softwarearchitektur ISP GSM Applications- Server Flexibilität Wiederverwertbarkeit/Wartbarkeit Interoperabilität H.Abraham 3
Seminar Softwarearchitekturen Beispiel: Informationsdienst Situation: 1. Einleitung Datenbank 1 vernetzte und verteilte Systeme starke Heterogenität rechnerseitig: Intranet Internet Datenbank 2 Daten- und Funktionsverbund Redundanz, Lastverteilung Anforderungen: ISP Applications- Server an die Softwarearchitektur GSM Flexibilität Wiederverwertbarkeit/Wartbarkeit Interoperabilität Middleware kann helfen H.Abraham 4
Seminar Softwarearchitekturen Beispiel: Informationsdienst Situation: 1. Einleitung Datenbank 1 vernetzte und verteilte Systeme starke Heterogenität rechnerseitig: Intranet Internet Datenbank 2 Daten- und Funktionsverbund Redundanz, Lastverteilung Anforderungen: an die Softwarearchitektur ISP GSM Applications- Server Flexibilität Wiederverwertbarkeit/Wartbarkeit Interoperabilität Middleware kann helfen Objekt-Bus und bestehende Technologie verwenden H.Abraham 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) Application Objects CORBAfacilities Distributed Documents Healthcare Information Managment Finance Vertical Facilities System Managment etc. Horizontal Facilities Task Managment anwendungsnahe Dienste zur Objektbearbeitung spezifische Anwendungs- Dienste allgemeine anwendungsübergreifende Dienste Object Request Broker (ORB) Events Naming Life Cycle Trader Transactions Concurrency Security Time Relationships Persistence Externalization Query Collections Licensing Properties CORBAservices allg. Dienste zur Objektbearbeitung 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 Client Object Implementation Dynamic Invocation Interface Client IDL Stubs ORB Interface ORB Interface Static Dynamic Skeletons Skeleton Invocation Object Adapter Interface Repository Object Request Broker Core Implementation Repository 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 9
Seminar Softwarearchitekturen Architektur 2.Corba - Überblick Komponenten von CORBA - Operationsaufruf (mit Namensdienst) Client Object Implementation Dynamic Invocation Interface Client IDL Stubs ORB Interface ORB Interface Static Dynamic Skeletons Skeleton Invocation Object Adapter Interface Repository Request ORB Implementation Repository... Naming... CORBAservice find object, use name-service Key="IOR:01f3ffbf..." 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 Server Skeleton Body Client Stub Klasse erzeugen + Code implementieren Server Skeleton Klasse erzeugen + Code implementieren Compiler / Linker Compiler / Linker Client Programm Server Programm H.Abraham 11
Seminar Softwarearchitekturen Code-Beispiel (ORBit) 3.Entwurf mit CORBA Beispiel - eine Zufallszahl vom Server erfragen: Client Implementierung #include <stdio.h> #include <stdlib.h> #include <orb/orbit.h> #include "random.h" }; int main (int argc, char *argv[]) { CORBA_Enviroment ev; CORBA_ORB orb; CORBA_Object server; CORBA_long answer; 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; } long rnd_num; rnd_num=random_lrand48(server, &ev); printf("a random number: %d", rnd_num); CORBA_Object_release(server,&ev); CORBA_Object_release((CORBA_Object)orb, &ev); return 0; File: random-client.c Client interface Random { long lrand48(); }; random-stubs.c $ orbit-idl random.idl automatisch generierte Files random-common.c random.h File: random.idl Server random-skels.c Server Implementierung #include <stdio.h> #include "stdlib.h" #include "string.h" #include "signal.h" #include "orb/orbit.h" #include "random.h" Random random_client = CORBA_OBJECT_NIL; 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 }; 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); POA_Random init(&poa_random_servant, &ev); 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); 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); CORBA_ORB_run(orb, &ev); return 0; CORBA_long Random_lrand48(Random _obj, CORBA_Enviroment * ev) { CORBA_long retval; retval = random(); return retval; } File: random-server.c Compiler / Linker Compiler / Linker Bsp: ORBit-0.5.0 (C) Client Programm File: random-client Server Programm File: random-server H.Abraham 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 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 H.Abraham 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 (blau = nicht weiter beschieben) Microarchitecture Framework Class Hierarchies Application Programming - Object Wrapping System Horizontal - Vertical - Metadata Enterprise Global Wiederverwendung von Microarch. Reference Models - Infrastructures - Policies Standards - Internet einzelnes ausführbares Programm Programme im Corba-Umfeld Organisatorische Einheit Verbund von Enterprises 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 Operating Enviroment Naming Service Distributed Callback Global Design Pattern Application Design Pattern Datenbank 1 Intranet Internet Datenbank 2 Bezug zum einleitenden Beispiel wird gesucht ISP GSM %#%#% &#&#& '#' (#( "#"#" $#$#$ Applications- Server H.Abraham 18
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Zweck: Global Design Pattern- ORBlet 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 Beispiel: Global Design Pattern- ORBlet (2) Internet Datenbank 1 Intranet ORBit Anwendung Corba-Server CORBA-IIOP hole HTML-Seite JacORB Java-Applet Browser HTTP-Server hole Applet ISP 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 Folgen: separate Kompilation notwendig Enterprise Design Pattern- ORB (2) 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... Client Domain A Half Bridge DSI ORB A Half Bridge DII Domain B Server ORB B oder DCOM H.Abraham 22
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Zweck: Enterprise Design Pattern- Operating Enviroment Interoperabilität zwischen existierenden Produkten Realisierung: benutze Konvertierungs-Service und zentrale Datenbank UNIX Windows Conversion Service FrameMaker MS-Word 97 Communication Infrastructure Rich Text Format (RTF) Linux Windows Mac Document Database ApplixWare (Word) WordPerfect MS-Word 5.0 H.Abraham 23
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Folgen: Enterprise Design Pattern- Operating Enviroment (2) 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 Zweck: System Design Pattern- Naming Service 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 Verkauf zusammengesetzter Name (compound name) Obst Saft Wein Objekt-Name Kontextname H.Abraham 25
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Beispiel: System Design Pattern- Naming Service (2) 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 Zweck: Application Design Patterns- Distributed Callback 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 Operation 2) Server bearbeitet den Request 4)Client erhält das Ergebnis bei Abfrage der Event-Loop Callback 3) Server ruft den Client und liefert das Ergebnis H.Abraham 27
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Folgen: Application Design Patterns- Distributed Callback (2) 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 1) Client get_pdf() callback() Object1 4) 700ms 2) get_txt() 3) Object2 200ms H.Abraham 29
Seminar Softwarearchitekturen Beispiele 4.CORBA und Design Patterns Zu CORBA: 5. Zusammenfassung 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 DII DSI OMA OMG ORB RPC IDL = Common Object Request Broker Architecture = Dynamic Invocation Interface = Dynamic Skeleton Invocation = Object Managment Architecture = Object Managment Group = Object Request Broker = Remote Procedure Call = Interface Definition Language H.Abraham 31