6HUYLFH'LVFRYHU\LQ &25%$ Markus Aleksy aleksy@wifo3.uni-mannheim.de
*OLHGHUXQJ Einleitung Die Basiselemente der Interoperabilität Problematik der Einstiegsreferenz Naming Service Trading Service Zusammenfassung
,QWHURSHUDELOLWlW Die Interoperabilität von CORBA basiert auf zwei Elementen: Definition eines Kommunikationsprotokolls Einführung einer eindeutigen Objektreferenzierung
3URWRNROOH Für die Kommunikation zwischen verteilten Objekten definiert CORBA zwei Protokolle: General Inter-ORB Protocol (GIOP) und das Internet Inter-ORB Protocol (IIOP)
3URWRNROOH GIOP ist ein abstraktes Protokoll definiert 8 verschiedene Nachrichtenformate (Request, Reply,...) IIOP spezifiziert, wie GIOP-Nachrichten über TCP/IP- Verbindungen ausgetauscht werden können ist das Standardprotokoll von CORBA
,QWHURSHUDEOH2EMHFW5HIHUHQFH Eine Interoperable Object Reference (IOR) besteht aus folgenden Elementen: einer Typidentifizierung einer Anzahl von Interoperability Profiles (IOPs) von denen jedes eine Internet-Adresse, eine Portnummer und eine Objektidentifikation enthält.
,QWHURSHUDEOH2EMHFW5HIHUHQFH Beispiel für eine IOR in Klartext: TypeID: IDL:Counter:1.0 Profiles: 1. IIOP 1.0 123.11.76.2 5001 OB/ID+NUM.IDL:Counter:1.0.0
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] (1) bind-aufruf Dämon (2) falls Server inaktiv Server starten (4) Objektreferenz mitteilen (3) Objekt(e) registrieren Client Nicht standardkonform! (5) Aufruf Server Implementation Repository Objektimplementierungen
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] CORBA definiert hierfür zwei Wege: die ORB-Operation resolve_initial_references() die ORB-Operationen string_to_object() und object_to_string()
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] Eingeführte Verbesserungen: Standardisierung von Kommandozeilenoptionen (ORBInitRef bzw. ORBDefaultInitRef) Spezifikation neuer - herstellerunabhängiger - Adressierungsarten (corbaloc, corbaname)
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] Aufbau der corbaloc-adressierung für das IIOP-Protokoll: corbaloc:[iiop]:[version@]host[:port]/ object-key Protokoll - standardmäßig wird IIOP benutzt und muß nicht extra angegeben werden Protokollversion (standardmäßig wird 1.0 eingesetzt) Objektidentifizierung (Details kennt nur der ORB) Name oder Adresse des Rechners auf dem der Server läuft Portnummer
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] corbaname-adressierung: weitgehend gleicher Aufbau, aber eine andere Semantik enthält Informationen über den Ort des Namensdienstes enthält Informationen über den Pfad innerhalb des Namensdienstes, welcher zu der gewünschten Objektreferenz führt
1DPLQJ6HUYLFH Aufgabe: Abbildung von Namen auf Objektreferenzen Funktionalität: Verwaltet Namen und Kontexte ein Kontext kann beliebig viele andere Kontexte und Namen enthalten (hierarchischer Aufbau) ein Name ist in einem Kontext eindeutig ein Name führt zu genau einer Objektreferenz eine Objektreferenz kann unter verschiedenen Namen angemeldet werden
1DPLQJ6HUYLFH Vorteile: symbolische (verständlichere) Namen ersetzen Referenzen Entkopplung von Client und Server zentrale Anlaufstelle Probleme: Ausfall des Namensdienstes (single point of failure) Skalierbarkeit
1DPLQJ6HUYLFH Welche Dienstanbieter gibt es? Auflistung aller Bindungen (Traversierung des Namensgraphen) ) Zeitaufwendig bei vielen Bindungen Einsatz von Iteratoren, die einen Abruf von Teilmengen ermöglichen
1DPLQJ6HUYLFH Grundsätzliche Vorgehensweise (1): (2) Objektreferenz(en) ermitteln Naming Service (1) Objekt(e) registrieren Client (3) Aufruf Server Objektimplementierungen
1DPLQJ6HUYLFH Grundsätzliche Vorgehensweise (2): (4) Objektreferenz(en) ermitteln Naming Service (6) Objekt(e) deregistrieren (3) Objekt(e) registrieren Objektimplementierungen Register - Anwendung Client (5) Aufruf Server (1,2) Objektreferenz(en) ermitteln Unregister - Anwendung
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] corbaloc::chili.wifo.uni-mannheim.de:7779/tradingservice Client chili.wifo.uni-mannheim.de Port 7777 Naming Service 7778 Counter Factory Counter Counter 7779 Trading Service
(UPLWWOXQJGHU(LQVWLHJVUHIHUHQ] corbaname::chili.wifo.uni-mannheim.de:7777/services#tradingservice Client chili.wifo.uni-mannheim.de Port 7777 Naming Service Naming Service (Root Context) 7778 7779 Services Applications Counter Factory Counter Counter Trading Service Trading Service Event Service Counter Factory
7UDGLQJ6HUYLFH Aufgabe: Vermittlung eines Dienstangebots an einen Dienstnutzer, wobei eine auf Diensteigenschaften basierte Suche eingesetzt wird. Die Nutzer des Trading Service lassen sich in zwei Kategorien einteilen: Dienstanbieter (Exporter) Dienstnutzer (Importer)
7UDGLQJ6HUYLFH Trader (1) bietet seinen Dienst an (2) ermittelt Zugangsinformationen Exporter Importer (3) Interaktion mit dem Dienstanbieter
7UDGLQJ6HUYLFH Den Kern der Trader-Spezifikation bilden die folgenden Schnittstellen: Lookup OfferIterator Register Link Proxy DynamicPropEval
=XVDPPHQIDVVXQJ Verbesserungen: Standardisierung der Kommandozeilenoptionen neue Adressierungsarten erleichtern die Lokalisierung der Server / Dienste Aber: aus der Sicht der Anwender immer noch unzureichend Probleme beim Ausfall / Migration
1XW]XQJGHV1DPHQVGLHQVWHV try { ORB orb = ORB.init(); org.omg.corba.object obj = orb.resolve_initial_references("nameservice"); NamingContext nc = NamingContextHelper.narrow(obj); NameComponent[] aname = new NameComponent[1]; aname[0] = new NameComponent(); aname[0].id = "PrintManager"; aname[0].kind = "Color"; org.omg.corba.object aobj = nc.resolve(aname); //... } catch(exception ex) { }