SOAP, CORBA u. RMI für Einsteiger

Autor:
Thomas Bayer
Orientation in Objects GmbH
Thomas Bayer
Thomas Bayer
Datum:November 2002

Wie funktionieren SOAP, CORBA und RMI?

Diese Einführung beschreibt leicht verständlich, wie verteilte Kommunikation funktioniert. Die hier beschriebenen Prinzipien gelten u.a. für die Middleware-Technologien RPC, DCOM, CORBA, RMI und SOAP.

Da ich von der tiefsten Pampa stamme, erläutere ich verteilte Kommunikation an einem ländlichen Beispiel. Mit etwas Mühe können sicher auch Stadtbewohner den Artikel nachvollziehen.

Hühnerfarm

Eine Hühnerfarm soll uns als Beispiel für eine Altanwendung dienen, die in ein verteiltes System umgewandelt wird. Die Hühnerfarm ist bereits etwas älter und wie Abbildung 1 zeigt aus einem Guss. Viele Erweiterungen und Bugfixes waren im Laufe der Zeit notwendig und sind in den Quellcode des Hofes eingeflossen. Das Geschäft der Farm läuft ausgezeichnet, allerdings sind die Strukturen für die Verwaltung nur für einen Benutzer ausgelegt. Bevor der Bauer einen Mitarbeiter einstellt, möchte er seinen Hof netzwerkfähig machen und auf eine neue technische Basis stellen. Bei dieser Gelegenheit soll auch die Architektur des Hofes überarbeitet werden.

Der Landwirt ist von verteilten, objektorientierten Systemen begeistert und möchte dies jetzt auch auf seinem Hof anwenden.

Monolithische Objektfarm aus einem Guss

Abbildung 1.) Die Hühnerfarm

Komponentenbildung

In einem ersten Schritt zerlegt der Bauer den Hof in einzelne Bausteine, die Komponenten. Abbildung 2. zeigt eine Komponente Ei, die einer Komponente Huhn einen Dienst anbietet. Das Huhn kann Nachrichten an das Ei senden. Die Nachrichten informieren das Ei, mit welcher Temperatur es ausgebrütet wird. Das Ei stellt für das Ausbrüten die passende Schnittstelle ausbrüten zur Verfügung, über die dem Ei, die Temperatur des Huhns mitgeteilt wird.

Beide Komponenten, Huhn und Ei befinden sich auf einem Rechner. Sie kommunizieren über lokale Aufrufe. In der Abbildung sehen Sie den Code, mit dem das Huhn, die Methode ausbrüten beim Ei aufruft und die Temperatur als Parameter übergibt. Die Schnittstelle des Eies passt wie ein Puzzelteil zu den Anforderungen des Huhnes.

Für das Huhn ist nur die Schnittstelle des Eies sichtbar. Der interne Aufbau des Eies ist versteckt und gut gekapselt.

Client und Server Komponente

Abbildung 2.) Die Komponenten Huhn und Ei

Die Trennung

Ei und Huhn sollen als nächstes räumlich getrennt werden. Ein Server wird das Ei aufnehmen und dem Huhn Zugriff über das Netzwerk gewähren. Leider verstehen die Hühner auf dem Hof des Bauern nur wenig über Netzwerke und jeder Versuch das Huhn zu verkabeln schlug bisher fehl. Ferner stellt die Henne das Brüten ein, wenn das Ei fehlt. Mit dem Eierklauen hat unser Bauer Erfahrung. Er kennt einen Trick, mit dem das Ei weggenommen werden kann und die Henne weiterhin glaubt, das Ei wäre noch da.

Schnittstellen

Abbildung 3.) Die Komponenten Huhn und Ei

Stellvertreter

Hühner gehören, trotz der Tatsache, dass sie des öfteren etwas ausbrüten, nicht gerade zur geistigen Elite. Sie sind leichte Opfer für Betrüger, die ihnen ihre Eier durch wertlose Gipseier austauschen. Nur sehr wenige Hühner sind in der Lage richtige Eier von Gipseiern zu unterscheiden.

Tatsächlich ist ein Gipsei äusserlich nicht von einem echten Ei zu unterscheiden. Es ist genauso eierförmig und kalt. Die Schnittstelle ausbrüten ist ebenfalls vorhanden. Das Huhn akzeptiert das Kuckucksei und brütet es aus, als wäre es ihr eigenes.

