logo

Invocarea metodei de la distanță în Java

Notă:
pachet java.rmi : Remote Method Invocation (RMI) a fost retrasă în Java 9 și versiunile ulterioare, în favoarea altor mecanisme de comunicare la distanță, cum ar fi serviciile web sau Remote Procedure Calls (RPC).

Remote Method Invocation (RMI) este un API care permite unui obiect să invoce o metodă pe un obiect care există într-un alt spațiu de adrese, care ar putea fi pe aceeași mașină sau pe o mașină la distanță. Prin RMI, un obiect care rulează într-un JVM prezent pe un computer (partea client) poate invoca metode pe un obiect prezent într-un alt JVM (partea server). RMI creează un obiect server public la distanță care permite comunicațiile client și server prin apeluri simple de metodă pe obiectul server.



Obiect stub: Obiectul stub de pe computerul client construiește un bloc de informații și trimite aceste informații către server.

Blocul este format din

  • Un identificator al obiectului de la distanță care trebuie utilizat
  • Numele metodei care urmează să fie invocată
  • Parametrii JVM-ului la distanță

Obiect schelet: Obiectul schelet transmite cererea de la obiectul stub la obiectul la distanță. Îndeplinește următoarele sarcini



  • Apelează metoda dorită pe obiectul real prezent pe server.
  • Redirecționează parametrii primiți de la obiectul stub către metodă.

Funcționarea RMI

Comunicarea dintre client și server este gestionată prin utilizarea a două obiecte intermediare: obiect Stub (pe partea clientului) și obiect Skeleton (pe partea serverului), așa cum poate fi de asemenea descris de mai jos media, după cum urmează:

Aceștia sunt pașii care trebuie urmați secvențial pentru a implementa Interfața așa cum este definită mai jos, după cum urmează:



  1. Definirea unei interfețe la distanță
  2. Implementarea interfeței de la distanță
  3. Crearea obiectelor Stub și Skeleton din clasa de implementare folosind rmic (compilator RMI)
  4. Porniți rmiregistry
  5. Creați și executați programul de aplicație server
  6. Creați și executați programul de aplicație client.

Pasul 1: Definirea interfeței de la distanță

Primul lucru de făcut este să creați o interfață care să ofere descrierea metodelor care pot fi invocate de clienții la distanță. Această interfață ar trebui să extindă interfața Remote, iar prototipul metodei din interfață ar trebui să arunce RemoteException.

Exemplu:

șir înlocuiește toate java

Java




// Creating a Search interface> import> java.rmi.*;> public> interface> Search>extends> Remote> {> >// Declaring the method prototype> >public> String query(String search)>throws> RemoteException;> }>

>

>

Pasul 2: Implementarea interfeței de la distanță
Următorul pas este implementarea interfeței de la distanță. Pentru a implementa interfața de la distanță, clasa ar trebui să se extindă la clasa UnicastRemoteObject a pachetului java.rmi. De asemenea, trebuie creat un constructor implicit pentru a arunca java.rmi.RemoteException din constructorul părinte în clasă.

Java




// Java program to implement the Search interface> import> java.rmi.*;> import> java.rmi.server.*;> public> class> SearchQuery>extends> UnicastRemoteObject> >implements> Search> {> >// Default constructor to throw RemoteException> >// from its parent constructor> >SearchQuery()>throws> RemoteException> >{> >super>();> >}> >// Implementation of the query interface> >public> String query(String search)> >throws> RemoteException> >{> >String result;> >if> (search.equals(>'Reflection in Java'>))> >result =>'Found'>;> >else> >result =>'Not Found'>;> >return> result;> >}> }>

>

șir.valoarea java
>

Pasul 3: Crearea obiectelor Stub și Skeleton din clasa de implementare folosind rmic
Instrumentul rmic este folosit pentru a invoca compilatorul rmi care creează obiectele Stub și Skeleton. Prototipul său este rmic classname. Pentru programul de mai sus, următoarea comandă trebuie să fie executată la promptul de comandă
rmic SearchQuery.
Pasul 4: Porniți rmiregistry
Porniți serviciul de registry lansând următoarea comandă la promptul de comandă, porniți rmiregistry
Pasul 5: Creați și executați programul de aplicație server
Următorul pas este să creați programul de aplicație server și să îl executați într-un prompt de comandă separat.

  • Programul server folosește metoda createRegistry din clasa LocateRegistry pentru a crea rmiregistry în JVM-ul serverului cu numărul portului transmis ca argument.
  • Metoda de relegare a clasei Naming este folosită pentru a lega obiectul la distanță la noul nume.

Java




// Java program for server application> import> java.rmi.*;> import> java.rmi.registry.*;> public> class> SearchServer> {> >public> static> void> main(String args[])> >{> >try> >{> >// Create an object of the interface> >// implementation class> >Search obj =>new> SearchQuery();> >// rmiregistry within the server JVM with> >// port number 1900> >LocateRegistry.createRegistry(>1900>);> >// Binds the remote object by the name> >// geeksforgeeks> >Naming.rebind(>' rmi://localhost:1900 '>+> >'/geeksforgeeks'>,obj);> >}> >catch>(Exception ae)> >{> >System.out.println(ae);> >}> >}> }>

>

>

Pasul 6: Creați și executați programul de aplicație client
Ultimul pas este să creați programul de aplicație client și să îl executați într-un prompt de comandă separat. Metoda de căutare a clasei Naming este folosită pentru a obține referința obiectului Stub.

Java




// Java program for client application> import> java.rmi.*;> public> class> ClientRequest> {> >public> static> void> main(String args[])> >{> >String answer,value=>'Reflection in Java'>;> >try> >{> >// lookup method to find reference of remote object> >Search access => >(Search)Naming.lookup(>' rmi://localhost:1900 '>+> >'/geeksforgeeks'>);> >answer = access.query(value);> >System.out.println(>'Article on '> + value +> >' '> + answer+>' at techcodeview.com'>);> >}> >catch>(Exception ae)> >{> >System.out.println(ae);> >}> >}> }>

>

>

Notă: Programul client și server de mai sus este executat pe aceeași mașină, astfel încât este utilizat localhost. Pentru a accesa obiectul la distanță de pe o altă mașină, localhost trebuie înlocuit cu adresa IP la care este prezent obiectul la distanță.

salvați fișierele, respectiv ca pe numele clasei ca

Search.java, SearchQuery.java, SearchServer.java și ClientRequest.java
Observatii importante:

  1. RMI este o soluție java pură pentru apelurile de procedură la distanță (RPC) și este folosită pentru a crea aplicații distribuite în java.
  2. Obiectele Stub și Skeleton sunt folosite pentru comunicarea dintre client și partea serverului.