Java RMI (Remote Method Invocation) Gruppe 9: Ivar Steien Rasmussen Tom Anders Dalseng Andreas Petlund

Like dokumenter
Distribuerte objekter og objekt-basert mellomvare

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Distributed Component Object Model. Utvikling av distribuerte applikasjoner. Utvidelse av COM for støtte av distribuerte objekter

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

2 Om statiske variable/konstanter og statiske metoder.

CORBA Component Model (CCM)

Hentet fra Suns Totorial:

Jini. Overblikk. Gruppe 1: Odd-Wiking Rahlff, Arnor Solberg og Finn Haukebøe

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

INF Notater. Veronika Heimsbakk 10. juni 2012

Kapittel 9. Distribusjon. Fjernbruker. Tjenermaskin LAN WAN. Nærbruker. Figur 9-1: En enkel klient/tjener distribusjon

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Kapittel 7: Mer om arv

2 Om statiske variable/konstanter og statiske metoder.

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Introduksjon til objektorientert programmering

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL

Enkle generiske klasser i Java

Sortering med Comparable og Comparator

Implementering av caching ved hjelp av Spring. Christian Vestøl

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Socket og ServerSocket

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

TDT4100 Objektorientert programmering

Kapittel 8: Programutvikling

UNIVERSITETET I OSLO

Factory Patterns Interface Deklarerer at klassen skal bruke et interface (implements i Java) Definerer implementasjoner for alle metodene i interfacet

Å lese tall fra en fil, klassen Scanner

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Jini. Gruppe 1 Martin Skarsaune Bjørn Arne Dybvik Cuong Huu Truong. Definisjon

programeksempel Et større En større problemstilling Plan for forelesingen Problemstillingen (en tekstfil) inneholdt ordet "TGA"

Introduksjon til programmering og programmeringsspråk

Fra Python til Java, del 2

