RMI (Remote Method Invocation)

RMI (Remote Method Invocation) er en API, der giver en mekanisme til at oprette distribueret applikation i java. RMI tillader et objekt at påberåbe sig metoder på et objekt, der kører i en anden JVM.

RMI giver fjernkommunikation mellem applikationerne ved hjælp af to objekter stub og skelet.

forståelse af stub og skelet

RMI bruger stub og skeletobjekt til kommunikation med fjernobjektet.

et fjernobjekt er et objekt, hvis metode kan påberåbes fra en anden JVM. Lad os forstå stubben og skeletobjekterne:

stub

stubben er et objekt, fungerer som en port til klientsiden. Alle de udgående anmodninger dirigeres gennem det. Det er placeret på klientsiden og repræsenterer det eksterne objekt. Når den, der ringer påkalder metode på stub objekt, det gør følgende opgaver:

  1. det indleder en forbindelse med ekstern virtuel maskine (JVM),
  2. det skriver og transmitterer (marshals) parametrene til den eksterne virtuelle maskine (JVM),
  3. det venter på resultatet
  4. det læser (unmarshals) returværdien eller undtagelsen, og
  5. det returnerer endelig værdi for den, der ringer.

skelet

skeletet er et objekt, fungerer som en port til serversideobjektet. Alle indgående anmodninger dirigeres gennem den. Når skeletet modtager den indgående anmodning, udfører den følgende opgaver:

  1. det læser parameteren for fjernmetoden
  2. det påberåber metoden på det faktiske fjernobjekt, og
  3. det skriver og transmitterer (marshals) resultatet til den, der ringer op.

i Java 2 SDK blev der indført en stubprotokol, der eliminerer behovet for skeletter.stub og skelet i RMI

Forståelseskrav til de distribuerede applikationer

hvis en applikation udfører disse opgaver, kan den distribueres applikation.

.

  1. applikationen skal finde fjernmetoden
  2. den skal give kommunikationen med fjernobjekterne og
  3. applikationen skal indlæse klassedefinitionerne for objekterne.

RMI-applikationen har alle disse funktioner, så det kaldes den distribuerede applikation.

Java RMI eksempel

den er givet de 6 trin til at skrive RMI-programmet.

  1. Opret fjerngrænsefladen
  2. Giv implementeringen af fjerngrænsefladen
  3. kompilere implementeringsklassen og oprette stub-og skeletobjekter ved hjælp af rmic-værktøjet
  4. Start registry-tjenesten ved hjælp af rmiregistry-værktøjet
  5. Opret og start fjernprogrammet
  6. Opret og start klientapplikation

RMI-eksempel

i dette eksempel har vi fulgt alle de 6 trin for at oprette og køre RMI-applikationen. Klientapplikationen behøver kun to filer, fjerngrænseflade og klientapplikation. I RMI-applikationen interagerer både klient og server med fjerngrænsefladen. Klientapplikationen påberåber metoder på fuldmagtsobjektet, RMI sender anmodningen til fjernbetjeningen JVM. Returværdien sendes tilbage til fuldmagtsobjektet og derefter til klientprogrammet.

RMI eksempel

1) Opret fjerngrænsefladen

for at oprette fjerngrænsefladen skal du udvide Fjerngrænsefladen og erklære Fjerngrænsefladenundtagelse med alle metoder til fjerngrænsefladen. Her opretter vi en fjerngrænseflade, der udvider Fjerngrænsefladen. Der er kun en metode ved navn add (), og den erklærer Fjernundtagelse.

2) Giv implementeringen af fjerngrænsefladen

giv nu implementeringen af fjerngrænsefladen. For at levere implementeringen af Fjerngrænsefladen skal vi

  • enten udvide UnicastRemoteObject-klassen,
  • eller bruge eksportobject () – metoden i UnicastRemoteObject-klassen

hvis du udvider UnicastRemoteObject-klassen, skal du definere en konstruktør, der erklærer Fjernundtagelse.

3) Opret stub-og skeletobjekter ved hjælp af rmic-værktøjet.

næste trin er at oprette stub-og skeletobjekter ved hjælp af rmi-kompilatoren. Rmic-værktøjet påkalder RMI-kompilatoren og skaber stub-og skeletobjekter.

4) Start registry-tjenesten ved hjælp af rmiregistry-værktøjet

start nu registry-tjenesten ved hjælp af rmiregistry-værktøjet. Hvis du ikke angiver portnummeret, bruger det et standardportnummer. I dette eksempel bruger vi portnummer 5000.

5) Opret og kør serverprogrammet

nu skal rmi-tjenester hostes i en serverproces. Navngivningsklassen indeholder metoder til at hente og gemme det eksterne objekt. Navngivningsklassen giver 5 metoder.

offentlig statisk java.rmi.Fjernopslag (java.lang.String) kaster java.rmi.Java.net. Malformedurception, java.rmi.Fjernundtagelse; det returnerer referencen til fjernobjektet.
offentlig statisk void bind (java.lang.String, java.rmi.Remote) kaster java.rmi.Alleredebundundtagelse, java.net.Malformedurception, java.rmi.Fjernundtagelse; det binder fjernobjektet med det givne navn.
offentlig statisk tomrum unbind (java.lang.String) kaster java.rmi.Fjern undtagelse, java.rmi.Notboundundtagelse, java. net. Misformedurception; det ødelægger det fjerne objekt, der er bundet med det givne navn.
offentlig statisk void rebind (java.lang.String, java.rmi.Remote) kaster java.rmi.Remoteundtagelse, java. net. Misformedurception; det binder fjernobjektet til det nye navn.
offentlig statisk java.lang.Streng liste (java.lang.String) kaster java.rmi.Remoteundtagelse, java. net. Misformedurception; det returnerer en række navne på de eksterne objekter, der er bundet i registreringsdatabasen.

i dette eksempel binder vi fjernobjektet med navnet sonoo.

6) Opret og kør klientapplikationen

hos klienten får vi stub-objektet ved opslag () – metoden i Navngivningsklassen og påberåber metoden på dette objekt. I dette eksempel kører vi server-og klientapplikationerne i den samme maskine, så vi bruger localhost. Hvis du vil have adgang til fjernobjektet fra en anden maskine, skal du ændre localhost til værtsnavnet (eller IP-adressen), hvor fjernobjektet er placeret.

Output af dette RMI-eksempel

RMI RMI

meningsfuldt eksempel på RMI-applikation med database

overvej et scenario, der kører to applikationer i forskellige maskiner. Lad os sige MachineA og MachineB, machineA er placeret i USA og MachineB i Indien. MachineB ønsker at få en liste over alle kunder i MachineA-applikationen.

lad os udvikle RMI-applikationen ved at følge trinnene.

1) Opret tabellen

først og fremmest skal vi oprette tabellen i databasen. Her bruger vi oracle10 database.

RMI-applikation med database

2) Opret Kundeklasse og Fjerngrænseflade

fil: kunde.java

Bemærk: Kundeklasse skal være Serialiserbar.

Fil: Bank.java

3) Opret den klasse, der giver gennemførelsen af Remote interface

fil: BankImpl.java

4) kompilere klasse rmic værktøj og starte registreringsdatabasen tjeneste ved rmiregistry værktøj

RMI eksempel med database

5) oprette og køre serveren

fil: MyServer.javaeksempel på påkaldelse af fjernmetode

6) Opret og kør klienten

fil: MyClient.java virkelige verden eksempel på rmi