Jo, men gamle spørgsmål drukner i nye når der nu er 215 åbne.
RMI (Som er grundbegrebet) betyder Remote Method Invocation, som languy også siger. Dvs. Du har et program på en maskine, som ønsker at kalde noget som ligger på en anden maskine. Nu siger jeg godt nok maskine, men det kan også gælde hvis man kalder mellem to \"virtuelle maskiner\" eller JVM som java fortolkeren kaldes.
Hvis du kender begrebet Remote Procedure Call, er RMI det samme bare objektorienteret. Hvis du ikke kender det, er fidusen nogenlunde følgende:
Når man udvikler client/server løsninger vil der typisk være en række klienter, som ønsker at forbinde sig til en fælles server, som forstår at behandle en række service. I objektorientering vil vi som regel invokere en metode på et remote object. Det der skal ske er, at vi pakker vores argumenter ind (ved hjælp af serialisering) og sender via netværket til serveren, som pakker dem ud og gør noget ved det. Evt. svar skal samme vej retur.
For at gøre det så nemt som muligt, skriver man et interface som beskriver hvordan serveren skal opføre sig. Dette interface kan så kompileres med en særlig kompiler (rmic), som så generer et par klasser, som overholder en streng netværksprotokol, men sørger for at data kommer sikkert frem og tilbage. På klient siden kalder man en af disse klasser (kaldet en stub), som så vil kommunikere med en af de andre klasser, som ligger på server klassen (denne kaldes for skel eller skeleton). Skel klassen vil så pakke argumenter ud og kalder en (af dig) nærmere specificeret klasse, som udfører arbejdet.
I bund og grund kan man på klienten kalde en metode forholdsvis simpelt, ala // obtain remote reference. SomeRemoteObject obj = ... getAReferenceSomeWay(); // described later. // Just call methods. String s = obj.calculateGreeting(6);
På serversiden har man så en klasse, som implementerer metoden: public String calculateGreeting(int x) {...}
De genererede klasser skaber forbindelse mellem klienten og serveren.
OK, så langt så godt.
For at få det i gang kræves det selvfølgelig at serveren kører. Men klienten skal have fat i en instans af den rigtige klasse, for at kunne gøre dette. Det sker gennem en såkaldt Lookup mekanisme, der finder den rigtige klasse man skal bruge. Det er her RMID kommer ind i billedet, da den er en slags telefonbog i denne sammenhæng.
Når serveren starter op, vil den (typisk) forsøge at kalde en lookupservice, en slags telefonbog, og fortælle den at: 1) Jeg er en rmi-server-service 2) Jeg kalder mig \"xxx\" 3) Man skal bruge denne type klasse for at snakke med mig.
En klient vil ligeså kontakte en lookupservice, og spørge om 1) er der en server-service, der hedder \"xxx\" og 2) Hvordan får jeg forbindelse med den.
RMID er denne telefonbog, som står og er mellemled mellem servere og klienter. Bemærk, man behøver kun een RMID på et netværk selv om man måske både har mange klienter og mange servere.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.