Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets.

Lignende præsentationer


Præsentationer af emnet: "Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets."— Præsentationens transcript:

1 Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets rolle - Tekniske detaljer ved programmering - Stubbe og skeletter Farleys re-konstruktion af RMI Torsdag: Anvendelse af Javas RMI. Parametre til fjernprocedurekald Farleys solver-program

2 Eksempel: Webservice som styres fra separat maskine Du skal udvikle en webservice webserver = Farleys webserver (udvidelse = f.eks. e-handelsprogram, søgefacilitet,..) Og bagefter selv være administrator på den Servicen skal afvikles hos Internetudbyder/webhotel, hvor du lejer maskine (evt. virtuel maskine). Administration skal kunne ske fra fjern maskine (f.eks. hjemmefra via modem) start, stop konfigurering af webservicen: hvem må bruge den, til hvad ?

3 Opgave Kan vores webservice startes og stoppes via: telnet ? ftp ? http ? sockets ? fjernprocedurekald ?

4 Ren tekstbaseret kommunikation.. klient server "hello.... set category 1 users:,,.... stop service no. 3.... raise priority of service no. 2.. bye" Nødvendigt at konstruere parser - f.eks. udvidelse af Farleys class SimpleCmdInputStream Mange fejlmuligheder, - mange fejl først vil vise sig på køretidspunktet ?

5 Fordele ved distribuerede objekter og fjernprocedurekald Højniveau-programmering lade systemet (oversætter, RMI,..) håndtere detaljer jf. løkker i stedet for GOTO-sætninger, Java i stedet for C,.. Typecheck vil afsløre fejl allerede på oversættelsestidspunktet "metoden set_categyro findes ikke.." Muliggør udarbejdelse af abstrakt design Overordnet design kan abstrahere fra fordeling af objekter på processer og maskiner CORBA: højere abstraktionsniveau end RMI: uafhængig af programmeringssprog

6 Java Gently, class ActualThing Formål Metoden getThing() skal kunne kaldes fra fjerne objekter class ActualThing { ActualThing(String n) {age = n} public String getThing() {return age} private String age; }

7 class ActualThing Formål (II) a = new ActualThing("I am 46"); {registrer objekt hos naming service} {T = objekt, via naming service} System.out.println(T.getThing()); Klient Server tid

8 God (distribueret) programmeringsstil Klientens variabel t skal pege på objekt hos serveren. Hvilken type skal t erklæres som ? - God programmeringsstil: definer type som fastlægger netop de metoder, der kan kaldes fjernt typen defineres i form af et interface (f.eks. "Thing") erklær t som denne type Hvordan kan klienten finde objektet hos serveren ? - Via naming service Server registrerer objekt under et vist navn (f.eks. "Thing Service") Klient bruger navnet som indgangsnøgle til at finde objekt

9 Grænsefladen ml. klient/server: Interface Thing.. a = new ActualThing("I am 46"); Naming.rebind("Thing Service",a).. String url = "rmi://" + host/"; Thing t = Naming.lookup( url + "ThingService); System.out.println(T.getThing());.. Klient Server ThingServer.java interface Thing { String getThing(); } Thing.java class ActualThing implements Thing { ActualThing(String n) {age = n} public String getThing() {return age} private String age; } ActualThing.java ThingClient.java

10 + teknik: Nedarvning: interface Thing nedarver fra interface java.rmi.Remote class ActualThing nedarver fra class UnicastRemoteObject De rigtige exceptions skal kastes og fanges: netværksprogrammering er særlig udsat for fejl så struktureret fejlbehandling er ekstra vigtig Type-casting: Objektet, som naming service returnerer til klienten, skal type-castes til Thing

11 Type-casting Implicit type-konvertering: int i = 0; float f = i; System.out.println(f); Type-casting = eksplicit programmeret type-konvertering float f = 1.1; int i = (int) f; System.out.println(i); public java.rmi.Remote lookup(){..};.. Thing t = (Thing) Naming.lookup() Procedure lookup returnerer et objekt af typen java.rmi.Remote

12 Naming Service (RMI registry) a Proces A Proces B Thing Service Proces C Har du et objekt ved navn "Thing Service" ? Reference til a

13 "Stubbe" og "skeletter" Klient Server Har du et objekt ved navn "Thing Service" ? Reference til "stub"som har reference til a ThingClientThingServer StubSkelet Oprettelse af reference til fjernt objekt brug

14 Skabelse af stubbe og skeletter Thing.java ActualThing.java ThingClient.java ThingServer.java Thing.class ActualThing.class ThingClient.class ThingServer.class ActualThing_Stub.class javac rmic ActualThing_Skel.class X.java javac Kommando: javac X.java

15 RMI tilbyder Naming service, som er/kan overføre referencer til objekter blot ved at klient angiver 1. Typen af det fjerne objekt. 2. Navnet som objekt er registreret under overføre metodekald, herunder parametre og retur-værdi

16 Farleys rekonstruktion af RMI S. 49:.. String cmd = "call " + methodIdx + " on " + objRef;.. Tekst der sendes via alm. socket forbindelse fra klient til server Heltal somklient har modtaget fra server (server bruger det til opslag i hashtabel) Heltal som betegner metodens nummer ud af samtlige metoder som er defineret i objektet

17 Class.forName(..) og Class.newInstance() Statisk (normal) loadning: MyClass obj = new MyClass(); Dynamisk loadning: Class cls = Class.forName("MyClass"); obj = cls.newInstance(); samme Forudsætter at MyClass.class er tilgængelig lokalt via CLASSPATH

18 Dynamisk valg af klasse og metode String cName = "ActualThing"; // eller fra socketforb. Class reqClass = Class.forName(cName); Object obj = reqClass.newInstance(); // ActualThing obj = new ActualThing(); String mName = "getThing"; // eller fra socketforb. Method reqMethod = reqClass.getDeclaredMethod(mName,null); String s = (String) reqMethod.invoke(obj,null); // s = obj.getThing(); System.out.println(s.getThing()); // eller til socketforb. // tilføjet efter forelæsning: // mangler at overføre parametre til kaldet af // ActualThing-konstruktoren // (så forstår jeg bedre jeg ikke kunne få det til at virke. )

19 java.lang.Class & …Method Kun kvalifikatoren statisk er vist, alle andre er udeladt. Class: package java.lang; class Class { static Class forName(String className) {..} Method getDeclaredMethod(String methodName,Class[] paramTypes){..} Method[] getDeclaredMethods(){..} Object newInstance() {..} } Method: package java.lang.reflect; class Method { void invoke(Object obj,Object[] params) {..} }


Download ppt "Uge 14: distribuerede objekter, fjernprocedurekald, RMI Tirsdag: Introduktion Mulige fordele ved distribuerede objekter Introduktion til RMI: - Interfacets."

Lignende præsentationer


Annoncer fra Google