Das Ei soll ebenfalls glauben, es hätte sich nichts verändert und das Huhn sei noch da. Ein Ersatz für das Huhn ist schnell gefunden - ein Backofen dient als künstliches Huhn. Der Ofen wird auf 37 Grad eingestellt und setzt das Brüten fort.

Proxys
Abbildung 4.) Die Komponenten Huhn und Ei

Gänsemarsch

Leider sind aus den ersten Eiern, die im Ofen ausgebrütet wurden, keine Kücken geschlüpft. Der Ofen konnte anscheinend nicht das Huhn ersetzen. Vielleicht liegt es daran, dass Hühner nicht gleichmäßig Eier ausbrüten, sondern dass die Temperatur eines Huhns kleinen Schwankungen ausgesetzt ist. Um gesunde Kücken zu bekommen, könnte man den Temperaturverlauf eines brütenden Huhnes verwenden.

Ein Temperaturfühler im Gipsei kann die Temperatur des Huhnes entgegennehmen und über das Netzwerk an den Herd übermitteln. Dieser empfängt die Nachrichten vom Gipsei und stellt seine Heizstufe auf die gleiche Temperatur ein. Der Ofen sendet die Temperaturnachrichten über die ausbrüten Schnittstelle an das Ei weiter.

Abbildung 5. zeigt die vollständige verteilte Anwendung.

RPC Kommunikation über Draht
Abbildung 5.) Die Komponenten Huhn und Ei

Die Leitung zwischen Gipsei und Herd ist sehr dünn. Damit eine Nachricht über die Leitung übertragen werden kann, muss sie zerlegt und Buchstabe für Buchstabe durch die Leitung gedrückt werden. Auf der anderen Seite kommen die Buchstaben einzeln an. Damit der Empfänger, die Nachricht verstehen kann, müssen aus den Buchstaben erst wieder Angaben über Methode und Parameter zusammengesetzt werden. Die beiden Stellvertreter Gipsei und Ofen könnten sich um das Serialisieren und Deserialisieren der Nachrichten kümmern.

Abbildung 6 zeigt eine Vergrößerung der Leitung. Es ist zu erkennen, wie die Bestandteile einer Nachricht Buchstabe für Buchstabe über den Draht wandern.

Marshalling
Abbildung 6.) Gänsemarsch

Zustellung

Die "Fernsteuerung" des Ofens war erfolgreich. Nach wenigen Tagen schlüpft ein gesundes Kücken aus dem Ei. Der Bauer entscheidet sich zu expandieren und möchte zukünftig mehrere Eier gleichzeitig ausbrüten lassen. In einer Zuchtstation wird eine Reihe von Öfen aufgebaut, die weitere Eier aufnehmen können. Jedes Ei soll von seinem Mutter-Huhn, von dem es gelegt wurde, ausgebrütet werden, um eine gleichbleibende Qualität zu erzielen.

Über ein Netzwerk werden alle Hühnerställe mit einer Zuchtstation verbunden. Alle Nachrichten, an die Eier "purzeln" in der Zuchtstation aus der Leitung. Die Nachrichten müssen jetzt den richtigen Eiern zugestellt werden. Für eine korrekte Zustellung benötigen wir die Information, für welches Ei eine Nachricht jeweils bestimmt ist. Neben der gewünschten Methode und den Parametern übertragen wir zusätzlich einen Hinweis, auf welches Objekt wir uns beziehen, eine Art Objektid.

Dispatching
Abbildung 7.) Zustellung von Nachrichten

In Abbildung 7. wird das Ei mit der Nummer 2 mit 38 Grad ausgebrütet. Alle notwendigen Informationen werden über die Leitung übertragen.

Und was hat das mit SOAP, RMI und CORBA zu tun?

Die am Beispiel der Hühnerzucht aufgezeigten Prinzipien und Konzepte finden wir in verschiedenen Technologien der einzelnen Hersteller und Standardisierungsorganisationen.

Die Anhänger der jeweiligen Middleware Technologien und Protokolle grenzen sich durch unterschiedliche Begriffe für die gleiche Sache etwas ab, im Prinzip sind es aber die selben Dinge. Die folgenden Abschnitte erläutern kurz die verschiedenen Konzepte und stellen die Begriff in der jeweiligen Welt vor.

Komponenten

Ein Ei wird in CORBA mit Servant bezeichnet. Es lebt auf dem Server und stellt den Clients Dienste über seine Schnittstelle zur Verfügung.

