Remote Method Invocation
Remote Method Invocation (RMI, „Entfernter Methodenaufruf“) ist der Aufruf einer Methode eines entfernten Java-Objekts und realisiert die Java-eigene Art eines sog. RPC. „Entfernt“ bedeutet dabei, dass sich das Objekt in einer anderen Virtuellen Maschine befinden kann (die ihrerseits auf einem entfernten Rechner oder auf dem lokalen Rechner laufen kann). Dabei sieht der Aufruf für das aufrufende Objekt (bzw. dessen Programmierer) genauso aus, wie ein lokaler Aufruf, es müssen jedoch besondere Ausnahmen abgefangen werden, die zum Beispiel einen Verbindungsabbruch signalisieren können.
Auf der Client-Seite kümmert sich der sogenannte Stub – eine mit dem RMI-Compiler „rmic
“ erzeugte Klasse – um den Netzwerktransport. Der Stub muss entweder lokal oder über das Netz für den Client verfügbar sein.
Entfernte Objekte können zwar auch von einem bereits im Programm bekannten entfernten Objekt bereitgestellt werden, für die erste Verbindungsaufnahme werden aber die Adresse des Servers und ein Bezeichner (ein RMI-URL) benötigt. Für den Bezeichner liefert ein Namensdienst auf dem Server eine Referenz auf das entfernte Objekt zurück. Damit dies funktioniert, muss das entfernte Objekt im Server sich unter diesem Namen zuvor beim Namensdienst registriert haben. Der RMI-Namensdienst wird über statische Methoden der Klasse „java.rmi.Naming
“ angesprochen.
RMI bezeichnet außerdem ein Kommunikationsprotokoll, das für entfernte Aufrufe zwischen Java-Objekten verwendet wird, und eine Java-Standard-Klassenbibliothek, mit der diese Aufrufe realisiert werden können. Diese Klassenbibliothek ist Teil der Java 2 Standard Edition (J2SE). Alternativ kann auch IIOP als Kommunikationsprotokoll eingesetzt werden.
Ablauf
- Der Server registriert ein Remote Object bei der RMI-Registry unter einem eindeutigen Namen.
- Der Client schaut bei der RMI-Registry unter diesem Namen nach und bekommt eine Objektreferenz, die seinem Remote Interface entsprechen muss.
- Der Client ruft eine Methode aus der Objektreferenz auf (dass diese Methode existiert, wird durch das Remote Interface garantiert).
- Der Server gibt dem Client die Rückgabewerte dieses Aufrufes, oder der Client bekommt eine Fehlermeldung (z. B. bei einem Verbindungsabbruch).