Movatterモバイル変換


[0]ホーム

URL:


Zum Inhalt springen
WikipediaDie freie Enzyklopädie
Suche

Remote Method Invocation

aus Wikipedia, der freien Enzyklopädie

Remote Method Invocation (RMI, deutsch etwa „Aufruf entfernter Methoden“), gelegentlich auch alsMethodenfernaufruf bezeichnet, ist der Aufruf einerMethode eines entferntenJava-Objekts und realisiert die Java-eigene Art desRemote Procedure Call. „Entfernt“ bedeutet dabei, dass sich das Objekt in einer anderenJava Virtual Machine 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 besondereAusnahmen (Exceptions) abgefangen werden, die zum Beispiel einen Verbindungsabbruch signalisieren können.

Auf derClient-Seite kümmert sich der sogenannteStub um den Netzwerktransport. DerStub muss entweder lokal oder über das Netz für den Client verfügbar sein. Vor dem Erscheinen derJava 2 Standard Edition (J2SE) in Version 1.5.0 war derStub eine mit dem RMI-Compilerrmic erzeugte Klasse. Ab der Version 1.5 ist es nicht mehr notwendig, den RMI-Compilerrmic aufzurufen. Das Erstellen desStubs wird von derJava Virtual Machine übernommen.

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 sich das entfernte Objekt im Server zuvor unter diesem Namen beim Namensdienst registriert haben. Der RMI-Namensdienst wird über statische Methoden der Klassejava.rmi.Naming angesprochen. Der Namensdienst ist als eigenständiges Programm implementiert und wirdRMI Registry genannt.

Kommunikationsprotokoll

[Bearbeiten |Quelltext bearbeiten]

RMI bezeichnet außerdem ein auf TCP/IP undJRMP basierendesKommunikationsprotokoll, 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 derJ2SE. Alternativ kann auchIIOP als Kommunikationsprotokoll eingesetzt werden. Für RMI sind zweiPorts reserviert. Port 1099 ist für die RMI-Registry reserviert, also den Namensdienst. Port 1098 ist für denActivator reserviert.

Komponenten

[Bearbeiten |Quelltext bearbeiten]
Remote Interface
ist ein Subinterface von java.rmi.Remote und beschreibt die Funktionen, die auf dem Server zur Verfügung stehen. Damit definiert es das Verhalten des entfernten Objekts (ohne dieses zu implementieren). Jede abstrakte Methode des Remote Interfaces muss in ihrer throws-Klausel eine RemoteException deklarieren[1].
Remote Object
stellt das entfernte Objekt dar und liegt auf dem Server. Es implementiert das Remote Interface und das Verhalten der für die Clients zur Verfügung stehenden entfernten Methoden. Vom Server können eine oder mehrere Instanzen des Remote-Objekts erstellt werden. Ein Remote Object muss von UnicastRemoteObject abgeleitet sein. Es muss mindestens ein Konstruktor zur Verfügung gestellt werden, der in seiner throws-Klausel eine geprüfte Ausnahme vom Typ RemoteException deklariert, da der parameterlose Konstruktor von UnicastRemoteObject in seiner throws-Klausel diese geprüfte Ausnahme ebenfalls deklariert. Das Remote Object kann Methoden implementieren, die nicht im Remote Interface auftauchen – diese können dann aber nur lokal aufgerufen werden[2].
Remote Reference
ist eine Referenz auf Remote Objects. Die Clients bekommen die Remote Reference von der RMI Registry.

Ablauf

[Bearbeiten |Quelltext bearbeiten]
Die 4 Schritte bei RMI
  1. Der Server registriert einRemote Object bei der RMI-Registry unter einem eindeutigen Namen.
  2. Der Client sieht bei der RMI-Registry unter diesem Namen nach und bekommt eine Objektreferenz, die seinemRemote Interface entsprechen muss.
  3. Der Client ruft eine Methode aus der Objektreferenz auf (dass diese Methode existiert, wird durch dasRemote Interface garantiert). Dabei kann ein Objekt einer Klasse X übergeben werden, die der JVM des Servers bisher nicht bekannt ist (das ist möglich, wenn X ein dem Server bekanntes Interface implementiert). In diesem Fall lädt die Server-JVM die Klasse X dynamisch nach, beispielsweise vom Webserver des Client.
  4. Die Server-JVM führt die Methode auf demRemote Object aus, wobei evtl. dynamisch geladener Fremdcode benutzt wird (z. B. Methoden von X), der im Allgemeinen Sicherheitsrestriktionen unterliegt. Dem Client werden die Rückgabewerte dieses Aufrufes gesendet, oder der Client bekommt eine Fehlermeldung (z. B. bei einem Verbindungsabbruch).

Activation

[Bearbeiten |Quelltext bearbeiten]

Als Ergänzung von RMI steht die sogenannteActivation („Aktivierung“) zur Verfügung. Ähnlich der RMI-Registry ist auch dies eine zentrale Anlaufstelle für RMI-Clients. Jedoch kann derActivator auch RMI-Server-Objekte erzeugen und neueVirtuelle Maschinen starten.

Siehe auch

[Bearbeiten |Quelltext bearbeiten]

Weblinks

[Bearbeiten |Quelltext bearbeiten]

Einzelnachweise

[Bearbeiten |Quelltext bearbeiten]
  1. 2.4.1 The java.rmi.Remote Interface, abgerufen am 27. Februar 2024
  2. 2.5 Implementing a Remote Interface, abgerufen am 27. Februar 2024
Abgerufen von „https://de.wikipedia.org/w/index.php?title=Remote_Method_Invocation&oldid=243297061
Kategorien:

[8]ページ先頭

©2009-2025 Movatter.jp