GeeksforGeeks

L’invocazione del metodo remoto (RMI) è un’API che consente a un oggetto di richiamare un metodo su un oggetto che esiste in un altro spazio di indirizzi, che potrebbe essere sulla stessa macchina o su una macchina remota. Attraverso RMI, l’oggetto in esecuzione in una JVM presente su un computer (lato client) può richiamare metodi su un oggetto presente in un’altra JVM (lato server). RMI crea un oggetto server remoto pubblico che consente le comunicazioni lato client e server tramite semplici chiamate di metodo sull’oggetto server.

Funzionamento di RMI

La comunicazione tra client e server viene gestita utilizzando due oggetti intermedi: Stub object (sul lato client) e Skeleton object (sul lato server).

Oggetto Stub

L’oggetto stub sulla macchina client crea un blocco di informazioni e invia queste informazioni al server. Il blocco è costituito da

  • Un identificatore dell’oggetto remoto da utilizzare
  • Nome del metodo che deve essere richiamato
  • Parametri alla JVM remota

Oggetto Scheletro

L’oggetto scheletro passa la richiesta dall’oggetto stub all’oggetto remoto. Esegue le seguenti attività

  • Chiama il metodo desiderato sull’oggetto reale presente sul server.
  • Inoltra i parametri ricevuti dall’oggetto stub al metodo.
    RMI in Java

Procedura per implementare l’Interfaccia

  1. la Definizione di una interfaccia remota
  2. l’Implementazione dell’interfaccia remota
  3. Creazione di Stub e Skeleton oggetti dalla classe di implementazione utilizzando rmic rmi (compilatore)
  4. Avviare l’rmiregistry
  5. Creare ed eseguire l’applicazione server programma
  6. Creare ed eseguire il programma dell’applicazione client.

Fase 1: Definizione dell’interfaccia remota
La prima cosa da fare è creare un’interfaccia che fornisca la descrizione dei metodi che possono essere richiamati dai client remoti. Questa interfaccia dovrebbe estendere l’interfaccia remota e il prototipo del metodo all’interno dell’interfaccia dovrebbe lanciare RemoteException.

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



Passaggio 2: L’implementazione dell’interfaccia remota

Il passo successivo è quello di implementare l’interfaccia remota. Per implementare l’interfaccia remota, la classe deve estendersi alla classe UnicastRemoteObject di java.pacchetto rmi. Inoltre, è necessario creare un costruttore predefinito per lanciare java.rmi.RemoteException dal suo costruttore genitore in classe.

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;
}
}



Passo 3: Creazione di Stub e Skeleton oggetti dalla classe di implementazione utilizzando rmic
Il rmic strumento è utilizzato per richiamare l’rmi compilatore che crea lo Stub e lo Skeleton oggetti. Il suo prototipo è
rmic classname. Per il programma di cui sopra il seguente comando devono essere eseguite al prompt dei comandi
rmic SearchQuery

PASSO 4: Avviare l’rmiregistry
Avviare il servizio registro di sistema eseguendo il comando seguente al prompt dei comandi start rmiregistry

PASSO 5: Creare ed eseguire l’applicazione server programma
Il passo successivo è quello di creare un’applicazione server programma ed eseguirlo su un altro prompt dei comandi.

  • Il programma server utilizza il metodo createRegistry della classe LocateRegistry per creare rmiregistry all’interno della JVM del server con il numero di porta passato come argomento.
  • Il metodo rebind della classe di denominazione viene utilizzato per associare l’oggetto remoto al nuovo nome.

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);
}
}
}



Passo 6: Creare ed eseguire il programma dell’applicazione client
L’ultimo passo è quello di creare l’applicazione client programma ed eseguirlo su un altro prompt dei comandi .Il metodo di ricerca della classe di denominazione viene utilizzato per ottenere il riferimento dell’oggetto Stub.

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);
}
}
}



Nota: Il sopra client e server il programma viene eseguito sullo stesso computer in modo localhost. Per accedere all’oggetto remoto da un’altra macchina, localhost deve essere sostituito con l’indirizzo IP in cui è presente l’oggetto remoto.
Osservazioni importanti:

  1. RMI è una soluzione java pura per le chiamate di procedure remote (RPC) e viene utilizzata per creare applicazioni distribuite in java.
  2. Gli oggetti Stub e Skeleton vengono utilizzati per la comunicazione tra client e server.

Questo articolo è contribuito da Aakash Ojha. Se ti piace GeeksforGeeks e vorrebbe contribuire, si può anche scrivere un articolo e mail il tuo articolo a [email protected] Vedere il tuo articolo che appare sulla pagina principale GeeksforGeeks e aiutare altri Geek.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.