logo

Invocació de mètodes remots a Java

Nota:
paquet java.rmi : La invocació de mètodes remots (RMI) ha quedat obsoleta a Java 9 i versions posteriors, a favor d'altres mecanismes de comunicació remota com els serveis web o les trucades a procediments remots (RPC).

La invocació de mètodes remots (RMI) és una API que permet que un objecte invoqui un mètode en un objecte que existeix en un altre espai d'adreces, que podria estar a la mateixa màquina o en una màquina remota. Mitjançant RMI, un objecte que s'executa en una JVM present en un ordinador (costat del client) pot invocar mètodes en un objecte present en una altra JVM (costat del servidor). RMI crea un objecte de servidor remot públic que permet les comunicacions del costat del client i del servidor mitjançant trucades de mètodes senzills a l'objecte del servidor.



Objecte taló: L'objecte stub de la màquina client crea un bloc d'informació i envia aquesta informació al servidor.

El bloc consta de

  • Un identificador de l'objecte remot que s'ha d'utilitzar
  • Nom del mètode que s'ha d'invocar
  • Paràmetres de la JVM remota

Objecte esquelet: L'objecte esquelet passa la sol·licitud de l'objecte stub a l'objecte remot. Realitza les següents tasques



  • Crida al mètode desitjat a l'objecte real present al servidor.
  • Reenvia els paràmetres rebuts de l'objecte stub al mètode.

Funcionament de RMI

La comunicació entre el client i el servidor es gestiona mitjançant l'ús de dos objectes intermedis: l'objecte Stub (al costat del client) i l'objecte Skeleton (al costat del servidor), com també es pot representar des dels mitjans següents de la següent manera:

Aquests són els passos que s'han de seguir seqüencialment per implementar la interfície tal com es defineix a continuació:



  1. Definició d'una interfície remota
  2. Implementació de la interfície remota
  3. Creació d'objectes Stub i Skeleton a partir de la classe d'implementació mitjançant rmic (compilador RMI)
  4. Inicieu el rmiregistry
  5. Creeu i executeu el programa d'aplicació del servidor
  6. Crear i executar el programa d'aplicació client.

Pas 1: Definició de la interfície remota

El primer que cal fer és crear una interfície que proporcioni la descripció dels mètodes que poden ser invocats pels clients remots. Aquesta interfície hauria d'estendre la interfície remota i el prototip del mètode dins de la interfície hauria de llançar la RemoteException.

Exemple:

Java


matriu java de cadena



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

travessa en ordre
>

>

Pas 2: implementació de la interfície remota
El següent pas és implementar la interfície remota. Per implementar la interfície remota, la classe s'hauria d'estendre a la classe UnicastRemoteObject del paquet java.rmi. A més, cal crear un constructor predeterminat per llançar la java.rmi.RemoteException des del seu constructor pare a la classe.

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

>

>

classificació de bombolles

Pas 3: Creació d'objectes Stub i Skeleton a partir de la classe d'implementació mitjançant rmic
L'eina rmic s'utilitza per invocar el compilador rmi que crea els objectes Stub i Skeleton. El seu prototip és rmic classname. Per al programa anterior, s'ha d'executar l'ordre següent a l'indicador d'ordres
rmic SearchQuery.
Pas 4: inicieu l'rmiregistry
Inicieu el servei de registre emetent l'ordre següent a l'indicador d'ordres start rmiregistry
Pas 5: creeu i executeu el programa d'aplicació del servidor
El següent pas és crear el programa d'aplicació del servidor i executar-lo en un indicador d'ordres independent.

  • El programa de servidor utilitza el mètode createRegistry de la classe LocateRegistry per crear rmiregistry dins de la JVM del servidor amb el número de port passat com a argument.
  • El mètode de reenllaç de la classe Naming s'utilitza per vincular l'objecte remot al nou nom.

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

>

>

Pas 6: creeu i executeu el programa d'aplicació client
L'últim pas és crear el programa d'aplicació client i executar-lo en un indicador d'ordres independent. El mètode de cerca de la classe Naming s'utilitza per obtenir la referència de l'objecte Stub.

Java

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

>

>

Nota: El programa client i servidor anterior s'executa a la mateixa màquina, de manera que s'utilitza localhost. Per accedir a l'objecte remot des d'una altra màquina, el localhost s'ha de substituir per l'adreça IP on hi ha l'objecte remot.

deseu els fitxers respectivament segons el nom de la classe com a

Search.java , SearchQuery.java , SearchServer.java & ClientRequest.java
Observacions importants:

  1. RMI és una solució java pura per a les trucades de procediment remot (RPC) i s'utilitza per crear aplicacions distribuïdes en java.
  2. Els objectes Stub i Skeleton s'utilitzen per a la comunicació entre el client i el servidor.