In SOAP nennt man den Client auch SOAP Requestor. Er schickt eine SOAP Message, den Request an einen Web Service. Der Web Service verarbeitet den Request und schickt das Ergebnis in Form einer Response zum Client.

Stellvertreter

Für Gipseier bzw. Proxys, oder zu deutsch Stellvertreter gibt es eine ganze Fülle von Namen. Bei CORBA heißen die Proxys auf der Clientseite Stub und auf Serverseite Skeleton. Bei DCOM wird der Begriff DCOM Runtime verwendet. Im SOAP Umfeld stößt man öfter auf den Begriff Proxy.

Eine Frage, die unser Beispiel nicht beantwortet hat, ist: Woher kommen eigentlich die Gipseier? Sie werden keinesfalls von einem Gipshuhn gelegt. Stellvertreter müssen eine passende Schnittstelle bieten, die der Client verwenden kann. Eine komfortable Möglichkeit, um Stellvertreter mit passenden Schnittstelle zu bekommen, ist die Schnittstelle für die Generierung des Stellvertreters als Vorlage zu verwenden.

Schnittstellen

Die Schnittstelle oder das Interface wird bei RMI als Remote Interface bezeichnet, was auf Deutsch schlicht Entfernte Schnittstelle bedeutet. Passend zu einem Server Objekt wird ein Proxys mit identischer Schnittstelle für die Clients benötigt. Bei CORBA, RMI und SOAP können aus der Beschreibung einer Schnittstelle passende Stellvertreter generiert werden. Die Schnittstelle wird in CORBA mit der Interface Definition Language IDL und in SOAP mit der Web Service Definition Language WSDL beschrieben. Mit IDL Compilern oder Proxy Generatoren können aus den Beschreibungen der Schnittstellen die entsprechenden Stellvertreter generiert werden.

Marshalling

Die Stellvertreter oder die unter den Stellvertretern liegende Infrastruktur übernimmt die Aufgabe Objektreferenzen, Methodennamen, Parameter und Rückgabewerte in eine sequentielle Form zu bringen, damit die Daten über das Netzwerk übertragen werden können. Angeleht an das Aneinanderreihen von Eisenbahnwagons wird hierfür der Begriff Marshalling und Unmarshalling verwendet. Ein Rangierbahnhof wird heisst im Englischen auch Marshalling Yard. Als Anhänger von SOAP redet man von Serialisierung und Deserialisierung. Das Encoding gibt vor, wie die Daten serialisiert werden.

Kapselung

Das Verstecken der Implementierung hinter einer Schnittstelle finden wir in allen Technologien für entfernte Aufrufe. Der Client einer SOAP Schnittstelle weiß oft nicht, in welcher Sprache und auf welcher Plattform der Server betrieben wird. Dem Server bleiben die Details des Clients ebenfalls verborgen. Das gleiche gilt für CORBA, XML-RPC und REST. Bei der Remote Method Invocation RMI kann man davon ausgehen, dass man auf beiden Seiten eine Java Plattform vorfindet.

Dispatching

Das Zustellen von Methodenaufrufen übernimmt in CORBA der Object Request Broker oder kurz, der ORB. In SOAP übernimmt die Zustellung der SOAP Router der oft auch Dispatcher genannt wird. Dispatcher werden bei Java Implementierung oft mit Servlets realisiert.

Ist das alles wirklich so einfach?

Von der Grundidee schon. Die Spezifikation für das Web Service Protokoll XML-RPC umfaßt samt FAQ gerade mal sieben Seiten. Je nach Reife und Anspruch einer Technologie kommen weitere Dienste und Aspekte hinzu. CORBA ist ein Vertreter für eine recht umfangreiche Technologie, die sich in mehrere Spezifikationen aufteilt und sehr viel bietet.

Dieser Artikel hat gezeigt, dass verteilte Kommunikation keine Magie ist, und dass man sich in die Thematik einarbeiten kann.

Ich hoffe die Einführung hat Ihnen gefallen und freue mich über Feedback.

Thomas Bayer

Referenzen

SOAP Version 1.2 Part 0: Primer
(http://www.w3.org/TR/2002/WD-soap12-part0-20020626/)

XML-RPC Home Page
(http://www.xmlrpc.com/)

XML-RPC Homepage bei Userland

CORBA Spezifikationen
(http://www.omg.org/technology/documents/corba_spec_catalog.htm)

Zum Geschaeftsbreich Competence Center
Schulung
Lernen Sie in der SOAP Schulung Web Services mit Java zu erstellen.