Hvad er et distribueret objekt? Plan 12.3. Objekter, objektreferencer, metoder, parameteroverførsel. Objekter: notation



Relaterede dokumenter
RMI introduktion. Denne artikel beskriver Java RMI (Remtote Method Invocation).

Videregående Programmering Obligatorisk opgave - 3. semester, efterår 2004

University of Southern Denmark Syddansk Universitet. DM503 Forelæsning 11

RMI med BlueJ. Tutorial lavet af Jákup W. Hansen TSU semester 11. desember 2007

Tree klassen fra sidste forelæsning

Test af It-komponent

Hvad er Objekter - Programmering

Dag 10 Flertrådet programmering

Videregående programmering i Java

SWC eksamens-spørgsmål. Oversigt

DANMARKS TEKNISKE UNIVERSITET

Threads i Java. Denne artikel giver en introduktion til threads i Java. Den beskriver hvad tråde er og forklarer hvordan de bruges i Java

Programmering. Udvidet Programmering. Kurserne. Kurset: programmering i sproget Java. Lærerne: Morten Larsen og Peter Sestoft

Objektorienteret Programmering

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 2

DM502. Peter Schneider-Kamp

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

Ugeseddel 4 1. marts - 8. marts

Jacob Nordfalk. Ingeniørhøjskolen i København. Nykøbing F itvisioncenter 24. februar 2004

Software Construction 1 semester (SWC) Spørgsmål 1

Virkefeltsregler i Java

Objektorienterede metoder

Integrationsmanual. Anvendelse af webservice til kursusoversigt i Campus. Brugervejledning til udviklere

Klasser og Objekter i Python. Uge 46 Learning Python: kap 15-16,

Kursus 02199: Programmering. Lidt om forelæseren. Velkommen til. Praktisk information: kursusaktiviteter. Praktisk information: forelæsninger

Introduktion til ActionScript, fortsat

Singleton pattern i Java

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Programmering og Problemløsning, 2017

BRP Kursusintroduktion og Java-oversigt

Grundlæggende Programmering ITU, Efterår Skriftlig eksamen i Grundlæggende Programmering

Java Programmering. En bog for begyndere. Skrevet af Henrik Kressner

Version Dato Beskrivelse /11/2012 Initial version /03/2013 Tilføjet eksempel med Template Agent, generelt udvidet dokumentet.

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

Hvordan vælger jeg dokumentprofilen?

Maskinarkitektur. Lars Kristensen Christian Storm dmasark 1

Programmering I Java/C#

DM507 Algoritmer og datastrukturer

Eksempel på en database: studenter, kurser, eksamener

Skriftlig eksamen i Datalogi

Computer netværk og TCP/IP protokoller. dcomnet 1

Løsning af møntproblemet

Databaseadgang fra Java

Eksamens spørgsmål i Java HTML - DataBase 3. Semester (i)

SigmaT.

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

Introduktion til C programmering

METODER ARV KLASSER. Grundlæggende programmering Lektion 5

Abstrakte datatyper C#-version

Refleksion i Java. 8. juli 2003

Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

DM507 Algoritmer og datastrukturer

Speciale. Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende Java Optimized Processor (JOP)

Arkitektur for begyndere

Indledning. Hvorfor det forholder sig sådan har jeg en masse idéer om, men det bliver for meget at komme ind på her. God fornøjelse med læsningen.

Klasser og Objekter i Python. Uge 11

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

02101 Indledende Programmering Introduktion til Eclipse

A Profile for Safety Critical Java

EG Data Inform. Byggebasen. WCF og webservices. Jens Karsø

Transkript:

Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Hvad er et distribueret objekt? Et objekt hvis metoder kan kaldes fra andre processer dvs. som tillader fjernprocedurekald ( fjernmetodekald?) bemærk metoden udføres lokalt principielt processer som kører på forskellige maskiner ikke nødvendigvis fjerne kald/brug af konstruktorer eller attributter De basale problemer: hvordan etableres forbindelse til objekt i en anden proces? hvordan kommunikeres hvilken metode, der ønskes kaldt? hvordan overføres parametre og returværdi? Design spørgsmål: hvorledes opnås en passende transparens? semantik: hvad er opførslen i tilfælde af fejl? Objekter: notation Class Client <kode dvs. definitionen af class Client> et objekt, som er en instans af class Client Objekter, objektreferencer, metoder, parameteroverførsel Class Client Server s = new Server; Data d = new Data(); String txt = s.p(d); s.p(d) class Server // konstruktorer server(){..; // attributter Worker w; class Data objektet har en attribut, som er en instans af class Data class Data <en tekst> // metoder String p(data d){..; Objektreference (variabel): kan være implementeret som C pointer (tænk på pointer til datastruktur i C) Metodekald (lokalt): vil være oversat til maskinkode eller bytecode bruger ikke nødvendigvis navnet p

