Bemærk:
java.rmi-pakken : Remote Method Invocation (RMI) er blevet forældet i Java 9 og nyere versioner til fordel for andre fjernkommunikationsmekanismer såsom webtjenester eller Remote Procedure Calls (RPC).
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 er til stede på en computer (klientsiden), påkalde metoder på et objekt, der findes i en anden JVM (serversiden). RMI opretter et offentligt eksternt serverobjekt, der muliggør kommunikation på klient- og serversiden gennem simple metodekald på serverobjektet.
Stubobjekt: Stubobjektet på klientmaskinen bygger en informationsblok og sender denne information til serveren.
Blokken består af
scanner.next java
- En identifikator for det eksterne objekt, der skal bruges
- Metodenavn, som skal påberåbes
- Parametre til den eksterne JVM
Skeletobjekt: Skeletobjektet sender anmodningen fra stubobjektet til det fjerne objekt. Den udfører følgende opgaver
- Den kalder den ønskede metode på det rigtige objekt, der er til stede på serveren.
- Den videresender parametrene modtaget fra stubobjektet til metoden.
RMI fungerer
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 Interface som defineret nedenfor som følger:
- Definering af en fjerngrænseflade
- Implementering af fjerngrænsefladen
- Oprettelse af Stub- og Skeleton-objekter fra implementeringsklassen ved hjælp af rmic (RMI-kompiler)
- Start rmiregistry
- Opret og kør serverapplikationsprogrammet
- 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 skal udvide Remote-grænsefladen, og metodeprototypen i grænsefladen skal kaste RemoteException.
Eksempel:
Java
konverter char til string 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;> > }> }> |
>
>
struktur i datastruktur
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 i Naming-klassen bruges til at binde fjernobjektet 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);> > }> > }> }> |
pete davidson
>
>
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
ubuntu build væsentlige
// 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);> > }> > }> }> |
>
>
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:
- RMI er en ren java-løsning til Remote Procedure Calls (RPC) og bruges til at skabe de distribuerede applikationer i java.
- Stub- og Skeleton-objekter bruges til kommunikation mellem klient- og serversiden.