logo

Oddaljeni priklic metode v Javi

Opomba:
paket java.rmi : Remote Method Invocation (RMI) je bil opuščen v Javi 9 in novejših različicah v korist drugih mehanizmov oddaljene komunikacije, kot so spletne storitve ali Remote Procedure Calls (RPC).

Remote Method Invocation (RMI) je API, ki omogoča objektu, da prikliče metodo na objektu, ki obstaja v drugem naslovnem prostoru, ki je lahko na istem računalniku ali na oddaljenem računalniku. Prek RMI lahko objekt, ki se izvaja v JVM, ki je prisoten v računalniku (na strani odjemalca), prikliče metode na objektu, ki je prisoten v drugem JVM (na strani strežnika). RMI ustvari javni objekt oddaljenega strežnika, ki omogoča komunikacijo na strani odjemalca in strežnika prek preprostih klicev metod na objektu strežnika.



Škrobni predmet: Objekt škrbine na odjemalskem računalniku zgradi informacijski blok in te informacije pošlje strežniku.

Blok je sestavljen iz

  • Identifikator oddaljenega objekta, ki bo uporabljen
  • Ime metode, ki jo je treba priklicati
  • Parametri za oddaljeni JVM

Skeletni predmet: Okostni objekt posreduje zahtevo od škrbine do oddaljenega objekta. Opravlja naslednje naloge



  • Pokliče želeno metodo na pravem objektu, ki je prisoten na strežniku.
  • Metodi posreduje parametre, prejete iz predmeta škrbine.

Delovanje RMI

Komunikacija med odjemalcem in strežnikom poteka z uporabo dveh vmesnih objektov: predmeta škrbine (na strani odjemalca) in objekta okostja (na strani strežnika), kar je mogoče tudi prikazati s spodnjega medija, kot sledi:

To so koraki, ki jih je treba slediti zaporedno za implementacijo vmesnika, kot je opredeljeno spodaj, kot sledi:



  1. Definiranje oddaljenega vmesnika
  2. Implementacija oddaljenega vmesnika
  3. Ustvarjanje predmetov Stub in Skeleton iz implementacijskega razreda z uporabo rmic (prevajalnik RMI)
  4. Zaženite register rmi
  5. Ustvarite in izvedite strežniški aplikacijski program
  6. Ustvarite in izvedite odjemalski aplikacijski program.

1. korak: Definiranje oddaljenega vmesnika

Prva stvar, ki jo morate narediti, je ustvariti vmesnik, ki bo zagotovil opis metod, ki jih lahko kličejo oddaljeni odjemalci. Ta vmesnik bi moral razširiti vmesnik Remote in prototip metode znotraj vmesnika bi moral vrniti RemoteException.

primer:

Java

ukaz sed




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

>

>

2. korak: Implementacija oddaljenega vmesnika
Naslednji korak je implementacija oddaljenega vmesnika. Za implementacijo oddaljenega vmesnika se mora razred razširiti na razred UnicastRemoteObject paketa java.rmi. Poleg tega je treba ustvariti privzeti konstruktor, ki vrže izjemo java.rmi.RemoteException iz nadrejenega konstruktorja v razredu.

f filmi

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. korak: Ustvarjanje predmetov Stub in Skeleton iz implementacijskega razreda z uporabo rmic
Orodje rmic se uporablja za priklic prevajalnika rmi, ki ustvari predmeta Stub in Skeleton. Njegov prototip je rmic classname. Za zgornji program je treba v ukazni vrstici izvesti naslednji ukaz
rmic SearchQuery.
4. korak: Zaženite rmiregistry
Zaženite storitev registra tako, da v ukazni vrstici izdate naslednji ukaz start rmiregistry
5. korak: Ustvarite in izvedite strežniški aplikacijski program
Naslednji korak je ustvariti strežniški aplikacijski program in ga izvesti v ločenem ukaznem pozivu.

  • Strežniški program uporablja metodo createRegistry razreda LocateRegistry za ustvarjanje rmiregistry znotraj strežniškega JVM s številko vrat, posredovano kot argument.
  • Metoda ponovnega povezovanja razreda Naming se uporablja za povezovanje oddaljenega objekta z novim imenom.

Java


123 film



// 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. korak: Ustvarite in izvedite odjemalski aplikacijski program
Zadnji korak je ustvariti odjemalski aplikacijski program in ga izvesti v ločenem ukaznem pozivu. Metoda iskanja razreda Naming se uporablja za pridobitev reference predmeta Stub.

Java




java programska zanka
// 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);> >}> >}> }>

>

>

Opomba: Zgornji odjemalski in strežniški program se izvajata na istem računalniku, zato se uporablja lokalni gostitelj. Za dostop do oddaljenega objekta z drugega računalnika je treba localhost zamenjati z naslovom IP, kjer je prisoten oddaljeni objekt.

shranite datoteke glede na ime razreda kot

Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Pomembna opažanja:

  1. RMI je čista javanska rešitev za oddaljene klice postopkov (RPC) in se uporablja za ustvarjanje porazdeljenih aplikacij v Javi.
  2. Objekti Stub in Skeleton se uporabljajo za komunikacijo med odjemalcem in strežniško stranjo.