Løsningsforslag Test 2

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Arv. Book book1 = new Book(); book1. title = "Sofies verden" class Book { String title; } class Dictiona ry extends Book {

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Eksamen i Internetteknologi Fagkode: ITE1526

Kapittel 1: Datamaskiner og programmeringsspråk

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Programmeringsspråket C

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

Post-it spørsmål fra timen (Arv og subklasser)

Eksamen. Objektorientert Programmering IGR 1372

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Programmeringsspråket C

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

IN1010 V19, Obligatorisk oppgave 2

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

JSP - 2. Fra sist. Hvordan fungerer web? Tjenerside script HTML. Installasjon av Web-tjener Et enkelt JSP-script. Ønsker dynamiske nettsider:

IN1010. Fra Python til Java. En introduksjon til programmeringsspråkenes verden Dag Langmyhr

Programmeringsspråket C

Løse reelle problemer

Litt om Javas class-filer og byte-kode

Hvorfor objektorientert programmering? Objektorientert programmering i Python: Introduksjon. Læringsmål uke 7. Undervisning og pensum IN1000

INF5110. Oblig 2 presentasjon

Hvorfor objektorientert programmering?

ADT og OO programmering

Dagens tema: 12 gode råd for en kompilatorskriver

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Obligatorisk oppgave 4: Lege/Resept

Læringsmål for forelesningen

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

INF våren 2017

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Transkript:

Java RMI (Remote Method Invocation) Gruppe 9: Ivar Steien Rasmussen Tom Anders Dalseng Andreas Petlund

Antagelser og forutsetninger Implementasjonseksemplet kompileres og kjøres på Java SDK 1.4.2 Dokumentasjon er hentet fra versjoner 1.3.1 tom 1.4.2.

Arkitektur Oversikt over lagene Klient Applikasjonslaget Tjener Stub Proxylaget Skeleton Fjernreferanselaget Transportlaget Formålet med RMI er å få objekter på separate virtuelle maskiner til å se ut som, og oppføre seg som lokale objekter Dette oppnås ved hjelp av to spesielle objekter: Stub: Klientsideobjektet som representerer de fjerne objektene. Skeleton: Serversideobjekt som tar seg av alle detaljene med fjerne kall.

Arkitektur Applikasjonslaget Har ikke noe Interface Description Layer (IDL) Server Applikasjonen: Implementerer de fjerne metodene klienten bruker Eksporterer objektene med metoder som blir kalt fjernt (ved å extende UnicastRemoteObject ) Registrerer seg selv med rmi registry Klient applikasjonen Får referanse til fjerne objekter Caster objektet som et fjernt interface Benytter seg av de fjerne metodene

Arkitektur Proxylaget Stub: Stubben er klientens proxy til det fjerne objektet Den skriver/sender parametere til det fjerne objektet Den leser retur verdien eller exception og gir den til den som utførte kallet Skeleton: Skeleton er serverens proxy for det fjerne objektet Den leser innkommende parametre Den starter den faktiske metoden Den skriver/sender retur parametre

Arkitektur Fjernreferanselaget Er en abstraksjon mellom proxylaget og transportlaget Tar seg av kommunikasjon mellom stub og skeleton via transportlaget Har diverse avanserte funksjoner og mulighet for fremtidlig utvikling: Aktivering av fjerne objekter fra klient Connection recovery Kommunikasjon med flere servere/multi cast (ikke implementert) Og mer

Arkitektur Transportlaget RMI Transportlaget benytter TCP/IP som default. Kan spesifisere ut fra dine behov Andre protokoller Krypterte streams Komprimerte streams Andre sikkerhet og ytelse forhold/forbedringer

Security Manager Brukes til å begrense hva som kan utføres av kode som lastes ned til ditt system. Du kan spesifisere din egen security policy i en fil som sendes med ved oppstart: Java Djava.security.policy=policyfilename JDK inneholder et verktøy som kan brukes til å generere policy-filer. Uten å spesifisere en security manager, vil ikke den distribuerte applikasjonen tillate nedlasting og utføring av kode fra en annen maskin.

RMI Name Registry RMI Name Registry brukes til å registrere alle de tilgjengelige fjernobjektene som ligger på en spesifikk server RMI Name Registry åpner (som default) en port på 1099 og lytter på denne Kjører på samme maskin som fjernobjektene Hver maskin som tilbyr fjernobjekter må kjøre RMI Name Registry

Implementasjonseksempel: Ping Definere funksjonen til fjernklassen som et interface import java.rmi.remote; import java.rmi.remoteexception; } public interface Ping extends Remote { String ping() throws RemoteException; Interface klassen må deklareres public. Hvert interface må extende java.rmi.remote interfacet. Hver metode må kaste RemoteException. Alle fjernobjekter som skal benyttes som parametre eller returverdier må være deklarert som remoteinterface typen. (f.eks Ping, ikke PingImpl)

Implementasjonseksempel: Ping Skrive implementasjonen av server-klassen Klassen må implementere fjern-interfacet. public class PingImpl extends UnicastRemoteObject implements Ping { UnicastRemoteObject: Kan benyttes til å opprette et objekt som har følgende egenskaper: Bruker RMIs standard socket-baserte transport (TCP/IP). Kjører hele tiden...alternativet - Activatable: Kan benyttes til å opprette et objekt som har følgende egenskaper: Objektet blir opprettet og kjørt kun ved behov, i motsetning til å kjøre hele tiden. For å endre kommunikasjonsinnstillinger kan man implementere interfacet RMIClientSocketFactory

Implementasjonseksempel: Ping Konstruktøren til et fjern-objekt public PingImpl() throws RemoteException { super(); } Klasser som extender UnicastRemoteObject blir eksportert ved å kalle super() dvs gjøres mottakelige for fjernkall. super() er konstruktøren i java.rmi.server.unicastremoteobject. Man kan eksportere andre fjernobjekter ved å kalle UnicastRemoteObject.exportObject(). Dette gjøres fra konstruktøren. Activatable-objekter har en tilsvarende eksport metode. Konstruktøren må kaste RemoteException pga av at eksporten kan feile hvis kommunikasjonsressursene ikke er tilgjengelige.

Implementasjonseksempel: Ping Konstruktøren til et fjern-objekt - forts. public ActivatableImplementation(ActivationID id, MarshalledObject data) throws RemoteException { // Register the object with the activation system // then export it on an anonymous port super(id, 0); }

Implementasjonseksempel: Ping Implementasjon av metoden public String ping() throws RemoteException { return pong ; } Argumenter kan være alle datatyper for java-plattformen Objekter må implementere java.io.serializable. Lokale objekter blir kopiert. Det sendes en referanse til en stub ved fjernkall.

Implementasjonseksempel: Ping Security manager if (System.getSecurityManager() == null) { System.setSecurityManager(new RMISecurityManager()); } Garanterer at klasser som blir lastet ikke utfører operasjoner som ikke er lov. Kjøres fra main() i server og klient. I applets brukes den innebygde security manageren i klientens nettleser.

Implementasjonseksempel: Ping Instansiering av fjernobjekter PingImpl obj = new PingImpl(); Dersom man bruker UnicastRemoteObject, må serveren opprette en eller flere instanser av fjernobjektene. Større oppgave å sette opp et activatable objekt.

Implementasjonseksempel: Ping Instansiering av fjernobjekter Naming.rebind("//viisi/PingServer", obj); Binder et URL-formatert navn til fjernobjektet, og registrerer det i RMI Registry. Brukes av klienten til å lokalisere det første fjernobjektet. Det første objektet tar seg av å finne referanser til andre relevante objekter. rmiregistry bruker port 1099. Man kan evt spesifisere en annen port hvis dette er nødvendig. Naming.rebind ("//viisi:1234/pingserver, obj); Det andre parameteret er en referanse til objektimplementasjonen. Av sikkerhetsgrunner kan en server-applikasjon kun binde seg til et register som ligger på samme vert. Oppslag derimot kan gjøres fra en hvilken som helst vert

Implementasjonseksempel: Ping Klienten obj = (Ping)Naming.lookup("//viisi/PingServer"); Lager en stub som brukes for å kalle lookup-metoden på serveren. Returnerer en instans av PingImpl_stub som er bundet til navnet som ble gitt som parameter. Nå kan applikasjonen gjøre kall til fjernobjektet som om det lå lokalt.

Implementasjonseksempel: Ping Verktøy og kompilering Koden kompileres på vanlig måte med javac. Etterpå kjøres verktøyet rmic på klassefilen som genereres fra rmi interfacekoden. rmic genererer bytekode til stub og skeleton for fjerninterfacet. Oppslagstjenesten startes med rmiregistry <portnr>.

Java RMI vs. CORBA Java RMI CORBA Støttede språk Java Java, C++, C, Smalltalk, osv.. Tjenester Navnetjeneste Navnetjeneste, persistens, transaksjoner osv.. Oppsett og programmering Enkelt Mer komplekst. Skalerbarhet God Utmerket (avhenging av leverandør). Ytelse God Utmerket (avhengig av leverandør). CORBA lar deg bruke det programmeringsspråket du ønsker. Java RMI forutsetter Java. CORBA er optimalisert for større, mer skalerbare systemer der du kanskje opererer med tusenvis av objekter. CORBA er mer kompleks å programmere og sette i drift. CORBA har støtte for et bredt spekter av ekstratjenester for f.eks transaksjoner, sikkerhet, persistens osv.

Java RMI vs. CORBA Fordeler med Java RMI: Ingen ekstra kompileringssteg. Kompakt implementasjon. Overføring av data og kode. Klienten kan laste ned stub fra serveren. Ulemper: Begrenset til Java Proprietær standard Dårlig ytelse (halvparten så rask som ORBACUS)

Java RMI vs. ORBACUS Fordeler med CORBA: Skalerbarhet. Ytelse. Ekstratjenester. Ulemper: Mer komplisert i oppsett og programmering. Selv om CORBA er en åpen standard, er de fleste implementasjoner kommersielle.

Kilder Twisted Transistor Introduction to Java Distributed Objects Using RMI and CORBA Java Remote Method Invocation (a (very) short introduction) University of Stuttgart. Institute of Parallel and Distributed High-Performance Systems. Java.sun.com Java RMI Tutorial.

Spørsmål?