RMI (Remote Method Invocation)

RMI (Remote Method Invocation) är ett API som tillhandahåller en mekanism för att skapa distribuerad applikation i java. RMI tillåter ett objekt att åberopa metoder på ett objekt som körs i en annan JVM.

RMI tillhandahåller fjärrkommunikation mellan applikationerna med två objekt stub och skelett.

förstå stub och skelett

RMI använder stub och skelett objekt för kommunikation med fjärrobjektet.

ett fjärrobjekt är ett objekt vars metod kan åberopas från en annan JVM. Låt oss förstå stubben och skelettobjekten:

stub

stubben är ett objekt, fungerar som en gateway för klientsidan. Alla utgående förfrågningar dirigeras genom den. Den ligger på klientsidan och representerar fjärrobjektet. När den som ringer åberopar metod på stubben objektet, det gör följande uppgifter:

  1. den initierar en anslutning med remote Virtual Machine (JVM),
  2. den skriver och överför (marshals) parametrarna till remote Virtual Machine (JVM),
  3. den väntar på resultatet
  4. den läser (unmarshals) returvärdet eller undantaget, och
  5. den returnerar slutligen värde för den som ringer.

skelett

skelettet är ett objekt, fungerar som en gateway för serversidan objektet. Alla inkommande förfrågningar dirigeras genom den. När skelettet tar emot den inkommande förfrågan gör det följande uppgifter:

  1. den läser parametern för fjärrmetoden
  2. den åberopar metoden på det faktiska fjärrobjektet och
  3. den skriver och överför (marshals) resultatet till den som ringer.

i Java 2 SDK introducerades ett stubprotokoll som eliminerar behovet av skelett.stub och skelett i RMI

förstå krav för distribuerade applikationer

om någon applikation utför dessa uppgifter kan den distribueras applikation.

.

  1. applikationen måste hitta fjärrmetoden
  2. den måste tillhandahålla kommunikationen med fjärrobjekten och
  3. applikationen måste ladda klassdefinitionerna för objekten.

rmi-applikationen har alla dessa funktioner, så det kallas den distribuerade applikationen.

Java rmi-exempel

ges de 6 stegen för att skriva RMI-programmet.

  1. skapa fjärrgränssnittet
  2. ge implementeringen av fjärrgränssnittet
  3. kompilera implementeringsklassen och skapa stub-och skelettobjekten med rmic-verktyget
  4. starta registertjänsten med rmiregistry-verktyget
  5. skapa och starta fjärrprogrammet
  6. skapa och starta fjärrprogrammet
  7. skapa och starta fjärrprogrammet klientprogram

rmi-exempel

i det här exemplet har vi följt alla 6-steg för att skapa och köra rmi-applikationen. Klientapplikationen behöver bara två filer, fjärrgränssnitt och klientapplikation. I rmi-applikationen interagerar både klient och server med fjärrgränssnittet. Klientprogrammet åberopar metoder på proxyobjektet, RMI skickar begäran till fjärrkontrollen JVM. Returvärdet skickas tillbaka till proxyobjektet och sedan till klientprogrammet.

rmi exempel

1) Skapa fjärrgränssnittet

för att skapa fjärrgränssnittet, utöka fjärrgränssnittet och förklara RemoteException med alla metoder för fjärrgränssnittet. Här skapar vi ett fjärrgränssnitt som utökar fjärrgränssnittet. Det finns bara en metod som heter add() och det förklarar RemoteException.

2) tillhandahålla genomförandet av fjärrgränssnittet

nu tillhandahålla genomförandet av fjärrgränssnittet. För att tillhandahålla implementeringen av fjärrgränssnittet måste vi

  • antingen utöka UnicastRemoteObject-klassen,
  • eller använda exportObject () – metoden för unicastremoteobject-klassen

om du utökar unicastremoteobject-klassen måste du definiera en konstruktör som förklarar RemoteException.

3) Skapa stub-och skelettobjekten med rmic-verktyget.

nästa steg är att skapa stub-och skelettobjekt med hjälp av RMI-kompilatorn. Rmic-verktyget åberopar rmi-kompilatorn och skapar stub-och skelettobjekt.

4) Starta registertjänsten med rmiregistry-verktyget

Starta nu registertjänsten med rmiregistry-verktyget. Om du inte anger portnumret använder det ett standardportnummer. I det här exemplet använder vi portnumret 5000.

5) skapa och kör serverprogrammet

nu måste rmi-tjänster vara värd i en serverprocess. Namnklassen innehåller metoder för att hämta och lagra fjärrobjektet. Namnklassen ger 5 metoder.

public statisk java.rmi.Fjärr lookup (java.lang.Sträng) kastar java.rmi.NotBoundException, java. Net. Missbildaturlexception, java.rmi.RemoteException; den returnerar referensen för fjärrobjektet.
public static void bind (java.lang.Sträng, java.rmi.Remote) kastar java.rmi.Redanboundexception, java.net.Missbildningurlexception, java.rmi.RemoteException; det binder fjärrobjektet med det angivna namnet.
public static void unbind (java.lang.Sträng) kastar java.rmi.RemoteException, java.rmi.NotBoundException, java.net.Missbildningsurlexception; det förstör fjärrobjektet som är bundet till det angivna namnet.
offentlig statisk void rebind (java.lang.Sträng, java.rmi.Remote) kastar java.rmi.RemoteException, java. net.MalformedURLException; det binder fjärrobjektet till det nya namnet.
public statisk java.lang.Stränglista (java.lang.Sträng) kastar java.rmi.RemoteException, java. net.Missbildningsurlexception; den returnerar en array med namnen på de fjärrobjekt som är bundna i registret.

i det här exemplet binder vi fjärrobjektet med namnet sonoo.

6) skapa och kör klientapplikationen

på klienten får vi stub-objektet med lookup () – metoden för Namnklassen och åberopar metoden på det här objektet. I det här exemplet kör vi server-och klientapplikationerna, i samma maskin så vi använder localhost. Om du vill komma åt fjärrobjektet från en annan dator ändrar du localhost till värdnamnet (eller IP-adressen) där fjärrobjektet finns.

utmatning av detta rmi-exempel

RMIRMI

meningsfullt exempel på RMI-applikation med Databas

Tänk på ett scenario, Det finns två applikationer som körs i olika maskiner. Låt oss säga MachineA och MachineB, machineA ligger i USA och MachineB i Indien. MachineB vill få en lista över alla kunder i MachineA ansökan.

Låt oss utveckla rmi-applikationen genom att följa stegen.

1) Skapa tabellen

först och främst måste vi skapa tabellen i databasen. Här använder vi Oracle10-databasen.

rmi-applikation med Databas

2) Skapa Kundklass och fjärrgränssnitt

fil: kund.java

Obs: kundklassen måste vara serialiserbar.

Fil: Bank.java

3) skapa den klass som ger genomförandet av fjärrgränssnitt

fil: BankImpl.java

4) kompilera klass rmic-verktyget och starta registertjänsten med rmiregistry-verktyget

rmi-exempel med Databas

5) skapa och kör servern

fil: MyServer.javaexempel på fjärrmetod anrop

6) skapa och kör klienten

fil: MyClient.java verkliga världen exempel på rmi