Poznámka:
balík java.rmi : Vzdialené vyvolanie metódy (RMI) bolo v jazyku Java 9 a novších verziách zastarané v prospech iných mechanizmov vzdialenej komunikácie, ako sú webové služby alebo vzdialené volania procedúr (RPC).
Remote Method Invocation (RMI) je API, ktoré umožňuje objektu vyvolať metódu na objekte, ktorý existuje v inom adresnom priestore, ktorý môže byť na rovnakom počítači alebo na vzdialenom počítači. Prostredníctvom RMI môže objekt bežiaci v JVM prítomnom na počítači (na strane klienta) vyvolať metódy na objekte prítomnom v inom JVM (na strane servera). RMI vytvára verejný objekt vzdialeného servera, ktorý umožňuje komunikáciu na strane klienta a servera prostredníctvom volaní jednoduchých metód na objekte servera.
Stub Object: Objekt stub na klientskom počítači vytvorí informačný blok a odošle tieto informácie na server.
Blok pozostáva z
- Identifikátor vzdialeného objektu, ktorý sa má použiť
- Názov metódy, ktorá sa má vyvolať
- Parametre vzdialeného JVM
Objekt kostry: Skeletový objekt odovzdá požiadavku z pahýľového objektu vzdialenému objektu. Vykonáva nasledujúce úlohy
- Zavolá požadovanú metódu na skutočnom objekte na serveri.
- Prepošle parametre prijaté z stub objektu do metódy.
Práca RMI
Komunikácia medzi klientom a serverom je riešená pomocou dvoch medziľahlých objektov: objektu Stub (na strane klienta) a objektu Skeleton (na strane servera), ako je tiež možné znázorniť zo spodného média nasledovne:
Toto sú kroky, ktoré je potrebné vykonať postupne pri implementácii rozhrania, ako je definované nižšie:
- Definovanie vzdialeného rozhrania
- Implementácia vzdialeného rozhrania
- Vytváranie objektov Stub a Skeleton z implementačnej triedy pomocou rmic (kompilátor RMI)
- Spustite rmiregistre
- Vytvorte a spustite aplikačný program servera
- Vytvorte a spustite klientsky aplikačný program.
Krok 1: Definovanie vzdialeného rozhrania
Prvá vec, ktorú musíte urobiť, je vytvoriť rozhranie, ktoré bude poskytovať popis metód, ktoré môžu byť vyvolané vzdialenými klientmi. Toto rozhranie by malo rozšíriť vzdialené rozhranie a prototyp metódy v rámci rozhrania by mal vyvolať výnimku RemoteException.
Príklad:
Java
// Creating a Search interface> import> java.rmi.*;> public> interface> Search> extends> Remote> {> > // Declaring the method prototype> > public> String query(String search)> throws> RemoteException;> }> |
>
>
Krok 2: Implementácia vzdialeného rozhrania
Ďalším krokom je implementácia vzdialeného rozhrania. Na implementáciu vzdialeného rozhrania by sa trieda mala rozšíriť na triedu UnicastRemoteObject balíka java.rmi. Tiež je potrebné vytvoriť predvolený konštruktor, ktorý vyvolá java.rmi.RemoteException z jeho nadradeného konštruktora v triede.
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;> > }> }> |
koľko 0 v miliarde
>
>
Krok 3: Vytvorenie objektov Stub a Skeleton z implementačnej triedy pomocou rmic
Nástroj rmic sa používa na vyvolanie kompilátora rmi, ktorý vytvára objekty Stub a Skeleton. Jeho prototyp je rmic classname. Pre vyššie uvedený program je potrebné vykonať nasledujúci príkaz v príkazovom riadku
rmic SearchQuery.
Krok 4: Spustite rmiregistry
Spustite službu registra zadaním nasledujúceho príkazu v príkazovom riadku start rmiregistry
Krok 5: Vytvorte a spustite aplikačný program servera
Ďalším krokom je vytvorenie aplikačného programu servera a jeho spustenie v samostatnom príkazovom riadku.
- Serverový program používa metódu createRegistry triedy LocateRegistry na vytvorenie rmiregistra v serverovom JVM s číslom portu odovzdaným ako argument.
- Metóda rebind triedy Naming sa používa na naviazanie vzdialeného objektu na nový názov.
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);> > }> > }> }> |
>
>
Krok 6: Vytvorte a spustite klientsky aplikačný program
Posledným krokom je vytvorenie klientskeho aplikačného programu a jeho spustenie v samostatnom príkazovom riadku. Metóda vyhľadávania triedy Naming sa používa na získanie odkazu na objekt Stub.
Java
skúste chytiť v jave
// 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);> > }> > }> }> |
>
>
Poznámka: Vyššie uvedený program klienta a servera sa vykonáva na rovnakom počítači, takže sa používa localhost. Ak chcete získať prístup k vzdialenému objektu z iného počítača, localhost sa nahradí IP adresou, na ktorej sa vzdialený objekt nachádza.
uložte súbory podľa názvu triedy ako
Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Dôležité postrehy:
- RMI je čisté java riešenie pre vzdialené volania procedúr (RPC) a používa sa na vytváranie distribuovaných aplikácií v jazyku Java.
- Objekty Stub a Skeleton sa používajú na komunikáciu medzi klientom a serverom.