logo

Nuotolinio metodo iškvietimas Java

Pastaba:
java.rmi paketą : „Java 9“ ir naujesnėse versijose nuotolinio metodo iškvietimas (RMI) nebenaudojamas, o kitiems nuotolinio ryšio mechanizmams, pvz., žiniatinklio paslaugoms arba nuotoliniams procedūrų iškvietimams (RPC).

Remote Method Invocation (RMI) yra API, leidžianti objektui iškviesti metodą objekte, esančiame kitoje adresų erdvėje, kuri gali būti tame pačiame arba nuotoliniame kompiuteryje. Per RMI objektas, veikiantis kompiuteryje esančiame JVM (kliento pusėje), gali iškviesti metodus objekte, esančiame kitame JVM (serverio pusėje). RMI sukuria viešąjį nuotolinio serverio objektą, kuris įgalina kliento ir serverio ryšį per paprastus metodų iškvietimus serverio objekte.



Stub Object: Kliento įrenginio stuburo objektas sukuria informacijos bloką ir siunčia šią informaciją į serverį.

Blokas susideda iš

  • Naudotino nuotolinio objekto identifikatorius
  • Metodo pavadinimas, kurį reikia iškviesti
  • Nuotolinio JVM parametrai

Skeleto objektas: Skeleto objektas perduoda užklausą iš stuburo objekto nuotoliniam objektui. Jis atlieka šias užduotis



  • Jis iškviečia norimą metodą realiame serveryje esančiame objekte.
  • Jis persiunčia iš stub objekto gautus parametrus į metodą.

RMI darbas

Ryšys tarp kliento ir serverio tvarkomas naudojant du tarpinius objektus: Stub objektą (kliento pusėje) ir Skeleto objektą (serverio pusėje), kaip taip pat galima pavaizduoti iš toliau pateiktos laikmenos taip:

Tai yra žingsniai, kuriuos reikia atlikti nuosekliai, kad būtų įdiegta sąsaja, kaip apibrėžta toliau:



  1. Nuotolinės sąsajos apibrėžimas
  2. Nuotolinės sąsajos diegimas
  3. Stub ir Skeleton objektų kūrimas iš diegimo klasės naudojant rmic (RMI kompiliatorius)
  4. Paleiskite rmiregistrą
  5. Sukurkite ir paleiskite serverio taikomąją programą
  6. Sukurkite ir paleiskite kliento taikomąją programą.

1 veiksmas: nuotolinės sąsajos apibrėžimas

Pirmas dalykas, kurį reikia padaryti, yra sukurti sąsają, kurioje būtų aprašyti metodai, kuriuos gali iškviesti nuotoliniai klientai. Ši sąsaja turėtų išplėsti nuotolinę sąsają, o metodo prototipas sąsajoje turėtų mesti RemoteException.

Pavyzdys:

Java




java eilutes

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

>

>

2 veiksmas: nuotolinės sąsajos diegimas
Kitas žingsnis yra įdiegti nuotolinę sąsają. Norint įdiegti nuotolinę sąsają, klasė turėtų apimti java.rmi paketo UnicastRemoteObject klasę. Be to, reikia sukurti numatytąjį konstruktorių, kad klasėje būtų galima išmesti java.rmi.RemoteException iš pirminio konstruktoriaus.

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

>

>

3 veiksmas: Stub ir Skeleton objektų kūrimas iš diegimo klasės naudojant rmic
Rmic įrankis naudojamas iškviesti rmi kompiliatorių, kuris sukuria objektus Stub ir Skeleton. Jo prototipas yra rmic klasės pavadinimas. Aukščiau nurodytai programai komandų eilutėje reikia vykdyti šią komandą
rmic paieškos užklausa.
4 veiksmas: paleiskite rmiregistrą
Paleiskite registro paslaugą komandų eilutėje start rmiregistry išleisdami šią komandą
5 veiksmas: sukurkite ir paleiskite serverio taikomąją programą
Kitas žingsnis yra sukurti serverio taikomąją programą ir paleisti ją atskiroje komandų eilutėje.

  • Serverio programa naudoja LocateRegistry klasės metodą createRegistry, kad sukurtų rmiregistrą serverio JVM su prievado numeriu kaip argumentu.
  • Pavadinimo klasės rebind metodas naudojamas nuotoliniam objektui susieti su nauju pavadinimu.

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

>

>

6 veiksmas: sukurkite ir paleiskite kliento taikomąją programą
Paskutinis veiksmas yra sukurti kliento taikomąją programą ir paleisti ją atskiroje komandų eilutėje. Pavadinimo klasės paieškos metodas naudojamas objekto Stub nuorodai gauti.

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

>

>

Pastaba: Pirmiau nurodyta kliento ir serverio programa vykdoma tame pačiame kompiuteryje, todėl naudojamas localhost. Norint pasiekti nuotolinį objektą iš kito įrenginio, localhost turi būti pakeistas IP adresu, kuriame yra nuotolinis objektas.

išsaugokite failus atitinkamai pagal klasės pavadinimą kaip

Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Svarbūs pastebėjimai:

  1. RMI yra grynas „Java“ sprendimas nuotoliniams procedūrų skambučiams (RPC) ir naudojamas kuriant paskirstytas programas Java.
  2. Stub ir Skeleton objektai naudojami ryšiui tarp kliento ir serverio pusės.