RMI steht für Remote Method Invocation. Es ist ein Mechanismus, der es einem Objekt, das sich in einem System (JVM) befindet, ermöglicht, auf ein Objekt zuzugreifen, das auf einer anderen JVM ausgeführt wird.
RMI wird zum Erstellen verteilter Anwendungen verwendet und ermöglicht die Fernkommunikation zwischen Java-Programmen. Es ist im Paket Java enthalten.rmi.
Architektur einer RMI-Anwendung
In einer RMI-Anwendung schreiben wir zwei Programme, ein Serverprogramm (befindet sich auf dem Server) und ein Client-Programm (befindet sich auf dem Client).
-
Innerhalb des Serverprogramms wird ein Remote-Objekt erstellt und die Referenz dieses Objekts wird dem Client zur Verfügung gestellt (mithilfe der Registrierung).
-
Das Client-Programm fordert die Remote-Objekte auf dem Server an und versucht, seine Methoden aufzurufen.
Das folgende Diagramm zeigt die Architektur einer RMI-Anwendung.
Lassen Sie uns nun die Komponenten dieser Architektur diskutieren.
-
Transportschicht – Diese Schicht verbindet den Client und den Server. Es verwaltet die bestehende Verbindung und richtet auch neue Verbindungen ein.
-
Stub – Ein Stub ist eine Repräsentation (Proxy) des Remote-Objekts auf dem Client. Es befindet sich im Client-System und fungiert als Gateway für das Client-Programm.
-
Skelett – Dies ist das Objekt, das sich auf der Serverseite befindet. stub kommuniziert mit diesem Skelett, um die Anforderung an das Remote-Objekt zu übergeben.
-
RRL(Remote Reference Layer) – Es ist die Schicht, die die Referenzen vom Client auf das Remote-Objekt verwaltet.
Funktionsweise einer RMI-Anwendung
Die folgenden Punkte fassen die Funktionsweise einer RMI-Anwendung zusammen −
-
Wenn der Client das Remote-Objekt aufruft, wird es vom Stub empfangen, der diese Anforderung schließlich an die RRL weiterleitet.
-
Wenn die clientseitige RRL die Anforderung empfängt, ruft sie eine Methode namens invoke() des Objekts remoteRef auf. Es leitet die Anforderung an die RRL auf der Serverseite weiter.
-
Die RRL auf der Serverseite übergibt die Anforderung an das Skelett (Proxy auf dem Server), das schließlich das erforderliche Objekt auf dem Server aufruft.
-
Das Ergebnis wird vollständig an den Client zurückgegeben.
Marshalling und Unmarshalling
Wenn ein Client eine Methode aufruft, die Parameter für ein Remoteobjekt akzeptiert, werden die Parameter in einer Nachricht gebündelt, bevor sie über das Netzwerk gesendet werden. Diese Parameter können vom primitiven Typ oder von Objekten sein. Im Falle eines primitiven Typs werden die Parameter zusammengestellt und ein Header angehängt. Wenn die Parameter Objekte sind, werden sie serialisiert. Dieser Vorgang wird als Marshalling bezeichnet.
Auf der Serverseite werden die gepackten Parameter entbündelt und dann die erforderliche Methode aufgerufen. Dieser Vorgang wird als Unmarshalling bezeichnet.
RMI-Registrierung
Die RMI-Registrierung ist ein Namespace, in dem alle Serverobjekte abgelegt werden. Jedes Mal, wenn der Server ein Objekt erstellt, registriert er dieses Objekt bei der RMIregistry (mit den Methoden bind() oder reBind() ). Diese werden unter Verwendung eines eindeutigen Namens registriert, der als bind name bekannt ist.
Um ein Remote-Objekt aufzurufen, benötigt der Client eine Referenz dieses Objekts. Zu diesem Zeitpunkt ruft der Client das Objekt mit seinem Bindungsnamen aus der Registrierung ab (mithilfe der lookup () -Methode).
Die folgende Abbildung erläutert den gesamten Prozess –
Ziele von RMI
Im Folgenden sind die Ziele von RMI aufgeführt −
- Um die Komplexität der Anwendung zu minimieren.
- Zur Erhaltung der Typsicherheit.
- Verteilte Speicherbereinigung.
- Minimieren Sie den Unterschied zwischen der Arbeit mit lokalen und Remote-Objekten.