GeeksforGeeks

Remote Method Invocation (RMI) ist eine API, die es einem Objekt ermöglicht, eine Methode für ein Objekt aufzurufen, das in einem anderen Adressraum vorhanden ist, der sich auf demselben Computer oder auf einem Remote-Computer befinden kann. Über RMI kann ein Objekt, das in einer auf einem Computer vorhandenen JVM (Clientseite) ausgeführt wird, Methoden für ein Objekt aufrufen, das in einer anderen JVM (Serverseite) vorhanden ist. RMI erstellt ein öffentliches Remoteserverobjekt, das die client- und serverseitige Kommunikation durch einfache Methodenaufrufe des Serverobjekts ermöglicht.

Funktionsweise von RMI

Die Kommunikation zwischen Client und Server erfolgt über zwei Zwischenobjekte: Stub-Objekt (clientseitig) und Skeleton-Objekt (serverseitig).

Stub-Objekt

Das Stub-Objekt auf dem Clientcomputer erstellt einen Informationsblock und sendet diese Informationen an den Server. Der Block besteht aus

  • Eine Kennung des zu verwendenden Remote-Objekts
  • Methodenname, der aufgerufen werden soll
  • Parameter an die Remote-JVM

Skeleton-Objekt

Das Skeleton-Objekt übergibt die Anforderung vom Stub-Objekt an das Remote-Objekt. Es führt folgende Aufgaben aus

  • Es ruft die gewünschte Methode für das auf dem Server vorhandene reale Objekt auf.
  • Es leitet die vom Stub-Objekt empfangenen Parameter an die Methode weiter.
    RMI auf Java

Schritte zum Implementieren der Schnittstelle

  1. Definieren einer Remote-Schnittstelle
  2. Implementieren der Remote-Schnittstelle
  3. Erstellen von Stub- und Skeleton-Objekten aus der Implementierungsklasse mit rmic (rmi complier)
  4. Starten der rmiregistry
  5. Erstellen und Ausführen des Serveranwendungsprogramms
  6. Erstellen und Ausführen der client-Anwendungsprogramm.

Schritt 1: Definieren der Remote-Schnittstelle
Als erstes müssen Sie eine Schnittstelle erstellen, die die Beschreibung der Methoden enthält, die von Remote-Clients aufgerufen werden können. Diese Schnittstelle sollte die Remote-Schnittstelle erweitern und der Methodenprototyp innerhalb der Schnittstelle sollte die RemoteException auslösen.

import java.rmi.*;
public interface Search extends Remote
{
public String query(String search) throws RemoteException;
}



Schritt 2: Implementieren der Remote-Schnittstelle

Der nächste Schritt besteht darin, die Remote-Schnittstelle zu implementieren. Um die Remote-Schnittstelle zu implementieren, sollte die Klasse auf die UnicastRemoteObject-Klasse von Java erweitert werden.rmi-Paket. Außerdem muss ein Standardkonstruktor erstellt werden, um Java zu werfen.rmi.RemoteException vom übergeordneten Konstruktor in der Klasse.

import java.rmi.*;
import java.rmi.server.*;
public class SearchQuery extends UnicastRemoteObject
implements Search
{
SearchQuery() throws RemoteException
{
super();
}
public String query(String search)
throws RemoteException
{
String result;
if (search.equals("Reflection in Java"))
result = "Found";
else
result = "Not Found";
return result;
}
}



Schritt 3: Erstellen von Stub- und Skeleton-Objekten aus der Implementierungsklasse mit rmic
Das rmic-Tool wird verwendet, um den rmi-Compiler aufzurufen, der die Stub- und Skeleton-Objekte erstellt. Sein Prototyp ist
rmic classname . Für das obige Programm muss der folgende Befehl an der Eingabeaufforderung ausgeführt werden
rmic SearchQuery

SCHRITT 4: Starten Sie die rmiregistry
Starten Sie den Registrierungsdienst, indem Sie den folgenden Befehl an der Eingabeaufforderung ausführen start rmiregistry

SCHRITT 5: Erstellen und Ausführen des Serveranwendungsprogramms
Der nächste Schritt besteht darin, das Serveranwendungsprogramm zu erstellen und an einer separaten Eingabeaufforderung auszuführen.

  • Das Serverprogramm verwendet die createRegistry-Methode der LocateRegistry-Klasse, um rmiregistry innerhalb der Server-JVM mit der als Argument übergebenen Portnummer zu erstellen.
  • Die Rebind-Methode der Namensklasse wird verwendet, um das entfernte Objekt an den neuen Namen zu binden.

import java.rmi.*;
import java.rmi.registry.*;
public class SearchServer
{
public static void main(String args)
{
try
{
Search obj = new SearchQuery();
LocateRegistry.createRegistry(1900);
Naming.rebind("rmi://localhost:1900"+
"/geeksforgeeks",obj);
}
catch(Exception ae)
{
System.out.println(ae);
}
}
}



Schritt 6: Erstellen und Ausführen des Clientanwendungsprogramms
Der letzte Schritt besteht darin, das Clientanwendungsprogramm zu erstellen und an einer separaten Eingabeaufforderung auszuführen .Die Lookup-Methode der Klasse wird verwendet, um die Referenz des Stub-Objekts abzurufen.

import java.rmi.*;
public class ClientRequest
{
public static void main(String args)
{
String answer,value="Reflection in Java";
try
{
Search access =
(Search)Naming.lookup("rmi://localhost:1900"+
"/geeksforgeeks");
answer = access.query(value);
System.out.println("Article on " + value +
" " + answer+" at GeeksforGeeks");
}
catch(Exception ae)
{
System.out.println(ae);
}
}
}



Hinweis: Das obige Client- und Serverprogramm wird auf demselben Computer ausgeführt, sodass localhost verwendet wird. Um von einem anderen Rechner aus auf das Remote-Objekt zugreifen zu können, muss localhost durch die IP-Adresse ersetzt werden, unter der sich das Remote-Objekt befindet.
Wichtige Beobachtungen:

  1. RMI ist eine reine Java-Lösung für Remote Procedure Calls (RPC) und wird zum Erstellen verteilter Anwendungen in Java verwendet.
  2. Stub- und Skeleton-Objekte werden für die Kommunikation zwischen Client- und Serverseite verwendet.

Dieser Artikel wird von Aakash Ojha beigetragen. Wenn Sie GeeksforGeeks mögen und dazu beitragen möchten, können Sie auch einen Artikel schreiben und Ihren Artikel an mailen [email protected] . Sehen Sie sich Ihren Artikel auf der GeeksforGeeks-Hauptseite an und helfen Sie anderen Geeks.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.