Notera:
java.rmi-paketet : Remote Method Invocation (RMI) har fasats ut i Java 9 och senare versioner, till förmån för andra fjärrkommunikationsmekanismer som webbtjänster eller Remote Procedure Calls (RPC).
Remote Method Invocation (RMI) är ett API som tillåter ett objekt att anropa en metod på ett objekt som finns i ett annat adressutrymme, vilket kan vara på samma maskin eller på en fjärrdator. Genom RMI kan ett objekt som körs i en JVM som finns på en dator (klientsidan) anropa metoder på ett objekt som finns i en annan JVM (serversidan). RMI skapar ett offentligt fjärrserverobjekt som möjliggör kommunikation på klient- och serversidan genom enkla metodanrop på serverobjektet.
Stubobjekt: Stubbobjektet på klientmaskinen bygger ett informationsblock och skickar denna information till servern.
Blocket består av
- En identifierare för fjärrobjektet som ska användas
- Metodnamn som ska anropas
- Parametrar till fjärrkontrollen JVM
Skelettobjekt: Skelettobjektet skickar begäran från stubbobjektet till fjärrobjektet. Den utför följande uppgifter
- Den anropar den önskade metoden på det verkliga objektet som finns på servern.
- Den vidarebefordrar parametrarna som tas emot från stubbobjektet till metoden.
RMI fungerar
Kommunikationen mellan klient och server hanteras genom att använda två mellanliggande objekt: Stub-objekt (på klientsidan) och Skeleton-objekt (på serversidan) som också kan avbildas från media nedan enligt följande:
Det här är stegen som ska följas sekventiellt för att implementera gränssnittet enligt definitionen nedan enligt följande:
- Definiera ett fjärrgränssnitt
- Implementering av fjärrgränssnittet
- Skapa Stub- och Skeleton-objekt från implementeringsklassen med rmic (RMI-kompilator)
- Starta rmiregistry
- Skapa och kör serverapplikationsprogrammet
- Skapa och kör klientapplikationsprogrammet.
Steg 1: Definiera fjärrgränssnittet
Det första du ska göra är att skapa ett gränssnitt som ger en beskrivning av de metoder som kan anropas av fjärrklienter. Det här gränssnittet bör utöka fjärrgränssnittet och metodprototypen i gränssnittet bör kasta RemoteException.
Exempel:
Java
// Creating a Search interface> import> java.rmi.*;> public> interface> Search> extends> Remote> {> > // Declaring the method prototype> > public> String query(String search)> throws> RemoteException;> }> |
>
>
Steg 2: Implementering av fjärrgränssnittet
Nästa steg är att implementera fjärrgränssnittet. För att implementera fjärrgränssnittet bör klassen utökas till UnicastRemoteObject-klassen i java.rmi-paketet. Dessutom måste en standardkonstruktor skapas för att kasta java.rmi.RemoteException från dess överordnade konstruktor 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;> > }> }> |
>
tar bort från arraylist
>
Steg 3: Skapa Stub- och Skeleton-objekt från implementeringsklassen med rmic
Verktyget rmic används för att anropa rmi-kompilatorn som skapar Stub- och Skeleton-objekten. Dess prototyp är rmic classname. För ovanstående program måste följande kommando utföras vid kommandotolken
rmic SearchQuery.
Steg 4: Starta rmiregistry
Starta registertjänsten genom att utfärda följande kommando vid kommandotolken start rmiregistry
Steg 5: Skapa och kör serverapplikationsprogrammet
Nästa steg är att skapa serverapplikationsprogrammet och köra det på en separat kommandotolk.
- Serverprogrammet använder createRegistry-metoden i klassen LocateRegistry för att skapa rmiregistry inom serverns JVM med portnumret som ett argument.
- Rebind-metoden i Naming-klassen används för att binda fjärrobjektet till det nya namnet.
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);> > }> > }> }> |
>
>
Steg 6: Skapa och kör klientapplikationsprogrammet
Det sista steget är att skapa klientapplikationsprogrammet och köra det på en separat kommandotolk. Uppslagsmetoden för klassen Naming används för att få referensen till 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 techcodeview.com'> );> > }> > catch> (Exception ae)> > {> > System.out.println(ae);> > }> > }> }> |
>
>
Notera: Ovanstående klient- och serverprogram körs på samma maskin så localhost används. För att komma åt fjärrobjektet från en annan maskin måste localhost ersättas med IP-adressen där fjärrobjektet finns.
spara filerna enligt klassnamnet som
Search.java, SearchQuery.java, SearchServer.java & ClientRequest.java
Viktiga iakttagelser:
- RMI är en ren java-lösning för Remote Procedure Calls (RPC) och används för att skapa de distribuerade applikationerna i java.
- Stub- och Skeleton-objekt används för kommunikation mellan klienten och serversidan.