Java >> Java tutorial >  >> Java

Remote Method Invocation i Java

Remote Method Invocation (RMI) er en API, der tillader et objekt at påkalde en metode på et objekt, der findes i et andet adresserum, som kunne være på den samme maskine eller på en fjernmaskine. Gennem RMI kan et objekt, der kører i en JVM, der findes på en computer (klient-side), påberåbe metoder på et objekt, der findes i en anden JVM (server-side). RMI opretter et offentligt eksternt serverobjekt, der muliggør kommunikation på klient- og serversiden gennem simple metodekald på serverobjektet.

Stubobjekt: Stub-objektet på klientmaskinen bygger en informationsblok og sender denne information til serveren.

Blokken består af

  • En identifikator for det eksterne objekt, der skal bruges
  • Metodenavn, der skal påberåbes
  • Parametre til den eksterne JVM

Skeletobjekt: Skeletobjektet sender anmodningen fra stubobjektet til fjernobjektet. Den udfører følgende opgaver

  • Den kalder den ønskede metode på det rigtige objekt på serveren.
  • Den videresender parametrene modtaget fra stubobjektet til metoden.

RMI's funktion

Kommunikationen mellem klient og server håndteres ved at bruge to mellemliggende objekter:Stub-objekt (på klientsiden) og Skeleton-objekt (på server-siden), som også kan afbildes fra nedenstående medier som følger:

Dette er de trin, der skal følges sekventielt for at implementere grænsefladen som defineret nedenfor som følger:

  1. Definering af en fjerngrænseflade
  2. Implementering af fjerngrænsefladen
  3. Oprettelse af Stub- og Skeleton-objekter fra implementeringsklassen ved hjælp af rmic (RMI-kompiler)
  4. Start rmiregistry
  5. Opret og kør serverapplikationsprogrammet
  6. Opret og kør klientapplikationsprogrammet.

Trin 1:Definering af fjerngrænsefladen

Den første ting at gøre er at oprette en grænseflade, der giver en beskrivelse af de metoder, der kan påberåbes af fjernklienter. Denne grænseflade bør udvide fjerngrænsefladen, og metodeprototypen i grænsefladen bør afgive RemoteException.

Eksempel:

Java




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

 

 

Trin 2:Implementering af fjerngrænsefladen
Det næste trin er at implementere fjerngrænsefladen. For at implementere fjerngrænsefladen skal klassen udvides til UnicastRemoteObject-klassen i java.rmi-pakken. Der skal også oprettes en standardkonstruktør for at kaste java.rmi.RemoteException fra dens overordnede konstruktør i klassen.

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

 

 

Trin 3:Oprettelse af Stub- og Skeleton-objekter fra implementeringsklassen ved hjælp af rmic
rmic-værktøjet bruges til at kalde rmi-kompileren, der skaber Stub- og Skeleton-objekterne. Dens prototype er rmic classname. For ovenstående program skal følgende kommando udføres ved kommandoprompten
rmic SearchQuery.
Trin 4:Start rmiregistry
Start registreringsdatabasen ved at udstede følgende kommando ved kommandoprompten start rmiregistry
Trin 5:Opret og kør serverapplikationsprogrammet
Det næste trin er at oprette serverapplikationsprogrammet og udføre det på en separat kommandoprompt.

  • Serverprogrammet bruger createRegistry-metoden i LocateRegistry-klassen til at oprette rmiregistry i serverens JVM med portnummeret videregivet som et argument.
  • Genbindingsmetoden for navngivningsklassen bruges til at binde det eksterne objekt til det nye navn.

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

 

 

Trin 6:Opret og kør klientapplikationsprogrammet
Det sidste trin er at oprette klientapplikationsprogrammet og udføre det på en separat kommandoprompt. Opslagsmetoden for klassen Navngivning bruges til at få referencen til Stub-objektet.

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 GeeksforGeeks" );          }          catch (Exception ae)          {              System.out.println(ae);          }      } }

 

 

Bemærk: Ovenstående klient- og serverprogram udføres på samme maskine, så localhost bruges. For at få adgang til fjernobjektet fra en anden maskine, skal localhost erstattes med IP-adressen, hvor fjernobjektet er til stede.

gem filerne i henhold til klassenavnet som

Search.java , SearchQuery.java , SearchServer.java &ClientRequest.java
Vigtige bemærkninger:

  1. RMI er en ren java-løsning til Remote Procedure Calls (RPC) og bruges til at skabe de distribuerede applikationer i java.
  2. Stub- og Skeleton-objekter bruges til kommunikation mellem klient- og serversiden.

Denne artikel er bidraget afAakash Ojha . Hvis du kan lide GeeksforGeeks og gerne vil bidrage, kan du også skrive en artikel og sende din artikel til [email protected]. Se din artikel, der vises på GeeksforGeeks hovedside, og hjælp andre nørder. Skriv venligst kommentarer, hvis du finder noget forkert, eller hvis du vil dele flere oplysninger om emnet diskuteret ovenfor.


Java tag