RMI ist eine weitere Technologie, die es erlaubt, über ein Netzwerk auf einem entfernten Server Objekte zu referenzieren und deren Methoden aufzurufen. Es ist eine weitere Broker-Lösung, die von der Firma Javasoft erhältlich ist. RMI ist auf Java beschränkt und macht damit eine Definitionssprache, wie z.B. CORBA-IDL, unnötig. Da hier weder die Objektdienste noch die Funktionsvielfalt einer CORBA-Lösung zu finden sind, kann man bei dieser Technologie allenfalls von einer "CORBA light"-Implementierung sprechen. Allerdings unternimmt SUN Anstrengungen RMI über IIOP mit CORBA-Systemen kommunikationsfähig zu machen.
Ein RMI-System besteht aus drei Schichten:
* Der Stub/Skeleton-Schicht, Client-Seite Stub und Server-Seite Skeletons.
* Der Remote Referenz-Schicht
* Der Transport-Schicht
Abb. 23: RMI-Architektur
Quelle: JDK Dokumentation 1.2b3
Die oberste Schicht des RMI-Systems ist die Applikationsschicht. Soll von einem Client aus eine Methode eines entfernten Objekts aufgerufen werden, wird dieser Aufruf durch die einzelnen Schichten des RMI-Systems, wie oben zu erkennen, von der Client-Seite zur Server-Seite über die einzelnen Schichten durchgereicht.
Die Kommunikation zwischen Server und Client findet nicht direkt statt. Auf der Client-Seite wird eine Instanz einer Stub-Klasse verwendet, die für das entfernte Objekt steht. Die Stub-Klasse ist die Implementation der Schnittstelle des Remote-Objektes. Der Client hält somit eine Referenz zu einem lokalen Stub-Objekt.
Beim Aufruf einer Methode eines entfernten Objektes, wird in Wirklichkeit eine Methode des Stub-Objektes aufgerufen. Das Stub-Objekt kümmert sich, um das Verpacken der Parameter und um die Netzwerkfunktionen, die nötig sind, um den Methodenaufruf an die Skelett-Klasse des Servers weiterzuleiten. Das Skelett übersetzt den Methoden-Aufruf an das Server-Objekt und gibt den Rückgabewert an das Stub-Objekt zurück, das wiederum den Rückgabewert an den Client weiterleitet.
Der Anwendungsentwickler muß sich mit diesem Informationsweg nicht weiter auseinandersetzen, da die Stub- und Skelett-Klassen automatisch erzeugt werden.
Die Remoteschicht ist für die Gültigkeit eine Aufrufes verantwortlich. Hier wird überprüft, ob es sich beim Server um ein einzelnes Objekt oder ein Replikated Objekt handelt, das eine Kommunikation mit mehreren Clients erwartet.
Die Transportschicht ist für das Verbindungs-Setup zuständig. Die Transportschicht transportiert den Remote-Aufruf in die nächst höhere Schicht. Hier werden alle Vorbereitungen getroffen, die für den Client-Aufruf einer Methode eines entfernten Server-Objektes notwendig sind. Das g
gleiche gilt auch für den Rücktransport der Antwort.