logo

Remote Method Invocation Javassa

Huomautus:
java.rmi paketti : Remote Method Invocation (RMI) on vanhentunut Java 9:ssä ja sitä uudemmissa versioissa muiden etäviestintämekanismien, kuten verkkopalvelujen tai etäprosessikutsujen (RPC) hyväksi.

Remote Method Invocation (RMI) on API, jonka avulla objekti voi kutsua menetelmän objektissa, joka on olemassa toisessa osoiteavaruudessa, joka voi olla samassa koneessa tai etäkoneessa. RMI:n kautta tietokoneessa olevassa JVM:ssä (asiakaspuolella) oleva objekti voi kutsua menetelmiä toisessa JVM:ssä (palvelinpuolella) olevassa objektissa. RMI luo julkisen etäpalvelinobjektin, joka mahdollistaa asiakas- ja palvelinpuolen viestinnän yksinkertaisten menetelmäkutsujen avulla palvelinobjektissa.



Stub Object: Asiakaskoneen tynkäobjekti muodostaa tietolohkon ja lähettää nämä tiedot palvelimelle.

Lohko koostuu

  • Käytettävän etäobjektin tunniste
  • Menetelmän nimi, jota kutsutaan
  • Etä-JVM:n parametrit

Luurankoobjekti: Runkoobjekti välittää pyynnön tynkäobjektilta etäobjektille. Se suorittaa seuraavat tehtävät



  • Se kutsuu haluttua menetelmää palvelimella olevassa todellisessa objektissa.
  • Se välittää tynkäobjektista vastaanotetut parametrit menetelmälle.

RMI:n toiminta

Asiakkaan ja palvelimen välinen viestintä hoidetaan käyttämällä kahta väliobjektia: Stub-objekti (asiakkaan puolella) ja Skeleton-objekti (palvelinpuolella), kuten voidaan myös kuvata alla olevasta mediasta seuraavasti:

kuinka noutaa piilotetut sovellukset

Nämä ovat vaiheet, jotka on suoritettava peräkkäin alla määritellyn käyttöliittymän toteuttamiseksi seuraavasti:



  1. Etäkäyttöliittymän määrittäminen
  2. Etäkäyttöliittymän käyttöönotto
  3. Stub- ja Skeleton-objektien luominen toteutusluokasta käyttämällä rmic-ohjelmaa (RMI-kääntäjä)
  4. Käynnistä rmi-rekisteri
  5. Luo ja suorita palvelinsovellusohjelma
  6. Luo ja suorita asiakassovellusohjelma.

Vaihe 1: Etäliittymän määrittäminen

Ensimmäinen asia on luoda käyttöliittymä, joka antaa kuvauksen menetelmistä, joita etäasiakkaat voivat kutsua. Tämän liitännän pitäisi laajentaa etäkäyttöliittymää ja menetelmän prototyypin pitäisi heittää RemoteException.

Esimerkki:

Java




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

>

Nimeä hakemisto uudelleen linux
>

Vaihe 2: Etäkäyttöliittymän käyttöönotto
Seuraava vaihe on etäkäyttöliittymän käyttöönotto. Etäkäyttöliittymän toteuttamiseksi luokan tulisi ulottua java.rmi-paketin UnicastRemoteObject-luokkaan. Lisäksi on luotava oletuskonstruktori, joka heittää java.rmi.RemoteExceptionin yläkonstruktoristaan ​​luokassa.

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

>

>

Vaihe 3: Stub- ja Skeleton-objektien luominen toteutusluokasta rmicillä
Rmic-työkalua käytetään kutsumaan rmi-kääntäjä, joka luo Stub- ja Skeleton-objektit. Sen prototyyppi on rmic-luokkanimi. Yllä olevalle ohjelmalle seuraava komento on suoritettava komentokehotteessa
rmic SearchQuery.
Vaihe 4: Käynnistä rmi-rekisteri
Käynnistä rekisteripalvelu antamalla seuraava komento komentokehotteessa start rmiregistry
Vaihe 5: Luo ja suorita palvelinsovellusohjelma
Seuraava vaihe on luoda palvelinsovellusohjelma ja suorittaa se erillisessä komentokehotteessa.

  • Palvelinohjelma käyttää LocateRegistry-luokan createRegistry-menetelmää rmi-rekisterin luomiseen palvelimen JVM:ssä, jonka porttinumero välitetään argumenttina.
  • Naming-luokan rebind-menetelmää käytetään etäobjektin sitomiseen uuteen nimeen.

Java

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

>

>

Vaihe 6: Luo ja suorita asiakassovellusohjelma
Viimeinen vaihe on luoda asiakassovellusohjelma ja suorittaa se erillisessä komentokehotteessa. Naming-luokan hakumenetelmää käytetään Stub-objektin viittauksen saamiseksi.

Java


java merkkijono alimerkkijono



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

>

>

Huomautus: Yllä oleva asiakas- ja palvelinohjelma suoritetaan samassa koneessa, joten käytetään localhostia. Jotta etäobjektia voidaan käyttää toiselta koneelta, localhost on korvattava IP-osoitteella, jossa etäobjekti on.

tallenna tiedostot luokan nimen mukaan

Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Tärkeitä huomioita:

  1. RMI on puhdas java-ratkaisu Remote Procedure Calls (RPC) -puheluille, ja sitä käytetään hajautettujen sovellusten luomiseen Javassa.
  2. Stub- ja Skeleton-objekteja käytetään viestintään asiakkaan ja palvelinpuolen välillä.