RMI: - Remote Method Inovacion
 kommunikation mellan java plattformar
 RMI teknologin tillåter att ett lokalt program anropar metoder i ett objekt i ett avlägset
system.
 Ger programmeraren möjlighet att distribuera programmet över ett nätverk
 Utför en beräkning på den lämpligaste maskinen
 En lokal klient kan anropa metoder på det avlägsna objektet med samma syntax som
lokala objekt.
 Vid ett anrop av programmet måste parametervärden överföras till serven och retur
värdet ska skickats tillbaka till klienten.
 Vid överföring av objekt måste klasser som definierar objekt implementerar antigen
Serializable eller Externaliezable interface.
RMI arkitektur:
3 nivåer
* Subs/skelleton;
* Remote References
* transport
Java Remote Method Invocation - en modell för att kommunicera mellan Javaapplikationer även på andra datorer i ett nätverk
RMI står för Remote Method Invocation och är en sorts RPC(Remote Procedure Calls)
för Java. (En modernare, mer avancerad modell är CORBA.)
RMI) som är plattformsoberoende men kräver just Java som utvecklingsspråk.
RMI tillåter att objekt som finns på åtskilda värdar kan kommunicera med varandra.
Remote Method Invocation (RMI) innebär att man anropar en metod deklarerad i ett interface
vilket implementeras av ett distribuerat objekt. Att göra detta ser ut som att anropa en metod
till vilket lokalt objekt som helst.
RMI applikationer består vanligen av två separata program: en serverapplikation och en
klientapplikation. Typiskt är att serverapplikationen skapar ett antal distribuerade objekt,
vilka görs tillgängliga genom referenser. Servern väntar sedan på att klienter skall anropa
metoder som finns tillgängliga i dessa distribuerade objekt.
RMI ser till att problemet med dataportabilitet försvinner och genom att stödja säker kod
förflyttning tillåter RMI de fördelar som objektorinterad programmering tillför kommer att
fungera över nätverkets gränser.
Genom att använda sig av RMI går det att skriva distribuerade objekt med hjälp av java.
RMI tillhandahåller sätt att hitta, aktivera och slänga objekt grupper. Data kan flyttas runt
mellan olika objekt i närverket. Objekten kan integrera med varandra.
RMI gör så att objekt kan kontakta objekt som befinner sig på andra maskiner och andropa
det andra objektets metoder.
RMI ligger som lager ovan på JVM som i sin tur ligger ovan på Operativsystemet.
RMI bygger på RPC(Remote Procedure Call), RMI är suns version av RPC. Men den har
yttligare en egenskap, en eller flera objekt kan skickas med den begäran som skickas till
fjärrdatorn. Dessa objekt kan inkludera information som ändar den service som utförs på
fjärrdatorn.
RMI består av tre lager. Det översta är proxy/stubbeprogrammet på klientsidan och det
korresponderande skelettet på serversidan.
Nästa lager är det som kallas Remote Reference Layer vilket kan uppträda lite olika beroende
på
vilka parametrar som skickas av det anropande programmet. T.ex. kan lagret avgöra om en
begäran är ett anrop till en enda fjärrtjänst eller om det är till flera fjärrprogram som vid en
multicast.
Det understa lagret kallas Transport Connection Layer och detta lager sätter upp och sköter
management av begäran.
Om man använder RMI så är man begränsad till Java som programmeringsspråk. Om man
använder CORBA så kan olika delar av det distribuerade systemet kodas i olika språk.
Microsoft Internet Explorer stöder ej RMI
Stub
– Måste finnas på klientsidan och serversidan. Detta för
att klienter ska ha möjlighet att ladda ner stubbarna.
– Klienter arbetar endast mot denna, inte RemoteObjektet
självt. Innehåller samma metoder som RemoteObjektets
interface.
• (Skeleton)
– Endast på serversidan. Ett objekt bestående av en metod
som via JRMP anropar själva RemoteObjektet. Onödig
sedan länge men finns med i många exempel.
• Kompileras med rmic –v1.2 RemoteKlass
Det finns flera olika API:er för att hantera distribuerade objekt både i Java och i andra språk.
RMI är ett av de enklare, i Java finns det flera andra som utökar funktionaliteten hos RMI.
För att ett metodanrop ska kunna utföras över nätet måste tre grundförutsättnigar uppfyllas:
1. Det anropande objektet måste hitta det anropade objektet
2. Objekten måste kommunicera med varandra
3. Om ett objekt skickas från en dator till en annan måste objektets class-fil finnas på den
dator där den ska exekveras.
Alla metoder måste kunna kasta java.rmi.RemoteException och interfacet måste ärva
interfacet java.rmi.Remote
import java.rmi.server.*;
import java.rmi.*;
Klassen som ska anropas över nätet måste ärva java.rmi.server.UnicastRemoteObject.
Koden som ska skicka iväg parametrarna måste skapas. Det görs genom att köra kommandot
rmic på serverklassen
Programmet rmiregistry måste vara igång på servern. Det hanterar en databas där RMIservrar kan registrera sig så att de kan hittas av klienter. Starta det genom att skriva
rmiregistry.
RMI:s registry är som sagt en form av databas där objektrefrenser kan registreras för att
senare slås upp av klienter. Om inget annat anges använder det port 1099. Anropen av
registryt sker på precis samma sätt som anropen mellan klient och server, med hjälp av RMI.
Två olika typer av objekt kan skickas som parameter vid ett RMI-anrop. Dels objekt av
klasser som implementerar Serializable, dels objekt av klasser som implementerar Remote.
Huvudporten kl 1