RMI (Remote Method Invocation)

L’RMI (Remote Method Invocation) è un’API che fornisce un meccanismo per creare un’applicazione distribuita in java. L’RMI consente a un oggetto di richiamare metodi su un oggetto in esecuzione in un’altra JVM.

L’RMI fornisce la comunicazione remota tra le applicazioni utilizzando due oggetti stub e skeleton.

Comprensione stub e skeleton

RMI utilizza stub e skeleton object per la comunicazione con l’oggetto remoto.

Un oggetto remoto è un oggetto il cui metodo può essere richiamato da un’altra JVM. Comprendiamo gli oggetti stub e skeleton:

stub

Lo stub è un oggetto, funge da gateway per il lato client. Tutte le richieste in uscita vengono instradate attraverso di esso. Risiede sul lato client e rappresenta l’oggetto remoto. Quando il chiamante richiama il metodo sull’oggetto stub, esegue le seguenti attività:

  1. Avvia una connessione con la Macchina virtuale remota (JVM),
  2. Scrive e trasmette (marshals) i parametri alla Macchina virtuale remota (JVM),
  3. Attende il risultato
  4. Legge (unmarshals) il valore restituito o l’eccezione, e
  5. Infine, restituisce il valore per il chiamante.

scheletro

Lo scheletro è un oggetto, funge da gateway per l’oggetto lato server. Tutte le richieste in arrivo vengono instradate attraverso di esso. Quando lo scheletro riceve la richiesta in arrivo, esegue le seguenti attività:

  1. Legge il parametro per il metodo remoto
  2. Richiama il metodo sull’oggetto remoto effettivo e
  3. scrive e trasmette (marshals) il risultato al chiamante.

In Java 2 SDK, è stato introdotto un protocollo stub che elimina la necessità di scheletri. stub e scheletro in RMI

Comprensione dei requisiti per le applicazioni distribuite

Se qualsiasi applicazione esegue queste attività, può essere distribuito applicazione.

.

  1. L’applicazione deve individuare il metodo remoto
  2. Deve fornire la comunicazione con gli oggetti remoti e
  3. L’applicazione deve caricare le definizioni di classe per gli oggetti.

L’applicazione RMI ha tutte queste caratteristiche, quindi è chiamata applicazione distribuita.

Java RMI Example

Vengono forniti i 6 passaggi per scrivere il programma RMI.

  1. Creare l’interfaccia remota
  2. Fornire l’implementazione dell’interfaccia remota
  3. Compilare la classe di implementazione e creazione di stub e skeleton oggetti utilizzando il rmic strumento
  4. Avviare il servizio registro rmiregistry strumento
  5. Creare e avviare l’applicazione remota
  6. Creare e avviare l’applicazione client

RMI Esempio

In questo esempio, abbiamo seguito tutte le 6 passi per creare ed eseguire l’applicazione rmi. L’applicazione client richiede solo due file, interfaccia remota e applicazione client. Nell’applicazione rmi, sia il client che il server interagiscono con l’interfaccia remota. L’applicazione client richiama metodi sull’oggetto proxy, RMI invia la richiesta alla JVM remota. Il valore restituito viene inviato all’oggetto proxy e quindi all’applicazione client.

 Esempio RMI

1) creare l’interfaccia remota

Per creare l’interfaccia remota, estendere l’interfaccia remota e dichiarare l’eccezione remota con tutti i metodi dell’interfaccia remota. Qui, stiamo creando un’interfaccia remota che estende l’interfaccia remota. Esiste un solo metodo chiamato add () e dichiara RemoteException.

2) Fornire l’implementazione dell’interfaccia remota

Ora fornire l’implementazione dell’interfaccia remota. Per fornire l’implementazione dell’interfaccia Remota, abbiamo bisogno di

  • estendere la classe UnicastRemoteObject,
  • o utilizzare il exportObject() il metodo della classe UnicastRemoteObject

Nel caso, è possibile estendere la classe UnicastRemoteObject, è necessario definire un costruttore che dichiara RemoteException.

3) creare gli oggetti stub e skeleton utilizzando lo strumento rmic.

Il prossimo passo è creare oggetti stub e skeleton usando il compilatore rmi. Lo strumento rmic richiama il compilatore RMI e crea oggetti stub e scheletro.

4) Avviare il servizio di registro con lo strumento rmiregistry

Ora avviare il servizio di registro utilizzando lo strumento rmiregistry. Se non si specifica il numero di porta, viene utilizzato un numero di porta predefinito. In questo esempio, stiamo usando il numero di porta 5000.

5) Creare ed eseguire l’applicazione server

Ora i servizi rmi devono essere ospitati in un processo server. La classe di denominazione fornisce metodi per ottenere e memorizzare l’oggetto remoto. La classe di denominazione fornisce 5 metodi.

java statico pubblico.rmi.Ricerca remota (java.lang.Stringa) lancia java.rmi.NotBoundException, java. net. MalformedURLException, java.rmi.RemoteException; Restituisce il riferimento dell’oggetto remoto.
public static void bind (java.lang.Stringa, java.rmi.Remoto) getta java.rmi.AlreadyBoundException, java.net.MalformedURLException, java.rmi.RemoteException; Lega l’oggetto remoto con il nome specificato.
public static void unbind (java.lang.Stringa) lancia java.rmi.RemoteException, java.rmi.NotBoundException, java. net. MalformedURLException; Distrugge l’oggetto remoto associato al nome specificato.
public static void rebind (java.lang.Stringa, java.rmi.Remoto) getta java.rmi.RemoteException, java. net. MalformedURLException; Associa l’oggetto remoto al nuovo nome.
java statico pubblico.lang.Elenco di stringhe (java.lang.Stringa) lancia java.rmi.RemoteException, java. net. MalformedURLException; Restituisce una matrice dei nomi degli oggetti remoti associati al registro di sistema.

In questo esempio, stiamo legando l’oggetto remoto con il nome sonoo.

6) Creare ed eseguire l’applicazione client

Presso il client stiamo ottenendo l’oggetto stub con il metodo lookup() della classe di denominazione e invocando il metodo su questo oggetto. In questo esempio, stiamo eseguendo le applicazioni server e client, nella stessa macchina, quindi stiamo usando localhost. Se si desidera accedere all’oggetto remoto da un’altra macchina, modificare localhost con il nome host (o l’indirizzo IP) in cui si trova l’oggetto remoto.

Output di questo esempio RMI

RMIRMI

Esempio significativo di applicazione RMI con database

Si consideri uno scenario, ci sono due applicazioni in esecuzione in macchine diverse. Diciamo MachineA e MachineB, machineA si trova negli Stati Uniti e MachineB in India. MachineB vuole ottenere l’elenco di tutti i clienti di applicazione MachineA.

Sviluppiamo l’applicazione RMI seguendo i passaggi.

1) Creare la tabella

Prima di tutto, dobbiamo creare la tabella nel database. Qui, stiamo usando il database Oracle10.

 Applicazione RMI con database

2) Creare classe cliente e interfaccia remota

File: Cliente.java

Nota: la classe Customer deve essere serializzabile.

File: Banca.java

3) Creare la classe che fornisce l’implementazione di interfaccia remota

File: BankImpl.java

4) Compilare lo strumento rmic di classe e avviare il servizio di registro da rmiregistry tool

RMI esempio con database

5) Creare ed eseguire il file Server

: MyServer.javaesempio di invocazione del metodo remoto

6) Creare ed eseguire il file client

: MyClient.java esempio reale di rmi