RMI står for Remote metode Invocation. Det er en mekanisme, der gør det muligt for et objekt, der er bosiddende i et system (JVM), at få adgang til/påberåbe sig et objekt, der kører på en anden JVM.
RMI bruges til at opbygge distribuerede applikationer; det giver fjernkommunikation mellem Java-programmer. Det findes i pakken java.rmi.
arkitektur af en RMI-applikation
i en RMI-applikation skriver vi to programmer, et serverprogram (ligger på serveren) og et klientprogram (ligger på klienten).
-
inde i serverprogrammet oprettes et eksternt objekt, og reference til dette objekt stilles til rådighed for klienten (ved hjælp af registreringsdatabasen).
-
klientprogrammet anmoder om de eksterne objekter på serveren og forsøger at påberåbe sig sine metoder.
følgende diagram viser arkitekturen for en RMI-applikation.
lad os nu diskutere komponenterne i denne arkitektur.
-
transportlag-dette lag forbinder klienten og serveren. Det styrer den eksisterende forbindelse og opretter også nye forbindelser.
-
Stub – en stub er en repræsentation (fuldmagt) af fjernobjektet hos klienten. Det ligger i klientsystemet; det fungerer som en port til klientprogrammet.
-
skelet − dette er det objekt, der ligger på serversiden. stub kommunikerer med dette skelet for at videregive anmodning til fjernobjektet.
-
RRL (Remote Reference Layer) – det er det lag, der styrer klientens referencer til det eksterne objekt.
bearbejdning af en RMI-applikation
følgende punkter opsummerer, hvordan en RMI-applikation fungerer−
-
når klienten ringer til fjernobjektet, modtages det af stubben, som til sidst sender denne anmodning til RRL.
-
når klientsiden RRL modtager anmodningen, påberåber den sig en metode kaldet invoke () af objektet remoteRef. Den sender anmodningen til RRL på serversiden.
-
RRL på serversiden sender anmodningen til skeletet (fuldmagt på serveren), som endelig påberåber det krævede objekt på serveren.
-
resultatet sendes helt tilbage til klienten.
Marshalling og Unmarshalling
når en klient påberåber sig en metode, der accepterer parametre på et eksternt objekt, samles parametrene i en meddelelse, før de sendes over netværket. Disse parametre kan være af primitiv type eller objekter. I tilfælde af primitiv type sættes parametrene sammen, og der er knyttet en overskrift til den. Hvis parametrene er objekter, så serialiseres de. Denne proces er kendt som marshalling.
på serversiden adskilles de pakkede parametre, og derefter påberåbes den krævede metode. Denne proces er kendt som unmarshalling.
RMI-registreringsdatabasen
RMI-registreringsdatabasen er et navneområde, hvor alle serverobjekter er placeret. Hver gang serveren opretter et objekt, registrerer det dette objekt med rmiregistry (ved hjælp af bind() eller reBind() metoder). Disse registreres ved hjælp af et unikt navn kendt som bind navn.
for at påberåbe sig et fjernobjekt skal klienten have en reference til objektet. På det tidspunkt henter klienten objektet fra registreringsdatabasen ved hjælp af dets bind-navn (ved hjælp af opslag () – metoden).
følgende illustration forklarer hele processen –
mål for RMI
Følgende er målene for RMI−
- for at minimere kompleksiteten af ansøgningen.
- for at bevare typesikkerheden.
- distribueret affaldssamling.
- Minimer forskellen mellem at arbejde med lokale og eksterne objekter.