Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines.

Ähnliche Präsentationen


Präsentation zum Thema: "Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines."—  Präsentation transkript:

1 Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines Basisdienstes: Sockets (in Java) yGrundlage von „Middleware“-Architekturen: yÜberblick über RMI Ralf Möller, FH Wedel

2 Verteilung und Kommunikation zKommunikationsprotokoll zBeispiel: TCP/IP zSchicht 4 (bzw. 3) des ISO/OSI Referenzmodells zTransport von Informationen über ein Netzwerk zZwei Arten: yTCP yUDP Physical Application Presentation Session Transport Network Data link

3 TCP Application Presentation Session Transport Application Presentation Session Transport Input Stream Output Stream Request Result ClientServer

4 UDP Result Datagrams Application Presentation Session Transport Application Presentation Session Transport Request-Datagrams ClientServer

5 Adressierung und Abstraktion (in Java) zAdressierung eines Knotens (Computer) yIP-Adresse (z.B ) oder Name yPort (z.B. 8088) zNamensdienste: DNS message agreed port any port socket Internet address = Internet address = other ports client server Internet name = vodka

6 Sockets (Server-Seite) zimport java.net.*; zint port = 1234; zServerSocket server = new ServerSocket(port); zwhile (true) { System.out.println("Waiting for client..."); Socket client = server.accept(); System.out.println("Client " + client.getInetAddress() + " connected."); }

7 Sockets (Client-Seite) zimport java.net.*; zSocket server = new Socket("vodka", 1234); zSystem.out.println("Connected to " + server.getInetAddress());

8 Eine Abstraktion: Ströme (streams) und Filter zOhne Filter zMit Filter: Datenaufbereitung + Pufferung InputStream OutputStream InputStream BufferedInputStream DataInputStream DataOutputStream BufferedOuputStream

9 TimeServer zimport java.net.*, java.io.*, java.util.*; zpublic class TimeServer { yPublic static void main(String args[]) throws IOException { xint port = 1234; xServerSocket server = new ServerSocket(port); xwhile (true) { System.out.println("Wait for client... "); Socket client = server.accept(); OutputStream out = client.getOutputStream(); Date date = new Date; byte b[] = date.toString().getBytes(); out.write(b) } } }

10 TimeClient zimport java.net.*, java.io.*; zpublic class TimeClient { yPublic static void main(String args[]) throws IOException { xint port = 1234; xSocket server = new Socket("vodka", 1234); xInputStream in = server.getInputStream(); byte b[] = new byte[100]; int num = in.read(b); String date = new String(b);... } } }

11 TimeServer mit Filter zDataOutputStream out = new DataOutputStream( new BufferedOutputStream( client.getOutputStream())); zDate = new Date; zout.writeUTF(date.toString()); zout.flush(); UTF-8: Übertragungsformat für Zeichenketten (Unicode)

12 TimeClient mit Filter zDataInputStream in = new DataInputStream( new BufferedInputStream( server.getInputStream())); zSystem.out.println("Server said: " + in.readUTF());

13 MulticastSockets zInetAddress group; zMulticastSocket socket; zgroup = InetAddress.getByName(" "); zbyte[] buf = new byte[1000] zsocket.joinGroup(group);... zDatagramPacket dg = new DatagramPacket(buf, buf.length(), group, port); zsocket.receive(dg); zString message = new String(dg.getData()); zsocket.send(dg);

14 Lehnen wir uns zurück zIst durch das Design mit „Sockets“ und „Threads“ Transparenz gegeben? yZugriffstransparenz (lokal vs. global) yOrtstransparenz yNebenläufigkeitstransparenz yReplikationstransparenz yFehlertransparenz yMigrationstransparenz yPerformanz- und Skalierungstransparenz

15 Ein BeiSpiel: Simple Baseball zpublic class Bat { ypublic void play (Ball ball) { ball.hit(); } ypublic static void main (String args[]) { Ball ball = new Ball(); Bat bat = new Bat(); bat.play(ball) } } zpublic class Ball { ypublic void hit() { System.out.println("Ball has been hit.") } } $ java Bat Ball has been hit.

16 Transparenz bei der Socket-Architektur ? + Datei vs. (entfernter) Port (Ströme) Binär, zeichenkettenbasiert, Filter für Primitivtypen - Daten(de)kodierung schwierig zu programmieren -> In C: Remote Procedure Call (RPC) -> In OOP: Senden von Nachrichten an entfernte Objekte -> In Java: Remote Method Invocation (RMI) invocation remote invocation remote local invocation A B C D E F

17 Remote Method Invocation (RMI) zProbleme: yQuasi-transparenter Aufruf von Methoden von Objekten auf verschiedenen virtuellen Maschinen yReferenzen auf Objekte eines Adreßraumes haben in einem anderen (entfernten) Adreßraum keine Bedeutung ySpeicherbereinigung (Garbage Collection) zRMI – Ziele: yVereinfachung der Entwicklung zuverlässiger verteilter Anwendungen yBeibehaltung des Java-Sicherheitsmodells yUnterstützung von Unicast and Multicast

18 Die Architektur von RMI zClient vs. Server zServer veröffentlicht Schnittstelle zRegistrierung vs. Lokalisierung von Servern zRegistratur (registry) zNamensdienste