Opgave: Skriv pæn definition af class Client Løsning Class Client Server s = new Server; Data d = new Data(); String txt = s.p(d); Class Client Server s = new Server; Data d = new Data(); String txt = s.p(d); Class Client Server s; String txt; public Client () { s = new Server(); d = new Data(); public void gettext() { txt = s.p(d); Distribuerede objekter: begreber Navneservice: service som returnerer referencer til distribuerede objekter ud fra symbolske, globale navne (tekster) Reference til distribuerede objekter ( fjernreference?) En objektreference, som logisk set refererer til et distribueret objekt Parameteroverførsel parametre til fjernprocedurekald bør kunne være af vilkårlig type, herunder være et vilkårligt objekt call by value: overførsel af kopi, vs. call by reference: overførsel af reference Marshalling: forbehandling af argumenter til fjernprocedurekald, især serialisering: transformation af objekter til bytesekvens Stub (proxy): et objekt på klientsiden som kaldet går igennem Skelet: et objekt på serversiden som kaldet går igennem Dispatcher: tråd på serverside, som modtager kaldet, behandler evt. dette ved at kalde metoder i skelettet A Referencer i fjernprocedurekald (jf. CDK figur 5.6) Stub Fjernref. modul Komm Klient med objekt A Komm Fjernref. modul Skelet A har en fjernreference til B refererer logisk set til B. A s fjernreference er i virkeligheden en reference til stubben (svarer til en C pointer). Stubben indeholder en egentlig, global reference til B (en datastruktur med IP nummer m.m.). Den globale reference til B oversættes af fjernreferencemodulet hos serveren til en lokal reference til B (igen svarende til en C pointer). Navneservice ikke vist på tegning B Server med distr. objekt B

Plan 12.3. Hello World! Opgave 1 Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen HelloApplet sayhello() Hello World! Klientprogram: applet som ikke selv ved hvad den skal skrive ud. HelloImpl String sayhello() { return Hello World! ; Serverprogram: indeholder distribueret objekt med sayhello() kunne være kompliceret server, som vi vil styre via browser Opgave 1: klientsidens kildetekst <html> <applet codebase=../../classes/ code=rmihello.helloapplet width=350 height=120> </applet> </html> package RMIHello; import..; public class HelloApplet { Hello obj; String msg; void init() { try { lookup() modtager //127.0.0.1/HelloServer og returnerer en fjernreference obj = (Hello)Naming.lookup( // + getcodebase().gethost() + /HelloServer ); msg = obj.sayhello(); catch (..) {.... Opgave 1: et interface som både server og klient skal kende package RMIHello; import..; public interface Hello implements Remote { public String sayhello() throws RemoteException;

Opgave 1: serverens kildetekst package RMIHello; import..; public class HelloImpl extends UnicastRemoteObject implements Hello { public HelloImpl { super(); // eksporterer objektet // dvs. indføjer i det lokale kommunikationsmodule public String sayhello() { return Hello World! ; // definerer metoden der kan kaldes fjernt public static void main(..) {.. // security manager try { HelloImpl obj = new HelloImpl(); Naming.rebind( HelloServer,obj); // offentliggører objektet under symbolsk navn catch (..) {.. Klient Brug af RMI Registry et obj = (Hello)Naming.lookup (..HelloServer ); msg = obj.sayhello(); tid Server obj = new HelloImpl(); Naming.rebind( HelloServer,obj); Opgave 1: oversættelse Brug af "Stubbe" Hello.java HelloApplet.java HelloImpl.java javac javac javac Hello.class HelloApplet.class HelloImpl.class Oprettelse af reference til fjernt objekt Klient Har du et objekt ved navn "HelloServer"? Stub bytecode + stub instans Server Kommando: javac X.java X.java javac rmic v1.2 HelloImpl_Stub.class brug Klient Stub Server

Opgave 1 kør RMI involverer tre processer maskine 1: <prompt> java rmiregistry & <prompt> java RMIHello.HelloImpl maskine 2: <prompt> appletviewer RMIHello/hello.html Proces A Har du et objekt ved navn "o"? Den tredje proces (C): På serversiden er der også en naming service objektet obj er registreret under navnet "o" obj Proces B o Proces C Ny opgave: skriv almindelig Java klient, som svarer til HelloApplet package RMIHello; import java.rmi.naming; import java.rmi.remoteexception; public class HelloClient { String message = "blank"; Hello obj = null; public HelloClient() { try { obj = (Hello)Naming.lookup("//127.0.0.1/HelloServer"); message = obj.sayhello(); catch (Exception e) { System.out.println("HelloClient exception: " + e); public static void main(string args[]) { HelloClient hc = new HelloClient(); System.out.println(hc.message);

Plan 12.3. Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse RMI Middleware Softwaren som muliggør grænseflade til fjerne objekter: metodekald oprettelse af referencer Implementeret vhja. sockets Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen Marshalling/unmarshalling serialisering, genskabelse af struktur fejlhåndtering oversættelse af referencer A Stub Komm Fjernref. modul Opgave 1: Stubbe Java serialisering // Bytecode for class HelloImpl_Stub samt en instans af den overføres til klient // på passende tidspunkt Class HelloImpl_Stub public String Hello() { <serialize> <send to remoteobj> <remoteobj> public class Person implements Serializable { private String name; private String place; private int year; public Person(String n, String p, int y) { name = n; place = p; year = y; Muliggør entydig konvertering mellem objekter og bytesekvenser Serialiser et objektet dannet med sætningen Person p = new Person( Jensen, Kbh. + / + DK, 1975); Hvorfor overføre klassenavn? versionsnummer?

To måder at overføre objekt referencer mellem processer (1) Via naming service jf. HelloServer (2) Som parametre til fjernprocedurekald Opgave: hvordan bruges metode (2) i CDK s tavle eksempel? Fælles: de objekter, der overføres referencer til, skal implementere et interface, som er kendt hos både server og klient, og som nedarver fra java.rmi.remote de objekter, der overføres referencer til, skal være instanser af klasser som der på server siden er genereret stubbe til Forskel: (1) kræver rebind()/lookup i rigtig rækkefølge (1) kræver brug af symbolsk navn på det/de distribuerede objekter Fejlhåndtering, RMI request/reply protokol Basis for kommunikationsmodulet i Java RMI er en request/reply protokol med tre basale operationer: byte[] dooperation(remoteobjectref r, methodid m, byte[] args) sender fjernprocedurekald, efter serialisering, fra klient til server. ud fra r, findes (ip,port) m pakkes med ind i bytesekvens byte[] getrequest() lytter efter andre processer, der har kaldt dooperation() sendreply(byte[] r, InetAddress ip,int port) sender svar Oversættelse af referencer Når getrequest() modtager et kald af byte[] dooperation(remoteobjectref r, methodid m, byte[] args) skal objekt og metode findes (og argumenter skal genskabes som objekter). Objekt findes via fjernreferencemodul. Metode findes enten via skelet (i JDK 1.1) eller via Javas reflektion (i JDK 1.2 og senere). Skal dooperation gentages hvis der ikke kommer svar? Skal getrequest filtrere dubletter?

Plan 12.3. Refleksion Oversigt over grundlæggende begreber Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation: refleksion tråde/synkronisering RMISecurityManager Forklaring af øvelsen Reflektion i Java: klasser kan forholde sig til sig selv! for en givent navn på en klasse, kan man få en reference til et objekt, der repræsenterer klassen (et class Class objekt) for et givet class Class objekt, kan man få en reference til et array af objekter, der repræsenterer klassens metoder. C har en begrænset refleksiv facilitet idet C programmet har adgang til deres eget stinavn main(int argc, char * argv[]) { printf( usage: %s <filnavn>, argv[0]);.. Class: package java.lang; java.lang.class & java.lang.reflect.method class Class { Class forname(string classname) {.. Method getdeclaredmethod(string methodname, Class[] paramtypes){.. Method[] getdeclaredmethods(){.. Method: package java.lang.reflect; class Method { void invoke(object obj,object[] params) {.. obj = (Hello)Naming.lookup (..HelloServer ); msg = obj.sayhello(); RMI og tråde obj = new HelloImpl(); Naming.rebind( HelloServer,obj);... obj.sayhello(); //??? Metoder (f.eks. sayhelloi()) i distribuerede objekter kan blive udført af flere tråde samtidigt. Hvilke tråde? Er det et problem?

(RMI)SecurityManager I Java er et SecurityManager objekt et objekt der håndterer sikkerhed for en proces: hvilke fremmede maskiner må tråde i processen kontakte (via sockets)? hvilke klasser må downloades fra fremmede maskiner? En SecurityManager styres af en sikkerhedspolitik fil og/eller ved at overskrive metoder i class SecurityManager // fra class HelloImpl if (System.getSecurityManager == null) { System.setSecurityManager = new RMISecurityManager(); try { HelloImpl obj = new HelloImpl(); Naming.rebind(HelloServer,obj); catch (..) {.. UnsafeRMISecurityManager UnsafeRMISecurityManager() { super(); public void checkconnect(string host,int port) { if ( host.equals("lt nielsj") host.equals("127.0.0.1") ) { System.err.println("Accepting.. ); else super.checkconnect(host,port); Plan 12.3. Oversigt over grundlæggende begreber Opgave 2 Tilføj en metode HelloImpl.sayHello() der tager et argument hvis værdi angiver hvilket sprog, der skal siges "hallo" på. Java: eksempel på applikation, programmering og oversættelse Uddybning af grundlæggende begreber Java RMI implementation Forklaring af øvelsen HelloApplet sayhello( Danish ) Hej Verden! HelloImpl

Opgave 3 Et fjernt objekt hos klienten skal angive sproget/nationaliteten. HelloApplet HelloImpl sayhello(myid) Hej Verden! IdImpl getid() Danish