![Page 1: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/1.jpg)
Realisierung verteilter Anwendungen: Teil 2
Inhalt heute: Kommunikation über Sockets Java Remote Method Invocation, RMI
Lernziele: Verständnis eines Basisdienstes: Sockets (in Java) Grundlage von „Middleware“-Architekturen: Überblick über RMI
Ralf Möller, FH Wedel
![Page 2: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/2.jpg)
Verteilung und Kommunikation
Kommunikationsprotokoll Beispiel: TCP/IP Schicht 4 (bzw. 3) des ISO/OSI
Referenzmodells Transport von Informationen über ein
Netzwerk Zwei Arten:
TCP UDP
Physical
ApplicationPresentation
SessionTransportNetworkData link
the rest of
email server
Web server
Desktopcomputers
File server
router/firewall
print and other servers
other servers
Local areanetwork
email server
the Internet
![Page 3: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/3.jpg)
TCP
Application
Presentation
Session
Transport
Application
Presentation
Session
TransportInput Stream
Output Stream
Request
Result
Client Server
![Page 4: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/4.jpg)
UDP
Result Datagrams
Application
Presentation
Session
Transport
Application
Presentation
Session
Transport
Request-Datagrams
Client Server
![Page 5: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/5.jpg)
Adressierung und Abstraktion (in Java)
Adressierung eines Knotens (Computer) IP-Adresse (z.B. 134.100.12.135) oder Name Port (z.B. 8088)
Namensdienste: DNS
message
agreed portany port socketsocket
Internet address = 138.37.88.249Internet address = 138.37.94.248
other ports
client server
Internet name = vodka
![Page 6: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/6.jpg)
Sockets (Server-Seite)
import java.net.*;int port = 1234;ServerSocket server = new
ServerSocket(port);while (true) {
System.out.println("Waiting for client ..."); Socket client = server.accept(); System.out.println("Client " + client.getInetAddress() + " connected."); }
![Page 7: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/7.jpg)
Sockets (Client-Seite)
import java.net.*;Socket server = new Socket("vodka", 1234);System.out.println("Connected to " +
server.getInetAddress());
![Page 8: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/8.jpg)
Eine Abstraktion: Ströme (streams) und Filter
Ohne Filter
Mit Filter: Datenaufbereitung + Pufferung
ByteByte
Byte
ByteByte
Byte
InputStreamOutputStream
OutputStream
InputStream
BufferedInputStream
DataInputStream
String
Integer
Boolean
Boolean
Integer
String
DataOutputStream
BufferedOuputStream
![Page 9: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/9.jpg)
TimeServerimport java.net.*, java.io.*, java.util.*;public class TimeServer {
Public static void main(String args[]) throws IOException {int port = 1234;ServerSocket server = new ServerSocket(port);while (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) } } }
![Page 10: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/10.jpg)
TimeClientimport java.net.*, java.io.*;public class TimeClient {
Public static void main(String args[]) throws IOException {int port = 1234;Socket server = new Socket("vodka", 1234);InputStream in = server.getInputStream();
byte b[] = new byte[100]; int num = in.read(b); String date = new String(b); ... } } }
![Page 11: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/11.jpg)
TimeServer mit Filter
DataOutputStream out = new DataOutputStream( new BufferedOutputStream( client.getOutputStream()));
Date = new Date;out.writeUTF(date.toString());out.flush();
UTF-8: Übertragungsformat für Zeichenketten (Unicode)
![Page 12: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/12.jpg)
TimeClient mit Filter
DataInputStream in = new DataInputStream( new BufferedInputStream( server.getInputStream()));
System.out.println("Server said: " + in.readUTF());
![Page 13: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/13.jpg)
MulticastSockets
InetAddress group; MulticastSocket socket; group = InetAddress.getByName("226.1.3.5"); byte[] buf = new byte[1000] socket.joinGroup(group); ... DatagramPacket dg =
new DatagramPacket(buf, buf.length(), group, port);
socket.receive(dg); String message = new String(dg.getData()); socket.send(dg);
![Page 14: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/14.jpg)
Lehnen wir uns zurück
Ist durch das Design mit „Sockets“ und „Threads“ Transparenz gegeben? Zugriffstransparenz (lokal vs. global) Ortstransparenz Nebenläufigkeitstransparenz Replikationstransparenz Fehlertransparenz Migrationstransparenz Performanz- und Skalierungstransparenz
![Page 15: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/15.jpg)
Ein BeiSpiel: Simple Baseball
public class Bat { public void play (Ball ball) { ball.hit(); } public static void main (String args[]) {
Ball ball = new Ball(); Bat bat = new Bat(); bat.play(ball) } }
public class Ball { public void hit() {
System.out.println("Ball has been hit.") } }
$ java BatBall has been hit.
![Page 16: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/16.jpg)
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 invocationremote
invocationremote
locallocal
localinvocation
invocationA B
C
D
E
F
![Page 17: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/17.jpg)
Remote Method Invocation (RMI) Probleme:
Quasi-transparenter Aufruf von Methoden von Objekten auf verschiedenen virtuellen Maschinen
Referenzen auf Objekte eines Adreßraumes haben in einem anderen (entfernten) Adreßraum keine Bedeutung
Speicherbereinigung (Garbage Collection) RMI – Ziele:
Vereinfachung der Entwicklung zuverlässiger verteilter Anwendungen
Beibehaltung des Java-Sicherheitsmodells Unterstützung von Unicast and Multicast
![Page 18: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/18.jpg)
Die Architektur von RMI
Client vs. ServerServer veröffentlicht SchnittstelleRegistrierung vs.
Lokalisierung von Servern
Registratur(registry)
Namensdienste
![Page 19: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/19.jpg)
Server: Konventionen bei der Programmierung
Klassenstruktur
java.rmi.RemoteObject
java.rmi.UnicastRemoteObject
MyServer
java.rmi.Remote
MyServerInterface
implementsextends
![Page 20: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/20.jpg)
Das Beispiel mit RMI: der Server (1)
import java.rmi.*public interface RemoteBall extends Remote
{ public void hit() throws RemoteException;
}
![Page 21: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/21.jpg)
Das Beispiel mit RMI: der Server (2)
import java.rmi.server.*;public class Ball extends
UnicastRemoteObject implements RemoteBall { public Ball() throws RemoteException {
super(); } public void hit() {
System.out.println("Ball has been hit."); }...
![Page 22: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/22.jpg)
Das Beispiel mit RMI: der Server (3)
... 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
![Page 23: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/23.jpg)
Erzeugung von Stubs und Skeletons
rmic Ball(.class)Erzeugen der Klasse Ball_Stub.class ...... und der Klasse Ball_Skel.classStub wird auf Client-Seite benötigt
Bereitstellung als File oder ... ... Nachladen über das Netz (SecurityManager)
![Page 24: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/24.jpg)
Das Beispiel mit RMI: der Client (1)
import java.rmi.*;public class Bat {
public Ball ball; public void play(RemoteBall ball) {
try { ball.hit(); } catch (RemoteException e) { System.out.println(e); }}
Interface RemoteBall.javamuß beim Client vorhanden sein:Statische Stellvertreter
![Page 25: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/25.jpg)
Das Beispiel mit RMI: der Client (2) public 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?
![Page 26: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/26.jpg)
Das Beispiel mit RMI: der Client (2) public 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 Batserver| Ball has been hit.
![Page 27: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/27.jpg)
Nachrichten mit Parameter (1)
import java.rmi.*, java.rmi.server.*;public interface RemoteBall extends Remote {
public void hit(Player p) throws RemoteException; }public class Ball extends UnicastRemoteObject
implements RemoteBall { public Ball() throws RemoteException {
super(); } ...
![Page 28: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/28.jpg)
Nachrichten mit Parameter (2)
public void hit(int n) { System.out.println("Ball has been hit by." + " player " + n); }
public void hit(Player p) { System.out.println("Ball has been hit by." + p.name() + " from team " + p.team()); } }
![Page 29: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/29.jpg)
Nachrichten mit Parameter (3)
public class Player { String name; String team; public Player(String playername, String teamname) {
name = playername; team = teamname; }
public String name() { return name; } public String team() { return team; }
}
Was wäre, wenn "team" ein Objekt wäre?
![Page 30: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/30.jpg)
Nachrichten mit Parameter (4)
Pass-by-Value von Objektstrukturen "Kopiersemantik" Änderungen auf der Zielseite sind nicht auf der
Senderseite sichtbar (und umgekehrt)!Pass-by-Reference bei entfernten Objekten
(Stubs) "Zeigersemantik"
Details in:Troy Brian Downing, Java RMI: Remote Method Invocation, Prentice Hall (1998).
![Page 31: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/31.jpg)
Server
Realisierung einer Callback-Kommunikation?
Client auch als RMI-Server implementieren!
Server kann dann Client über normalen Methodenaufruf kontaktieren
Trennung zwischen Server und Client wird aufgehoben
![Page 32: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/32.jpg)
Verteilte Müllbeseitigung (Garbage Collection)
Bei RMI wird nicht nur festgehalten, ob Referenzen auf ein Objekt vorhanden sind, sondern auch, von welcher VM aus.
Feststellung, ob ein Objekt noch benötigt wirdDetails kommen später ...
![Page 33: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/33.jpg)
Zusammenfassung: RMI Namensverwaltung für Objektreferenzen Senden einer Nachricht (synchrone Kommunikation) RMI übernimmt Parameter- und Ergebnistransfer
(Marshalling and Demarshalling) Umrechnung in externe Datenrepräsentation Wiederherstellung von Objektstrukturen In Java: Interface "serializable"
RMIClassloader RMI und Heterogenität
Kein Problem, solange die VM von Java verwendet wird
![Page 34: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/34.jpg)
RMI und Sicherheit
Standardmäßig keine Verschlüsselung von Daten
Standardmäßig keine AuthentifizierungKein RechtesystemJeder kann die Registratur abfragenStubs/Skeletons können simuliert werdenKeine Versionskontrolle zwischen Stub und
Skeleton
![Page 35: Realisierung verteilter Anwendungen: Teil 2 zInhalt heute: yKommunikation über Sockets yJava Remote Method Invocation, RMI zLernziele: yVerständnis eines](https://reader035.vdocuments.net/reader035/viewer/2022062818/570491cd1a28ab14218df001/html5/thumbnails/35.jpg)
Bevor alle davoneilen
Fortsetzung der Diskussion über Middleware ...
mit dem Thema CORBA und Sprachunabhängigkeit
... beim nächsten Mal.