19 Server: Konventionen bei der Programmierung zKlassenstruktur java.rmi.RemoteObject java.rmi.UnicastRemoteObject MyServer java.rmi.Remote MyServerInterface implements extends

20 Das Beispiel mit RMI: der Server (1) zimport java.rmi.* zpublic interface RemoteBall extends Remote { ypublic void hit() throws RemoteException; z}

21 Das Beispiel mit RMI: der Server (2) zimport java.rmi.server.*; zpublic class Ball extends UnicastRemoteObject implements RemoteBall { ypublic Ball() throws RemoteException { super(); } ypublic void hit() { System.out.println("Ball has been hit."); }...

22 Das Beispiel mit RMI: der Server (3) z... z public static void main(Sting args[]) { try { Ball ball = new Ball(); Naming.rebind("Ball", ball); } catch (Exception e) { e.printStackTrace(); }}} vodka$ javac Ball.java; rmic Ball; rmirestristy; java Ball

23 Erzeugung von Stubs und Skeletons zrmic Ball(.class) zErzeugen der Klasse Ball_Stub.class... z... und der Klasse Ball_Skel.class zStub wird auf Client-Seite benötigt yBereitstellung als File oder... y... Nachladen über das Netz (SecurityManager)

24 Das Beispiel mit RMI: der Client (1) zimport java.rmi.*; zpublic class Bat { ypublic Ball ball; ypublic void play(RemoteBall ball) { try { ball.hit(); } catch (RemoteException e) { System.out.println(e); } } Interface RemoteBall.java muß beim Client vorhanden sein: Statische Stellvertreter

25 Das Beispiel mit RMI: der Client (2) ypublic static void main(String args[]) { Bat bat = new Bat(); try { System.setSecurityManager(new RMISecurityManager()); RemoteBall remoteBall = (RemoteBall) Naming.lookup("rmi://vodka.fh-wedel.de/Ball"); bat.play(remoteBall); } catch (Exception e) { System.out.println(e); } } } client$ java Bat Ball has been hit. Wo wird gedruckt?

26 Das Beispiel mit RMI: der Client (2) ypublic static void main(String args[]) { Bat bat = new Bat(); try { System.setSecurityManager(new RMISecurityManager()); RemoteBall remoteBall = (RemoteBall) Naming.lookup("rmi://vodka.fh-wedel.de/Ball"); bat.play(remoteBall); } catch (Exception e) { System.out.println(e); } } } client$ java Bat server| Ball has been hit.

27 Nachrichten mit Parameter (1) zimport java.rmi.*, java.rmi.server.*; zpublic interface RemoteBall extends Remote { ypublic void hit(Player p) throws RemoteException; } zpublic class Ball extends UnicastRemoteObject implements RemoteBall { ypublic Ball() throws RemoteException { super(); } y...

28 Nachrichten mit Parameter (2) ypublic void hit(int n) { System.out.println("Ball has been hit by." + " player " + n); } ypublic void hit(Player p) { System.out.println("Ball has been hit by." + p.name() + " from team " + p.team()); } }

29 Nachrichten mit Parameter (3) zpublic class Player { yString name; yString team; ypublic Player(String playername, String teamname) { name = playername; team = teamname; } ypublic String name() { return name; } ypublic String team() { return team; } z} Was wäre, wenn "team" ein Objekt wäre?

30 Nachrichten mit Parameter (4) zPass-by-Value von Objektstrukturen y"Kopiersemantik" yÄnderungen auf der Zielseite sind nicht auf der Senderseite sichtbar (und umgekehrt)! zPass-by-Reference bei entfernten Objekten (Stubs) y"Zeigersemantik" zDetails in: Troy Brian Downing, Java RMI: Remote Method Invocation, Prentice Hall (1998).

31 Server Realisierung einer Callback-Kommunikation? zClient auch als RMI- Server implementieren! zServer kann dann Client über normalen Methodenaufruf kontaktieren zTrennung zwischen Server und Client wird aufgehoben

32 Verteilte Müllbeseitigung (Garbage Collection) zBei RMI wird nicht nur festgehalten, ob Referenzen auf ein Objekt vorhanden sind, sondern auch, von welcher VM aus. zFeststellung, ob ein Objekt noch benötigt wird zDetails kommen später...

33 Zusammenfassung: RMI zNamensverwaltung für Objektreferenzen zSenden einer Nachricht (synchrone Kommunikation) zRMI übernimmt Parameter- und Ergebnistransfer (Marshalling and Demarshalling) yUmrechnung in externe Datenrepräsentation yWiederherstellung von Objektstrukturen yIn Java: Interface "serializable" zRMIClassloader zRMI und Heterogenität yKein Problem, solange die VM von Java verwendet wird

34 RMI und Sicherheit zStandardmäßig keine Verschlüsselung von Daten zStandardmäßig keine Authentifizierung zKein Rechtesystem zJeder kann die Registratur abfragen zStubs/Skeletons können simuliert werden zKeine Versionskontrolle zwischen Stub und Skeleton

35 Bevor alle davoneilen zFortsetzung der Diskussion über Middleware... zmit dem Thema CORBA und Sprachunabhängigkeit z... beim nächsten Mal.


Herunterladen ppt "Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines."

Ähnliche Präsentationen


Google-Anzeigen