| ORBs - Object Request Broker |
|
|
| Geschrieben von Michael Peuß | |
Was ist ein ORB?In einer verteilten Anwendung, in der die entfernten Programmteile über Sockets kommunizieren, würde man normalerweise sehr oft daran erinnert werden, dass es sich um eine verteilte Anwendung handelt, weil bei jedem Aufruf einer entfernten Methode immer wieder eine neue Socket-Verbindung aufgebaut werden muss und diese anschliessend auch wieder abgebaut werden muss. Eine bequemere Möglichkeit ist, wenn man die ganze Socket-Programmierung in eine lokale und eine entfernte jeweils seperate Klasse kapselt, die die enfernten Dienste so aussehen lässt, als ob sie lokal zur Verfügung stehen würden. Weil solche Klassen Anfragen zwischen lokalen und entfernten Objekten vermittelt, nennt man sie Object Request Broker (Objekt-Anfrage-Vermittler), kurz ORB. Aufgaben eines ORBsDie Aufgabe eines ORBs ist es, lokal eine Schnittstelle von jedem entfernten Dienst anzubieten. Der ORB muss dazu für jeden entfernten Dienst eine lokale Methode implementieren, die die Daten (Parameter) eines lokalen Aufrufers entgegen nimmt, über das Netz verschickt, das Resultat vom Netz entgegen nimmt und anschliessend wieder an den lokalen Aufrufer zurück gibt. Um die Sache am Anfang einfach zu halten, gehen wir vorerst davon aus, dass das lokale System keine Dienste anbietet, sondern nur Dienste vom entfernten System in anspruch nimmt. Deshalb wird im folgenden der lokale ORB als ClientORB und der entfernte als ServerORB bezeichnet. Später kann natürlich ein ORB sowohl ClientORB als auch ServerORB sein. Am Prinzip ändert sich dadurch ja nicht viel.
Kommunikation zwischen den ORBsWeil auch die ORBs nicht direkt die Methoden der entfernten ORBs aufrufen können, bekommen alle entfernten Methoden eine eindeutige Zahl (ID) zugeordnet. Diese Zahl muss natürlich beiden ORBs bekannt sein. Wenn ein ClientORB eine solche Zahl übermittelt, weiss der ServerORB sofort, welchen Dienst er aufrufen soll. Falls der Dienst Parameter benötigt, wartet er jetzt darauf die Parameter übermittelt zu bekommen. Wenn er diese bekommen hat oder wenn der Dienst keine Parameter braucht, ruft der ServerORB den Dienst auf, erhält einen Rückgabewert als Antwort (wenn die Methode nicht vom Typ void ist) und verschickt diese Antwort wieder über das Netz zum ClientORB. Folgendes Diagramm veranschaulicht das Muster (Design-Pattern) eines ORBs.
Java-Code eines ClientORBsDer folgende Java-Code implementiert einen ClientORB, der die entfernte Methode "summe()" anbietet. Diese Methode berechnet die Summe von zwei Zahlen. Die Main-Methode startet den Client, übergibt als Beispiel zwei Zahlen und schreibt das Ergebnis (hier die Zahl 7) auf die Konsole. Beschreibung des Codes:
Java-Code eines ServerORBsDer ServerORB hat die Aufgabe auf einem Port auf Anfragen von Clients zu warten. Wenn ein Client eine Methoden-Kennung schickt überprüft der Server ob noch weitere Parameter erforderlich sind. Er liest diese ggf. ein und ruft damit den für ihn lokalen Dienst auf. Dabei agiert er selbst dem Dienstleister gegenüber als Client. Wenn die Methode nicht vom Typ void ist, leitet der ServerORB das Ergebnis auf den Ausgabe-Stream. Damit hat er die Anfrage abgearbeitet und wartet weiter in der Endlosschleife auf Anfragen von Clients. In einer Main-Methode, die hier nicht angezeigt wird, wird lediglich der Server gestartet.
Beschreibung des Codes:
|



