19.1.1 | Broker-Implementierungen |
Sehr häufig werden Broker-Architekturen zur Kommunikation zwischen Komponenten in objektorientierten Sprachen wie z. B. Java oder C++ eingesetzt, da sie sich in diese Sprachen sehr gut integrieren lassen. Im Folgenden werden einige Broker-Architekturen kurz vorgestellt:CORBA und RMI haben sich mittlerweile als Kommunikationsstandards für Java-Anwendungen etabliert. Auch DCOM kann in Java-Anwendungen benutzt werden, meist nehmen die Entwickler jedoch Abstand davon, da es nicht auf so vielen Plattformen zur Verfügung steht und kein so offener Standard ist wie z. B. CORBA. CORBA wurde bereits einige Zeit vor RMI entwickelt, und es gab auch vor der Fertigstellung von RMI durch Sun bereits einige Klassen-Bibliotheken, mit denen man in Java die Möglichkeiten von CORBA nutzen konnte.
- CORBA (Common Object Request Broker Architecture)
Diese Architektur soll vor allen Dingen den Austausch zwischen Komponenten unterschiedlicher Sprachen verbessern. Sie wurde von der OMG (Object Management Group) als Standard für die Kommunikation zwischen verteilten Objekten spezifiziert. Implementierungen stehen für sehr viele Plattformen zur Verfügung.- RMI (Remote Method Inovcation)
RMI ist eine Architektur, die zunächst nur zur Kommunikation zwischen Java-Anwendungen eingesetzt werden kann. Client und Server müssen hierbei in Java programmiert werden. Dadurch, dass RMI seit dem JDK 1.1Bestandteil der Standardbibliotheken von Java ist, kann man RMI auch auf allen Plattformen benutzen, auf dem eine Java-Laufzeitumgebung ab Version 1.1 zur Verfügung steht.
- DCOM (Distributed Component Object Model)
DCOM ist eine verteilte Komponentenarchitektur, die von Microsoft entwickelt wurde. Sie basiert auf Schnittstellen, die im Netz sichtbar gemacht werden, und kann auch zur Kommunikation zwischen Komponenten eingesetzt werden, die in verschiedenen Sprachen implementiert wurden. Die Laufzeitbibliotheken für DCOM sind jedoch nur auf sehr wenigen Plattformen verfügbar.
Als Sun bekannt gab, dass in den Standardklassen des JDK 1.1 RMI als Kommunikationsmechanismus zur Entwicklung von verteilten Anwendungen enthalten sein würde, stellten sich viele Entwickler die Frage, warum eine zweite Architektur neben CORBA entworfen wurde, da CORBA damals bereits zum Standard der OMG verabschiedet war.
Deshalb werden im Folgenden die wesentlichen Unterschiede dieser beiden in Java bevorzugten Architekturen kurz vorgestellt:Diese Unterschiede zeigen, warum die Entwicklung von RMI neben dem bereits verfügbaren CORBA seine Berechtigung hatte. Außerdem wurde RMI recht schnell beliebt, da es mit dem JDK 1.1 sofort verfügbar und darüber hinaus auch kostenlos war. Freie CORBA-Implementierungen in Java fanden erst nach Einführung von RMI eine größere Verbreitung. Zunächst war man hauptsächlich auf die kommerziellen Produkte angewiesen, wie z. B. Visibroker für Java.
- CORBA ist eine Architektur, die für die Kommunikation zwischen Anwendungen genutzt werden kann, die in verschiedenen Sprachen implementiert sind. Die Funktionen eines CORBA-Server-Objekts kann man von jeder Sprache nutzen, für die eine CORBA-Implementierung zur Verfügung steht.
- Dadurch, dass RMI speziell für die Verwendung in Java konzipiert wurde, kann es auch speziell dort verfügbare Features nutzen. So verfügt RMI z. B. über einen »Distributed Garbage Collector«, der nicht mehr referenzierte Server-Objekte wieder freigeben kann.
- CORBA war für Java-Entwickler zunächst nicht wirklich intuitiv benutzbar, da die Server-Schnittstelle zunächst in der so genannten Interface Definition Language (IDL) spezifiziert wird. Dadurch muss der Programmierer auch die Grundkonstrukte der IDL kennen, was wiederum zusätzlichen Lernaufwand bedeutet.
- Zum Zeitpunkt, als RMI entwickelt wurde, konnte man Objekte nur per Referenz an CORBA-Operationen übergeben. Die Übergabe als Wert war nur für primitive Datentypen und zusammengesetzte Typen möglich. RMI konnte bereits seit Beginn Objekte als Wert übergeben (über den Mechanismus der Objekt-Serialisierung). Dadurch ist es mit RMI relativ einfach möglich, komplette Objekt-Bäume durch einen Methoden-Aufruf über das Netzwerk zu übertragen.
Die Grenzen zwischen RMI und CORBA verschwimmen jedoch zunehmend, da RMI mittlerweile auch das CORBA zugrunde liegende IIOP-Protokoll zur Kommunikation benutzen kann und CORBA inzwischen auch einen Mechanismus zur Übergabe von Objekten per Wert vorsieht.
Damit ist es prinzipiell möglich, aus RMI heraus Methoden in Objekten aufzurufen, die nicht in Java implementiert sind, bzw. mit CORBA serverseitige RMI-Objekte anzusprechen.