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