Java RMI - Einführung

RMI steht für Remote Method Invocation. Es ist ein Mechanismus, mit dem ein Objekt in einem System (JVM) auf ein Objekt zugreifen / es aufrufen kann, das auf einer anderen JVM ausgeführt wird.

RMI wird zum Erstellen verteilter Anwendungen verwendet. Es bietet Remote-Kommunikation zwischen Java-Programmen. Es ist im Paket enthaltenjava.rmi.

Architektur einer RMI-Anwendung

In einer RMI-Anwendung schreiben wir zwei Programme, a server program (befindet sich auf dem Server) und a client program (befindet sich auf dem Client).

  • Innerhalb des Serverprogramms wird ein Remote-Objekt erstellt und die Referenz dieses Objekts wird dem Client (unter Verwendung der Registrierung) zur Verfügung gestellt.

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

  • Transport Layer- Diese Schicht verbindet den Client und den Server. Es verwaltet die bestehende Verbindung und richtet auch neue Verbindungen ein.

  • Stub- Ein Stub ist eine Darstellung (Proxy) des Remote-Objekts auf dem Client. Es befindet sich im Client-System. Es fungiert als Gateway für das Client-Programm.

  • Skeleton - Dies ist das Objekt, das sich auf der Serverseite befindet. stub kommuniziert mit diesem Skelett, um die Anforderung an das entfernte Objekt weiterzuleiten.

  • RRL(Remote Reference Layer) - Es ist die Ebene, die die vom Client auf das Remote-Objekt vorgenommenen Verweise verwaltet.

Arbeiten einer RMI-Anwendung

Die folgenden Punkte fassen die Funktionsweise einer RMI-Anwendung zusammen:

  • Wenn der Client das entfernte Objekt anruft, 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 aufgerufene Methode auf invoke() des Objekts remoteRef. Es leitet die Anforderung an die RRL auf der Serverseite weiter.

  • Die RRL auf der Serverseite leitet die Anforderung an das Skeleton (Proxy auf dem Server) weiter, das schließlich das erforderliche Objekt auf dem Server aufruft.

  • Das Ergebnis wird vollständig an den Client zurückgegeben.

Marshalling und Unmarshalling

Immer wenn ein Client eine Methode aufruft, die Parameter für ein entferntes Objekt 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. Beim primitiven Typ werden die Parameter zusammengestellt und ein Header angehängt. Wenn es sich bei den Parametern um Objekte handelt, werden sie serialisiert. Dieser Vorgang ist bekannt alsmarshalling.

Auf der Serverseite werden die gepackten Parameter entbündelt und anschließend die erforderliche Methode aufgerufen. Dieser Vorgang ist bekannt alsunmarshalling.

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 (mitbind() oder reBind()Methoden). Diese werden unter einem eindeutigen Namen registriert, der als bekannt istbind name.

Um ein entferntes Objekt aufzurufen, benötigt der Client eine Referenz dieses Objekts. Zu diesem Zeitpunkt ruft der Client das Objekt mit seinem Bindungsnamen (mit) aus der Registrierung ablookup() Methode).

Die folgende Abbildung erklärt den gesamten Prozess -

Ziele von RMI

Es folgen die Ziele von RMI -

  • Minimierung der Komplexität der Anwendung.
  • Zur Wahrung der Typensicherheit.
  • Verteilte Speicherbereinigung.
  • Minimieren Sie den Unterschied zwischen der Arbeit mit lokalen und Remote-Objekten.