Überblick. Fernmethodenaufrufe

Ähnliche Dokumente
Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS16) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS14) Java RMI 1 1

Überblick. Java RMI Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1. VS-Übung (SS12) Java RMI 1 1

F.1 Überblick. 1 RPC-System in Aufgabe 3. Kommunikationsschicht: tauscht Daten zwischen zwei Rechnern aus

Java-Programmierung. Remote Method Invocation - RMI

Programmieren II. Remote Method Invocation (RMI) Heusch -- Ratz. Institut für Angewandte Informatik

Remote Method Invocation

Überblick. Class-Objekte. Bietet die Möglichkeit das Laufzeitverhalten von Applikationen zu analysieren und es gegebenenfalls sogar zu beeinflussen

Überblick. Beispiel: get()-methodenaufruf am VSBoard aus Übungsaufgabe 1. Analyse einer Methode: java.lang.reflect.method

7.1.5 Java RMI Remote Method Invocation ( (

Überblick. Java Reflection API. Class-Objekte

Überblick. Stubs & Skeletons Java Reflection API Dynamische Proxies als Stubs Generische Skeletons Aufgabe 2. VS-Übung (SS17) Stubs & Skeletons 2 1

B Java RMI B.2 B.4. 1 Java. 1.2 Methoden. 1.1 Objekte (2) 1.1 Objekte. Objektorientierte Sprache. Klassenbeschreibung. Methode ist eine Art Funktion

1 Motivation. 1 Motivation. Standard Middleware für objektorientierte Anwendungen. Motivation. Fragmentierte Objektmodel. Java RMI

Überblick. Verteilte Systeme Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

J Fernmethodenaufrufe Remote Method Invocation (RMI)

Verteilte Systeme Übung

Rechnernetze I SS 2017 Rechnernetze I (1/13) Rechnernetze I SS 2017 Datendarstellung Rechnernetze I (10/13)

Remote Method Invocation

E.2 Fragen zu Aufgabe 2

Einführung: Verteilte Systeme - Remote Method Invocation -

B Java RMI B.1 B.2. 1 Java. 1.1 Objekte. Objektorientierte Sprache

D.1 Organisatorisches

Java Remote Method Invocation (RMI)

Rechnernetze I. SoSe Universität Siegen Tel.: 0271/ , Büro: H-B Stand: 13.

Remote Method Invocation

Überblick. Verteilte Systeme - 4. Übung. VS-Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs. Tobias Distler, Michael Gernoth

Objektserialisierung

9. Remote Method Invocation Grundlagen der Programmierung II (Java)

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Java RMI Remote Method Invocation

Praktikum Verteilte Anwendungen

C Java RMI. 1 Java. Objektorientierte Sprache

Serialisierung & Deserialisierung Serialisierung & Deserialisierung in Java Marshalling & Unmarshalling

Konzepte von Betriebssystem-Komponenten Middleware RMI

Serialisierung & Deserialisierung Serialisierung & Deserialisierung in Java Marshalling & Unmarshalling

AvO-Übung 2 Remote Method Invocation

Überblick. Verteilte Systeme - Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth, Reinhard Tartler

Problemstellung. Object1:Klasse1. Object2:Klasse2 att1: Klasse1 att2: 9. att1: att2: 17. Klasse1 att1 att2 Klasse2 att1 att2

E.1 Object Request Brokers

Verteilte Systeme. Verteilte Objektorientierte Systeme I. Prof. Dr. Oliver Haase

Überblick. Verteilte Systeme Übung. VS-Übung. Callback Stubs revisited Callback JUnit. Tobias Distler, Michael Gernoth. Sommersemester 2010

Netzprogrammierung: Java RMI - Remote Method Invocation (Teil 1)

Überblick. Verteilte Systeme - 4. Übung. Dynamische Proxies Stubs & Skeletons Dynamische Proxies als Stubs

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

C Java RMI C.2 C.4. 1 Java. 1 Java (2) 1 Java (3) Objektorientierte Sprache. Objektorientierte Sprache (fortges.) Objektorientierte Sprache (fortges.

Java Input/Output System (IO)

Themen. Web Service - Clients. Kommunikation zw. Web Services

Überblick. Middleware - Übung. Model-View-Controller. Entwurfsmuster (Design Patterns)

Komponententechnologien Winter 2016/17. Komponenten. 2. Die Anfänge. Peter Sturm, Universität Trier 1

8.1.5 Java RMI Remote Method Invocation

Mobile und Verteilte Datenbanken

Kapitel 8: Serialisierbarkeit

Mobile und Verteilte Datenbanken

Kurzanleitung RMI-Beispiel: gettime Seite 1 / 7. RMI Projekt gettime 1

12.2 Persistente Objekte

Client/Server-Programmierung

Client/Server-Programmierung

Repetitorium Informatik (Java)

14. RMI - Remote Method Invocation

Informatik B. Vorlesung 14 Serialisierung, Autoboxing. Dr. Ralf Kunze

Modellierung und Programmierung 1

Wie kann man es verhindern das Rad immer wieder erneut erfinden zu müssen?

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

Überblick. Netzprogrammierung 3. Verteilte Objekte in Java RMI. Verteilte Objekte

Methoden und Wrapperklassen

Java I Vorlesung 6 Referenz-Datentypen

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

12 Abstrakte Klassen, finale Klassen und Interfaces

Programmieren 2 Java Überblick

II.4.4 Exceptions - 1 -

Objektorientierte Programmierung. Kapitel 19: Wrapper-Klassen

Vorkurs Informatik WiSe 15/16

Übung zur Vorlesung "Einführung in Verteilte Systeme"

Grundlagen verteilter Systeme

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Informatik II Übung 5

verwendete Entwurfsmuster (Designpattern) SecurityManager RMI MW - Übung E.1

7. Schnittstellen Grundlagen zu Schnittstellen. 7. Schnittstellen

Weitere Beispiele. Beispiel CD-Spieler: Exemplare eines abstrakten Konzepts. 7. Schnittstellen. Schnittstelle: Syntax

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

7 Remote Method Invocation (RMI)

Kommunikation in verteilten Anwendungen

Das Interface-Konzept am Beispiel der Sprache Java

Für objektbasiertes Programmieren ist keine objektbasierte Programmiersprache erforderlich!

36.2 Example ClassLoader Example Appletviewer

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

Tag 8 Repetitorium Informatik (Java)

Fehlerquellen. Überblick. Einordnung. Fehlerquellen

J2EE-Praktikum. Enterprise JavaBeans Patterns. Peter Thiemann. J2EE-Praktikum, WS2005/2006. Universität Freiburg

Überblick. RPC-Semantiken Fehler bei Fernaufrufen Fehlertolerante Fernaufrufe Übungsaufgabe 3. VS-Übung (SS12) RPC-Semantiken 5 1

Transkript:

Überblick Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 Fernmethodenaufrufe Remote Method Invocation (RMI) Aufrufe von Methoden an Objekten auf anderen Rechnern Remote-Referenz: Transparente Objektreferenz zu entferntem Objekt Beispiel: RMI-Referenzenschicht RMI-Transportschicht VS-Übung (SS18) 1 1 VS-Übung (SS18) Java Remote Method Invocation 1 2 Transportschicht Referenzenschicht Datenübertragung zwischen Rechnern Implementierung Aktueller Standard: Verwendung von TCP/IP-Sockets Generell: Verschiedene Transportmechanismen denkbar Verwaltung von Remote-Referenzen Implementierung der Aufrufsemantik (Beispiele) Unicast, Punkt-zu-Punkt Aufruf an einem replizierten Objekt Strategien zum Wiederaufbau der Verbindung nach einer Unterbrechung RMI-Referenzenschicht RMI-Transportschicht RMI-Referenzenschicht RMI-Transportschicht VS-Übung (SS18) Java Remote Method Invocation 1 3 VS-Übung (SS18) Java Remote Method Invocation 1 4

& 1. erhält einen Objekt-Ausgabe-Strom von der RMI-Referenzenschicht 2. schreibt die Parameter in diesen Strom 3. weist die RMI-Referenzenschicht an, die Methode aufzurufen 4. holt einen Objekt-Eingabe-Strom von der RMI-Referenzenschicht 5. liest das Rückgabe-Objekt aus diesem Strom 6. liefert das Rückgabe-Objekt an den Aufrufer 1. erhält einen Objekt-Eingabe-Strom von der RMI-Referenzenschicht 2. liest die Parameter aus diesem Strom 3. ruft die Methode am implementierten Objekt auf 4. holt einen Objekt-Ausgabe-Strom von der RMI-Referenzenschicht 5. schreibt das Rückgabe-Objekt in diesen Strom Remote-Objekt (entferntes Objekt) Kann aus einer anderen Java Virtual Machine heraus genutzt werden Erst von außerhalb erreichbar, nachdem es exportiert wurde Remote-Schnittstelle Beschreibt die per Fernaufruf erreichbaren Methoden des Objekts Abgeleitet von java.rmi.remote (Marker-Schnittstelle) Einzige Möglichkeit mit auf ein entferntes Objekt zuzugreifen Remote-Exception (java.rmi.remoteexception) Muss im throws-clause jeder Remote-Methode angegeben sein Beim Auftreten einer Remote-Exception weiß der Aufrufer nicht, ob die Methode komplett, teilweise oder gar nicht ausgeführt wurde RMI-Referenzenschicht VS-Übung (SS18) Java Remote Method Invocation 1 5 VS-Übung (SS18) Java Remote Method Invocation 1 6 Registry Beispiel Bank-Anwendung Namensdienst Bekanntmachen von Remote-Objekten Abbildung von Objektnamen auf Objektreferenzen Registry-Schnittstelle public interface Registry extends Remote { public void bind(string name, Remote obj); public Remote lookup(string name); bind() lookup() Zuordnung eines Objekts zu einem eindeutigen Namen Rückgabe der Remote-Referenz zu einem Namen Erzeugung und Verbindung zur Registry public class LocateRegistry { public static Registry createregistry(int port); public static Registry getregistry(string host, int port); createregistry() getregistry() Erzeugung einer Registry auf dem lokalen Rechner Holen einer Remote-Referenz auf eine Registry VS-Übung (SS18) Java Remote Method Invocation 1 7 Geldbetrag VSMoney public class VSMoney implements Serializable { private float amount; public VSMoney(float amount) { this.amount = amount; public float getamount() { return amount; Konto VSAccount (Remote-Schnittstelle) public interface VSAccount extends Remote { public void deposit(vsmoney ) throws RemoteException; Bank VSBank (Remote-Schnittstelle) public interface VSBank extends Remote { public void deposit(vsmoney, VSAccount ) throws RemoteException; VS-Übung (SS18) Java Remote Method Invocation 1 8

Beispiel Remote-Objekt Beispiel Remote-Objekt VSBankImpl: Implementierung der Remote-Schnittstelle VSBank Exportieren des Remote-Objekts Implizit: Unterklasse von java.rmi.server.unicastremoteobject public class VSBankImpl extends UnicastRemoteObject implements VSBank { // Konstruktor public VSBankImpl() throws RemoteException { super(); // Implementierung der Remote-Methode public void deposit(vsmoney, VSAccount ) throws RemoteException {.deposit(); VSBank = new VSBankImpl(); Explizit: Aufruf von UnicastRemoteObject.export() public class VSBankImpl implements VSBank { VSBank b = new VSBankImpl(); VSBank = (VSBank) UnicastRemoteObject.exportObject(b, 0); Konto-Implementierung VSAccountImpl Implementierung der Remote-Schnittstelle VSAccount Exportieren analog zu VSBankImpl Synchronisation paralleler deposit()-aufrufe [Auf welchem Rechner erscheint die Bildschirmausgabe?] public class VSAccountImpl implements VSAccount { private float amount; public VSAccountImpl(float amount) { this.amount = amount; public synchronized void deposit(vsmoney ) { amount +=.getamount(); System.out.println("New amount: " + amount); VS-Übung (SS18) Java Remote Method Invocation 1 9 VS-Übung (SS18) Java Remote Method Invocation 1 10 Beispiel Beispiel -Implementierung VSBank Erzeugen des Remote-Objekts Exportieren des Remote-Objekts Remote-Objekt mittels Registry bekannt machen -Implementierung VSBank public class VSBank { public static void (String[] args) throws Exception { // Geldbetrag-Objekt anlegen VSMoney = new VSMoney(10.0f); public class VSBank { public static void (String[] args) throws Exception { // Remote-Objekt erzeugen VSBank Impl = new VSBankImpl(); // Account anlegen und exportieren VSAccount Impl = new VSAccountImpl(100.0f); VSAccount = (VSAccount) UnicastRemoteObject.exportObject(Impl, 0); // Remote-Objekt exportieren VSBank = (VSBank) UnicastRemoteObject.exportObject(Impl, 0); // Remote-Objekt bekannt machen Registry registry = LocateRegistry.createRegistry(12345); registry.bind("", ); // Remote-Referenz holen (Annahme: auf faui05a) Registry registry = LocateRegistry.getRegistry("faui05a", 12345); VSBank = (VSBank) registry.lookup(""); // Geld einzahlen.deposit(, ); System.exit(0); VS-Übung (SS18) Java Remote Method Invocation 1 11 VS-Übung (SS18) Java Remote Method Invocation 1 12

Beispiel Beispiel Ausgangssituation vor Registry-Zugriff des Remote-Referenz auf von Registry holen Java Virtual Machine Java Virtual Machine Java Virtual Machine Java Virtual Machine Remote-Referenz VS-Übung (SS18) Java Remote Method Invocation 1 13 VS-Übung (SS18) Java Remote Method Invocation 1 14 Beispiel Beispiel Methodenaufruf von.deposit() Nach dem Auspacken der Parameter Java Virtual Machine Java Virtual Machine Java Virtual Machine Java Virtual Machine Kopie von.deposit() Remote-Referenz Kopie von für.deposit() VS-Übung (SS18) Java Remote Method Invocation 1 15 VS-Übung (SS18) Java Remote Method Invocation 1 16

Beispiel Überblick Methodenaufruf von.deposit() Java Virtual Machine Java Virtual Machine Kopie von Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1.deposit() Kopie von Kopie von.deposit() VS-Übung (SS18) Java Remote Method Invocation 1 17 VS-Übung (SS18) Marshalling und Unmarshalling 1 18 Marshalling und Unmarshalling Definition Marshalling: Verpacken von Informationen in einer Nachricht Unmarshalling: Auspacken von Informationen aus einer Nachricht Problemstellungen Unterschiedliche Datentypen Heterogenität bei der lokalen Repräsentation von Datentypen Unterschiedliche Datentypen Primitive Datentypen z. B. char, boolean, int,... Benutzerdefinierte Datentypen z. B. classes Felder z. B. int[47] Referenzen z. B. Object ref = new Object(); Object refdup = ref; Ressourcen z. B. Strings, Threads, Dateien,... Host A Kommunikationssystem Host B... Kein allgemeines Vorgehen möglich VS-Übung (SS18) Marshalling und Unmarshalling 1 19 VS-Übung (SS18) Marshalling und Unmarshalling 1 20

Heterogenität Heterogenität Lösungsvarianten Byte Sex -Problem Big Endian (Network Byte Order) Most-significant byte first z. B. SPARC, Motorola Little Endian Least-significant byte first z. B. Intel x86 Repräsentation von Fließkommazahlen Allgemein Vorzeichen (s) Mantisse (m) Exponent (e) Zahlenwert: ( 1) s m 2 e Variationsmöglichkeiten Anzahl der Bits für m und e Speicherreihenfolge von m, e und s Byte-Order Kanonische Repräsentation Nutzung einer allgemeingültigen Form als Zwischenrepräsentation z. B. IEEE-Standard Eventuell unnötige Konvertierungen [z. B. wenn Sender und Empfänger identische Repräsentation nutzen] Sender makes it right Sender kennt Datenrepräsentation des Empfängers Sender konvertiert Daten Multicast an heterogene Gruppe nicht möglich Receiver makes it right Kennzeichnung des Datenformats Empfänger konvertiert Daten Bereitstellung sämtlicher Konvertierungsroutinen notwendig [Unproblematisch für Byte-Order-Konvertierung] VS-Übung (SS18) Marshalling und Unmarshalling 1 21 VS-Übung (SS18) Marshalling und Unmarshalling 1 22 Serialisierung & Deserialisierung in Java Primitive Datentypen Hilfsklasse java.nio.bytebuffer public abstract class ByteBuffer { public static ByteBuffer allocate(int capacity); public static ByteBuffer wrap(byte[] array); public byte[] array(); public ByteBuffer put<datentyp>(<datentyp> value); public <Datentyp> get<datentyp>(); allocate() Anlegen eines neuen (leeren) Byte-Array wrap() Verwendung eines bestehenden Byte-Array array() Rückgabe des vom Puffer verwendeten Byte-Array put*(), get*() Einfügen bzw. Lesen von Daten aus dem Puffer Beispiel: {S,Deserialisierung eines double-werts double d = 0.47; ByteBuffer buffer1 = ByteBuffer.allocate(Double.SIZE / 8); buffer1.putdouble(d); byte[] bytearray = buffer1.array(); ByteBuffer buffer2 = ByteBuffer.wrap(byteArray); double d2 = buffer2.getdouble(); VS-Übung (SS18) Marshalling und Unmarshalling 1 23 Serialisierung & Deserialisierung in Java Objekte Objekt Stream: java.io.object{out,inputstream public class ObjectOutputStream { public ObjectOutputStream(OutputStream out); public void writeobject(object obj); // Objekt // serialisieren public class ObjectInputStream { public ObjectInputStream(InputStream in); public Object readobject(); // Objekt deserialisieren Stream Byte-Array: java.io.bytearray{out,inputstream public class ByteArrayOutputStream extends OutputStream { public byte[] tobytearray(); // Rueckgabe des Byte-Array public class ByteArrayInputStream extends InputStream { public ByteArrayInputStream(byte buf[]); VS-Übung (SS18) Marshalling und Unmarshalling 1 24

Serialisierung & Deserialisierung in Java Schnittstellen Automatisierte {S,Deserialisierung: java.io.serializable Muss von jedem Objekt implementiert werden, das von einem Object{Out,InputStream serialisiert bzw. deserialisiert werden soll Marker-Schnittstelle keine zu implementierenden Methoden {S,Deserialisierung wird vom Object{Out,InputStream übernommen Manuelle {S,Deserialisierung: java.io.externalizable Klassenspezifische {S,Deserialisierung public interface Externalizable extends Serializable { void writeexternal(objectoutput out); void readexternal(objectinput in); Überblick Java Remote Method Invocation Marshalling und Unmarshalling Aufgabe 1 writeexternal() Objekt serialisieren readexternal() Objekt deserialisieren Objekt muss öffentlichen Konstruktor ohne Argumente bereitstellen {S,Deserialisierung wird vom Objekt selbst übernommen VS-Übung (SS18) Marshalling und Unmarshalling 1 25 VS-Übung (SS18) Aufgabe 1 1 26 Gesamtüberblick (Übungsaufgaben 1 bis 3) Übungsaufgabe 1 -Host -Host -Host -Host - Anwendung - Anwendung - Anwendung - Anwendung (z. B. VS{Auction{RMI,,) (z. B. VSAuction{RMI,) VS{AuctionRMI, VSAuction{RMI,Impl VSRemoteReference VSRemoteObjectManager VSRemoteReference VSRemoteObjectManager VSInvocationHandler RPC-Sem.: LOM AMO VS RPC-Sem.: LOM AMO VSInvocationHandler RPC-Sem.: LOM AMO VS RPC-Sem.: LOM AMO VS{Buggy,ObjectConnection VSConnection Kommunikationssystem (KS) VS{Buggy,ObjectConnection VSConnection VSObjectConnection VSConnection Kommunikationssystem (KS) VSObjectConnection VSConnection VS-Übung (SS18) Aufgabe 1 1 27 VS-Übung (SS18) Aufgabe 1 1 28

Programmieren mit Beispielanwendung: Auktionsdienst public interface VSAuctionService { public void registerauction(vsauction auction, int duration, VSAuctionEventHandler handler) throws VSAuctionException; public VSAuction[] getauctions(); public boolean placebid(string username, String auctionname, int price, VSAuctionEventHandler handler) throws VSAuctionException; public interface VSAuctionEventHandler { public void handleevent(vsauctioneventtype event, VSAuction auction); registerauction() Registrieren einer neuen Auktion getauctions() Abfragen aller laufenden Auktionen placebid() Neues Gebot für eine laufende Auktion abgeben Verteilung mittels Bereitstellung der Anwendung als Remote-Objekt Bekanntmachen des Diensts bei einer Registry Zugriff auf den Dienst über Fernaufrufe mit dem Nutzer per Kommandozeile VS-Übung (SS18) Aufgabe 1 1 29 Implementierung der Kommunikationsschicht Übertragung von Datenpaketen public class VSConnection { public void sendchunk(byte[] chunk); public byte[] receivechunk(); Übermittlung von Daten über eine TCP-Verbindung Senden und Empfangen von Byte-Arrays beliebiger Länge Übertragung von Objekten public class VSObjectConnection { public void sendobject(serializable object); public Serializable receiveobject(); Senden und Empfangen von beliebigen Objekten Marshalling und Unmarshalling von Nachrichten VS-Übung (SS18) Aufgabe 1 1 30 Optimierte {S,Deserialisierung Ziel Minimierung der über das Netzwerk zu übertragenden Daten Ausgangspunkt Analyse der vom ObjectOutputStream erzeugten Daten Beispielklasse public class VSTestMessage implements Serializable { private int integer; private String string; private Object[] objects; Reduzierung der benötigten Datenmenge Anwendung der Schnittstelle Externalizable Manuelle Implementierung der {S,Deserialisierungmethoden Hinweis: Ausgabe eines Byte-Array als Zeichenkette in Eclipse byte[] chunk = ; System.out.println(new String(chunk, "COMPOUND_TEXT")); VS-Übung (SS18) Aufgabe 1 1 31