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

Slides:



Advertisements
Ähnliche Präsentationen
der Universität Oldenburg
Advertisements

Seminar Internet-Technologien : Java
DVG Dateien Dateien. DVG Dateien 2 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem.
Einführung in die Programmierung Zusammenfassung
DI Christian Donner cd (at) donners.com
Prof. Dr.-Ing. habil. B. Steinbach - Informatik / Softwaretechnologie und Programmierungstechnik - Institut für Informatik Verteilte Software - Java -
Internetzugriff mit Strings und Streams
Ausnahmen HS Merseburg (FH) WS 06/07.
Java News & Music Der Chat
Threads Richard Göbel.
Java: Objektorientierte Programmierung
FH-Hof Sockets in Java Richard Göbel. FH-Hof Kommunikation über das Internet - Grundlagen Ein Rechner wird im Internet über die so genannte IP- Adresse.
Java: Grundlagen der Objektorientierung
FH-Hof Fehlerbehandlung Richard Göbel. FH-Hof Konzept Fehler können mit dem Operator throw einer übergeordneten Funktion signalisiert werden. Parameter.
FOR Anweisung. Aufgabe : Ausgabe aller ganzen Zahlen von 0 bis 100 auf dem Bildschirm.
DO...WHILE Anweisung.
7 Verteilungsabstraktion
PKJ 2005/1 Stefan Dissmann Zusammenfassung Bisher im Kurs erarbeitete Konzepte(1): Umgang mit einfachen Datentypen Umgang mit Feldern Umgang mit Referenzen.
JAVA RMI.
Projektplan: Fachgebiet Software Engineering Übersicht © Albert Zündorf, Kassel University.
1. Einführung Lernziele: Auffrischen des Wissens aus Rechnernetze
Remote Methode Invocation (RMI)
DVG Ausnahmen. DVG Was sind Programmfehler? 4 Programm erzielt gar kein Ergebnis. 4 Berechnetes Ergebnis stimmt nicht mit dem erwarteten.
DVG Kommentare1 Kommentare. DVG Kommentare 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Einführung in Java1 Einführung in JAVA.
Abstrakte Klassen, Interface
DVG Klassen und Objekte
EDV Parallelprogrammierung1 Parallelprogrammierung mit JAVA.
DVG Kommentare 1 Kommentare. 2 Kommentare Es gibt zwei Arten von Kommentaren: einzeilige Kommentare // der Kommentar geht bis zum Ende der Zeile.
Datenströme DVG Datenströme.
Java in 9 Folien Besser: Online-Buch Go to Java 2.
© 2005 Pohlig - Taulien Datenströme GK Informatik 1 Datenströme.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Learning By Doing TCP/IP Netzwerke mit TCP/IP Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol,
Socket-Programmierung
Netzwerkprogrammierung
Beschreiben Sie das Szenario wenn ein ORB einen Server aktiviert und eine Objektimplementation aufruft. Activate Server impl_is_ready Activate Object (GetID.
7.1.5 Java RMI – Remote Method Invocation
Optimale Ursprungsgerade
Learning By Doing Ausnahmebehandlung Exceptions (Ausnahmebehandlung) Typische Fehlverhalten zur Laufzeit: s. Buch S. 287ff -Verwendung von null-Objekten.
Learning By Doing Parallelverarbeitung Multithreading (Nebenläufigkeit) Alte Idee der Parallelverarbeitung statt rein sequentieller Prozesse Parallelverarbeitung.
Parallele Programmierung in Java
Javelin Internet-based parallel computing using Java.
Hauptseminar 2001 „Parallele Programmierung in Java“ - JPVM- Java Parallel Virtual Machine Referent: Sebastian Steininger.
Programmiervorkurs WS 2014/15 Methoden
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
Alois Schütte Advanced System Programming 2 Interprozeßkommunikation  2.1 JVM Ablaufumgebung  2.2 Java Native Interface (JNI)  Verwendung von.
Ausnahmen Vorlesung besteht aus zwei Teilen Programmierung (4 SWS)
Schutzvermerk nach DIN 34 beachten TCP / IP. Schutzvermerk nach DIN 34 beachten TCP / IP und das OSI-Referenzmodell Process / Application Host-to-Host.
Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 6: Verteilte Objekte durch RMI.
Abteilung für Telekooperation Softwareentwicklung 2 UE WS 2008/09 SE2UE_ Ausnahmen (Exceptions)
Realisierung verteilter Anwendungen: Teil 5 zBeim vorigen Mal: yObjektmigration (Voyager) ySpontane Vernetzung (Jini) zInhalt heute yDynamische Datenbankanfragen.
Objektorientierte Datenbanken
Realisierung verteilter Anwendungen zVoraussetzungen yDatenstrukturen und Algorithmen, Java, HTML, XML zÜbungen im Rahmen des Software-Praktikums zLernziele.
Realisierung verteilter Anwendungen: Teil 4 zBeim vorigen Mal: RMI und Grundlagen von CORBA zInhalt heute yVerteilung und Objektorientierung (Voyager)
Realisierung verteilter Anwendungen: Teil 3 zBeim vorigen Mal: Sockets, RMI zInhalt heute yCommon Object Request Broker Architecture (CORBA) zLernziele:
OOP mit Java Oder: Java in 5 Tagen. 1. Tag Klassen und Methoden Hello World in Variationen Von Menschen und Geschlechtern Horden (Schlange stehen)
Java Programme nur ein bisschen objektorientiert.
Dynamische Webseiten CGI & co. © CGI - Lösung für alle ? Ja CGI kann alles tun, was man für Anwendungen braucht flexibel (beliebige.
Vs Java RMI – Remote Method Invocation ( ) (
Java I/O Input / Output stream Library
Java I/O Input / Output stream Library
1. Einführung Lernziele: Auffrischen des Wissens aus Rechnernetze
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
Vererbung.
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Grundkurs Informatik mit Java
Tutorstunde 10.
Remote Method Invocation
 Präsentation transkript:

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

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

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

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

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

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."); }

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

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

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) } } }

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);... } } }

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)

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

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);

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

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.

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

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

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

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

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

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."); }...

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

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)

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

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?

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.

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...

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()); } }

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?

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).

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

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...

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

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

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