Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++,...
Transcript of Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++,...
![Page 1: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/1.jpg)
Prof. Dr. Oliver Haase
Verteilte SystemeVerteilte Objektorientierte Systeme II
1
![Page 2: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/2.jpg)
Überblick
2
Verteilte Objektorientierte Systeme 1
‣ RPC
‣ verteilte objektorientierte Architekturen
‣ Java RMI
Verteilte Objektorientierte Systeme 1I
‣ CORBA
![Page 3: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/3.jpg)
Einführung‣ Common Object Request Broker Architecture
‣ standardisiert von der Object Management Group (OMG)• Konsortium zahlreicher Firmen und Organisationen
• weiterer wichtiger Standard: UML
‣ sprachunabhängig, d.h. Server und Klienten können in unterschiedlichen Sprachen geschrieben sein.
‣ (De–)Marshalling erlaubt verschiedene Sprachen bei Sender und Empfänger
‣ außerdem betriebssystemunabhängig
3
CORBA ermöglicht das Entwickeln heterogener verteilter OO-Systeme
![Page 4: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/4.jpg)
Object Management Architecture‣ CORBA-Architektur: Object Management Architecture
(OMA)
4
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
![Page 5: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/5.jpg)
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
1
Object Request Broker (ORB)‣ Herzstück der OMA
‣ vermittelt (engl: to broker) Anfragen vom Klienten zum entfernten Serverobjekt.
‣ führt Marshalling und Demarshalling durch
‣ vergleichbar mit Remote-Reference–Schicht in Java RMI
‣ jeder Prozess mit CORBA-Objekten muss einen ORB besitzen
‣ORBs kommunizieren über standardisierte Protokolle miteinander
5
![Page 6: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/6.jpg)
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
2
Common Object Services (COS)‣ Basisdienste, die
• über den Methoden–Transport hinausgehen
• für sehr viele Anwendungen interessant sind
‣ Beispiele:• Naming Service
• Trading Service → attributbasierter Namensdienst
• Event Service→ asynchrone Kommunikation
6
![Page 7: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/7.jpg)
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
3
Common Facilities ‣ Dienste, die über die COS hinausgehen
‣ komplexer, spezieller, seltener genutzt
‣ untergliedert in die Bereiche
• Informationsmangement
• Benutzerschnittstellen
• Systemmanagement
• Taskmanagement
7
![Page 8: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/8.jpg)
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
4
Domain Objects‣ noch spezieller auf Anwendungsbereich zugeschnitten, z.B.
Telekommunikation, Bankwesen, Medizin
‣ vertikale Segmentierung
8
![Page 9: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/9.jpg)
Object Request Broker
Application
Objects
Common
Facilities
Common
Object Services
Domain Objects
5
Application Objects‣ eigentliche Anwendung, verteilt auf Server– und
Klientobjekte
‣ kommunizieren über ORB miteinander
‣ können COS, Common Facilities und Domain Objects verwenden
‣ nicht Teil des CORBA–Standards
9
![Page 10: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/10.jpg)
ORB: Methodenfernaufruf
‣ Klient ruft entfernte Methode am lokalen Stub auf (wird vom IDL–Compiler aus Schnittstellen–Spezifikation erzeugt)
‣ Stub verpackt die Parameter (Marshalling)
‣ORB ist zuständig für Lokalisieren des Serverobjekts(→ hosting ORB ist in Objektreferenz kodiert)
10
Stub DII
ORB
Klient Server
DSI Skeleton
Objektadapter
ORB
GIOP
![Page 11: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/11.jpg)
ORB: Methodenfernaufruf
‣ Server auf entferntem Rechner → ORB kommuniziert mit entferntem ORB über General Inter-ORB Protocol (GIOP)
‣ GIOP bezeichnet Familie von Protokollen, konkrete Instantiierung hängt von verwendetem Transportprotokoll ab
‣ Am häufigsten: Internet Inter-ORB Protocol (IIOP), oberhalb von TCP
11
Stub DII
ORB
Klient Server
DSI Skeleton
Objektadapter
ORB
GIOP
![Page 12: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/12.jpg)
ORB: Methodenfernaufruf
‣ORB auf Serverrechner übergibt Anfrage an Objektadapter
‣Objektadapter startet ggf. Server
‣Objektadapter übergibt Anfrage an Skeleton (generiert von IDL–Compiler)
‣ Skeleton entpackt Parameter (Demarshalling) → Server
12
Stub DII
ORB
Klient Server
DSI Skeleton
Objektadapter
ORB
GIOP
![Page 13: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/13.jpg)
Dynamische Methodenaufrufe
‣ dynamischer Methodenaufruf wird erst zur Laufzeit zusammengesetzt:
‣ Vorteil: Erlaubt Methodenaufrufe, die zur Compilierzeit nicht nicht bekannt sind.
13
// vereinfachter Pseudocodeinvoke(object, method, in_params, out_params);
![Page 14: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/14.jpg)
Dynamische Methodenaufrufe
‣ Dynamic Invocation Interface (DII) erlaubt Klienten, Server–Schnittstelle dynamisch zu erfragen und entsprechende Methodenaufrufe zu konstruieren (vgl. Java–Introspektion)
‣ Dynamic Skeleton Interface (DSI) nimmt solche Aufrufe serverseitig entgegen
14
Stub DII
ORB
Klient Server
DSI Skeleton
Objektadapter
ORB
GIOP
![Page 15: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/15.jpg)
Interface Definition Language‣ Die Implementierung von Applikationsobjekten kann in
verschiedenen Sprachen erfolgen
‣ Die Schnittstellenbeschreibung muss jedoch einheitlich erfolgen, damit • jeder Nutzer weiß, wie er ein Objekt ansprechen kann;
• Client-Stubs und Server-Skeleton daraus erzeugt werden können.
15
CORBA IDL (Interface Definition Language) ist eine programmiersprachenunabhängige
Spezifikationssprache zu diesem Zweck.
![Page 16: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/16.jpg)
Interface Definition Language‣ IDL beschreibt Signaturen (Prototypen) und benötigte
Datentypen, keine Implementierung!
‣ Syntax orientiert sich an C++
16
C-Klient
Java-Klient
C
Klienten
Stub Java
Klienten
Stub
C++
Klienten
Stub
IDL
Compiler
C++-Server
Stub
Methoden-
spezifikation
in IDL
C++-Server C++-Klient
generiert
automatisch
Netzwerk
Kommunikation
![Page 17: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/17.jpg)
IDL-Sprach-Mappings
‣ für jede unterstützte Sprache gibt es ein Mapping, derzeit: ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML.
‣ Abbildung von IDL auf Java nicht trivial, da IDL mächtiger als Java:• mehr Typkonstruktoren (Strukturen, Unions, …)
• IDL erlaubt, den Parameter–Übergabemechanismus zu spezifizieren
17
![Page 18: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/18.jpg)
IDL-Syntax
‣ Modul: zusammengehörende Definitionen einer Anwendung, enthält:• Datentypen (ähnlich wie in C++, d.h. Klassen, Strukturen,
Enums, Unions, …)→ werden auf (spezielle) Java-Klassen abgebildet
• Schnittstellen, bestehend aus- Methoden
- öffentlichen Instanzvariablen → werden auf Getters/Setters abgebildet
• Ausnahmen
18
![Page 19: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/19.jpg)
IDL-Syntax
‣ Methoden: Pro Parameter wird Übergabemechanismus spezifiziert: in, out oder inout.
‣ Problem: Java kennt nur Call-by-Value, d.h. in.
‣ Lösung: Abbildung von out- und inout-Params auf Behälterklassen.
19
![Page 20: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/20.jpg)
IDL-Syntax‣ Beispiel:
20
module QueueApp { struct Person { string firstname; string lastname; unsigned short age; }; exception EmptyQueueException { string message; }; interface Queue { boolean enqueue(in Person person); Person dequeue() raises (EmptyQueueException); boolean isEmpty(); };};
![Page 21: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/21.jpg)
CORBA Naming Service
‣ Common Object Service zum Beziehen entfernter Objekt-referenzen
‣ Naming Service ist selbst ein CORBA–Objekt
‣ Für Bootstrapping gibt es 2 ORB-Operationen, die COS-Dienste liefern• list_initial_references: liefert alle am lokalen ORB
verfügbaren COS–Dienste, u.a. Naming Service• resolve_initial_references: liefert Referenz auf Dienst mit
gegebenem Namen
‣ liefert Referenz auf einen Naming Context
21
![Page 22: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/22.jpg)
CORBA Naming Service
‣ Naming Context kann enthalten:• weitere Naming Contexts, und
• Name Bindings: Name → Objektreferenz
‣ erlaubt Aufbau hierarchischer Namensräume pro ORB-eigenem Naming Service
‣ Interoperable Naming Service (INS) erlaubt die Nutzung eines Naming Services von einem entfernten ORB aus• entfernter Naming Service muss beim Start des eigenen
ORBs in URL-ähnlicher Form konfiguriert werden.
22
![Page 23: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/23.jpg)
CORBA aus Server-Sicht
‣ Erstellen und Starten eines CORBA–Serverobjekts besteht aus folgenden Schritten:
1) Erstellen einer IDL–Spezifikation
2) Implementieren des Serverobjekts
3) Erzeugen einer CORBA–Referenz
4) Starten des Serverobjekts
23
![Page 24: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/24.jpg)
1) Erstellen einer IDL-Spezifikation‣ Zum Beispiel in einer Datei hello.idl wie folgt:
24
module HelloApp { interface Hello { string sayHello(in string name); };};
‣ Durch Aufruf von
$idlj -fserver hello.idl
erzeugt der Java-SDK-eigene IDL-Java-Compiler die serverseitigen Generate (z.B. Server-Skeleton)
![Page 25: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/25.jpg)
2) Implementieren des Server-Objekts
‣ Implementierung HelloImpl muss den generierten portablen Objektadapter HelloPOA erweitern:
25
class HelloImpl extends HelloPOA { public String sayHello(String name) { return (name.equals(“”)) ? “Hello!” : “Hello, “ + name + “!”; }}
‣ Beachte: Strings sind Basistyp in IDL → kein null–Werte möglich!
![Page 26: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/26.jpg)
3) Erzeugen einer CORBA-Referenz
26
‣ORB initialisieren
• dabei zu verwendende ORB-Implementierung angeben
‣ Referenz auf Root POA besorgen
‣ Root POA aktivieren
‣ Referenz auf Naming Service (Naming Context) besorgen
‣ Serverobjekt instantiieren, CORBA-Referenz erzeugen
‣ CORBA-Referenz an Naming Service binden
‣ORB starten
• hält den Server-Prozess am Leben
![Page 27: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/27.jpg)
3) Erzeugen einer CORBA-Referenz
27
class HelloServer { public static void main(String args []) throws Exception { ORB orb = ORB.init(args, null); POA rootpoa = POAHelper.narrow( orb.resolve_initial_references(”RootPOA”)); rootpoa.thePOAManager().activate(); NamingContextExt nameService = NamingContextExtHelper.narrow( orb.resolve_initial_references(”NameService”)); org.omg.CORBA.Object ref = rootpoa.servant_to_reference( new HelloImpl()); Hello server = HelloHelper.narrow(ref); nameService.rebind(nameService.to_name(”HelloServer”), server); orb.run(); }}
![Page 28: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/28.jpg)
4) Starten des Serverobjekts
‣ Starten des Naming Service
• horcht defaultmäßig auf Port 900 → darf auf Unix-System nur von Systemapplikation verwendet werden
‣ Starten des Serverapplikationsobjekts
28
$tnameserv -ORBInitialPort 1050
$java HelloServer -ORBInitialPort 1050
![Page 29: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/29.jpg)
CORBA aus Client-Sicht
‣ Umgang mit CORBA besteht auf Client-Seite aus drei Schritten:
1) Beschaffen einer entfernten Referenz
2) Aufruf entfernter Servermethoden
3) Starten des Klientenapplikationsobjekts
29
‣ Durch Aufruf von
$idlj -fclient hello.idl
erzeugt der Java-SDK-eigene IDL-Java-Compiler die clientseitigen Generate (z.B. Client-Stub)
![Page 30: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/30.jpg)
Schritte 1) & 2)
30
class HelloClient { public static void main(String args []) throws Exception { ORB orb = ORB.init(args, null); NamingContextExt nameService = NamingContextExtHelper.narrow( orb.resolve_initial_references(”NameService”)); Hello server = HelloHelper.narrow( nameService.resolve_str(”HelloServer”)); String name = JOptionPane.showInputDialog( ”Who do you want to greet?”); if (name == null) { name = ””; } System.out.println(server.sayHello(name)); }}
![Page 31: Verteilte Objektorientierte Systeme IIhaase/lehre/versy/slides/v10Verteilte… · ADA, C, C++, COBOL, Java, Lisp, PL/I, Python, Smalltalk und XML. ‣Abbildung von IDL auf Java nicht](https://reader033.fdocument.pub/reader033/viewer/2022052719/5f0731a37e708231d41bc606/html5/thumbnails/31.jpg)
3) Starten des Clientobjekts
31
‣ Analog zum Starten des Clientapplikationsobjekts
$java HelloClient -ORBInitialPort 1050