Java RMI – Einführung

Advertisements

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.

RMI-Architektur

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 –

Registrierung

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.
Anzeigen



+