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