logo

Attālās metodes izsaukšana Java

Piezīme:
java.rmi pakotne : Remote Method Invocation (RMI) ir novecojis Java 9 un jaunākās versijās, dodot priekšroku citiem attālās saziņas mehānismiem, piemēram, tīmekļa pakalpojumiem vai Remote Procedure Call (RPC).

Remote Method Invocation (RMI) ir API, kas ļauj objektam izsaukt metodi objektā, kas atrodas citā adrešu telpā, kas varētu būt tajā pašā vai attālā mašīnā. Izmantojot RMI, objekts, kas darbojas JVM datorā (klienta pusē), var izsaukt metodes objektā, kas atrodas citā JVM (servera pusē). RMI izveido publisku attālā servera objektu, kas nodrošina klienta un servera puses sakarus, izmantojot vienkāršus metodes izsaukumus servera objektā.



Stub Object: Stub objekts klienta mašīnā izveido informācijas bloku un nosūta šo informāciju serverim.

Bloks sastāv no

  • Izmantojamā attālā objekta identifikators
  • Izsaucamās metodes nosaukums
  • Attālās JVM parametri

Skeleta objekts: Skeleta objekts nodod pieprasījumu no apakšobjekta uz attālo objektu. Tas veic šādus uzdevumus



  • Tas izsauc vēlamo metodi reālajā objektā, kas atrodas serverī.
  • Tā pārsūta no stub objekta saņemtos parametrus uz metodi.

RMI darbība

Sakari starp klientu un serveri tiek apstrādāti, izmantojot divus starpposma objektus: Stub objektu (klienta pusē) un Skeleta objektu (servera pusē), kā to var attēlot arī no tālāk norādītajiem medijiem:

Šīs ir darbības, kas jāveic secīgi, lai ieviestu interfeisu, kā norādīts tālāk:



  1. Attālās saskarnes definēšana
  2. Attālās saskarnes ieviešana
  3. Stub un Skeleton objektu izveide no ieviešanas klases, izmantojot rmic (RMI kompilatoru)
  4. Sāciet rmireģistru
  5. Izveidojiet un izpildiet servera lietojumprogrammu
  6. Izveidojiet un izpildiet klienta lietojumprogrammu.

1. darbība. Attālās saskarnes definēšana

Vispirms ir jāizveido saskarne, kas sniegs aprakstu par metodēm, kuras var izsaukt attālie klienti. Šai saskarnei ir jāpaplašina attālais interfeiss, un interfeisa metodes prototipam ir jāizraisa RemoteException.

Piemērs:

Java


python generē uuid



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

>

>

2. darbība: attālās saskarnes ieviešana
Nākamais solis ir attālās saskarnes ieviešana. Lai ieviestu attālo saskarni, klasei ir jāpaplašina līdz java.rmi pakotnes UnicastRemoteObject klasei. Tāpat ir jāizveido noklusējuma konstruktors, lai klasē izmestu java.rmi.RemoteException no tā vecākkonstruktora.

Java




dateformat.format
// 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. darbība. Stub un Skeleton objektu izveide no ieviešanas klases, izmantojot rmic
Rmic rīku izmanto, lai izsauktu rmi kompilatoru, kas izveido objektus Stub un Skeleton. Tās prototips ir rmic klases nosaukums. Iepriekšminētajai programmai komandu uzvednē ir jāizpilda šāda komanda
rmic SearchQuery.
4. darbība. Sāciet rmireģistry
Sāciet reģistra pakalpojumu, komandu uzvednē start rmiregistry izdodot šādu komandu
5. darbība. Izveidojiet un izpildiet servera lietojumprogrammu
Nākamais solis ir izveidot servera lietojumprogrammu un izpildīt to atsevišķā komandu uzvednē.

  • Servera programma izmanto LocateRegistry klases metodi createRegistry, lai izveidotu rmireģistru serverī JVM ar porta numuru, kas nodots kā arguments.
  • Nosaukšanas klases rebind metode tiek izmantota, lai saistītu attālo objektu ar jauno nosaukumu.

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

>

java masīvu saraksts

>

6. darbība. Izveidojiet un izpildiet klienta lietojumprogrammu
Pēdējais solis ir izveidot klienta lietojumprogrammu un izpildīt to atsevišķā komandu uzvednē. Nosaukšanas klases uzmeklēšanas metode tiek izmantota, lai iegūtu atsauci uz Stub objektu.

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

>

>

atzīmes pārsvītrojums

Piezīme: Iepriekš minētā klienta un servera programma tiek izpildīta vienā un tajā pašā mašīnā, tāpēc tiek izmantots localhost. Lai piekļūtu attālajam objektam no citas mašīnas, localhost ir jāaizstāj ar IP adresi, kurā atrodas attālais objekts.

saglabājiet failus attiecīgi atbilstoši klases nosaukumam kā

Search.java, SearchQuery.java, SearchServer.java un ClientRequest.java
Svarīgi novērojumi:

  1. RMI ir tīrs Java risinājums Remote Procedure Calls (RPC) un tiek izmantots, lai izveidotu izplatītas lietojumprogrammas Java.
  2. Stub un Skeleton objekti tiek izmantoti saziņai starp klientu un servera pusi.