RMI (remote method invocation)

Remote Method Invocation (RMI) bezeichnet eine spezifische Methode der Programmiersprache Java zum entfernten Aufruf von Methoden und Zugriffsvariablen. Dabei kommt es zu einer automatischen Generierung von sogenannten Stub- und Skeletonklassen durch die Laufzeitumgebung. Beispielsweise kann ein Client Methoden auf dem Server wie ganz normale Java-Funktionen aufrufen. Mit RMI wird ein transparentes Verschicken von Objekten - inklusive der diesbezüglichen Funktionen - sowie ein dynamisches Nachladen von Objektklassen unterstützt. Eine zwischen Objekten alternative Kommunikation nennt sich Remote Procedure Call (RPC), mit welcher dann ebenso in externen Programmen Methoden aufgerufen oder auch Verfahren ausgeführt werden können. Die Anwendungsgebiete von RMI sind vor allem in klassischen Client-Server-Architekturen zu finden.


Der Ausgangspunkt für RMI war die Realisierung eines verteilten Objektmodells in Java, und dabei die Interaktion von Remote-Objekten ähnlich der von lokalen Objekten zu gestalten. Unter Remote-Objekten versteht man in diesem Zusammenhang solche, die sich entweder auf entfernten, externen Rechner-Systemen befinden oder aber getrennt auf einer autarken Java Virtual Machine (JVM) laufen. Zur Kommunikation stellt RMI verschiedene - zugeschnitten auf den spezifischen Zweck - Protokolle zur Verfügung. Dabei ist Java Remote Method Protocol (JRMP) - oder auch Wire-Protocol genannt - das implementierte Standardprotokoll. Mit RMI IIOP steht ein Protokoll zur Integration in der Common Object Request Broker Architecture (CORBA) - ein weiterer Mechanismus zur verteilten Anwendungsprogrammierung - bereit. Mit RMI über HTTP getunnelt steht eine Möglichkeit zur Umgehung von Firewalls zur Verfügung. Und letztendlich steht mit RMI und der Verschlüsselung über Secure Socket Layer (SSL) ein Mechanismus zur sicheren Kommunikation bereit.

In der Java-Standardumgebung sind in der RMI-Klassenbibliothek alle notwendigen Methoden und Mechanismen implementiert. Die Verwendung von entfernten Objekten auf die gleich Weise wie bei lokalen Objekten sowie Methoden in Remote-Objekten ähnlich wie lokale Aufrufe zu behandeln, werden durch diese Klassenbibliothek unterstützt. Ein höher entwickelter Mechanismus sorgt dafür, dass Methoden von Remote-Objekten aufgerufen werden können, um Objekte vollständig oder in Teilen als Wert oder referenzierte Adresse weiterzugeben. Zusätzlich implementierte Mechanismen zur Behandlung von Ausnahmen wie beispielsweise Kommunikationsfehlern im Netz, die bei der Ausführung von Remote-Operationen durchaus vorkommen können, sind weitere Bestandteile der Klassenbibliothek. Das java.rmi-Paket enthält die allgemeinen RMI-Schnittstellen sowie die entsprechenden Klassen und Ausnahmen.

RMI-Ebenen

RMI-Ebenen

Hierzu integriert RMI drei verschiedene Ebenen, die von den einzelnen Methodenaufrufen abhängig von der spezifischen Anwendung - externes oder dasselbe System mit unterschiedlichen JVMs - durchlaufen werden. Die Abbildung verdeutlicht die Zusammenhänge und Aufgaben dieser Ebenen.

  • Die Transportebene behandelt die Netzwerkverbindung zwischen den Systemen.
  • Die Zusammenstellung des Methodenaufrufs und dessen Parameter sowie die Aufbereitung der Rückgabewerte ist die Aufgabe der Ebene "Remote Reference".
  • Mit den Ebenen " Stubs" auf dem Client sowie "Skeleton" auf dem Server agieren auf beiden Seiten quasi Stellvertreter-Objekte, die die Daten von der eigentlichen Implementierungsklasse übernehmen bzw. dieser die entsprechenden Ergebnisse zurückliefern. Das Stub-Objekt ist damit der lokale Stellvertreter für das Remote-Objekt.
Eine alternative Art der Kommunikation zwischen Objekten wird mit Remote Procedure Call (RPC) bezeichnet. Damit können über eine Netzwerkverbindung ebenso in anderen Programmen Methoden oder Verfahren aufgerufen werden. Dabei haben RMI und RPC einige Gemeinsamkeiten. Der Unterschied besteht jedoch darin, dass RPC auf dem Aufruf von Verfahren basiert, und die entsprechenden Argumente der jeweils anderen Seite nur in rekonstruierbarer Form zur Verfügung gestellt werden. Dagegen wird bei der RMI ein komplettes Objekt ausgetauscht, was die objektorientierten Grundsätze im Zusammenhang mit einem verteilten Objektmodell besser abbildet.

Grundsätzlich sind über die RMI eine weitreichende Kommunikation beliebig verteilter Systeme möglich, doch häufig wird RMI in traditionellen Client-Server-Architekturen eingesetzt, wobei eine Anzahl von Clients Verbindungen zu einem einzelnen Server unterhält, der deren Anfragen bearbeitet.

Informationen zum Artikel
Deutsch:
Englisch: remote method invocation - RMI
Veröffentlicht: 10.03.2010
Wörter: 612
Tags: #Remote-Dienste #Java
Links: Adresse, Architektur, Ausnahme, Client, Client-Server-Architektur