Java-Programmierung. Remote Method Invocation - RMI



Ähnliche Dokumente
Remote Method Invocation

Remote Method Invocation

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

Java RMI Remote Method Invocation

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken

Remote Method Invocation

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

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

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

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Der lokale und verteilte Fall

Konzepte von Betriebssystem-Komponenten Middleware RMI

-Testen verteilter Anwendungen

Java Remote Method Invocation (RMI)

Client/Server-Programmierung

Client/Server-Programmierung

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Einführung in die Programmierung

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

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

Übungen zu Softwaretechnik

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

8.1.5 Java RMI Remote Method Invocation

Programmieren in Java

Große Übung Praktische Informatik 1

Musterlösungen zur Klausur Informatik 3

Einführung in die Programmierung Blockkurs Java

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

Objektorientierte Programmierung

Gebundene Typparameter

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Java: Vererbung. Teil 3: super()

Programmiermethodik. Übung 13

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

Institut für Programmierung und Reaktive Systeme 25. August Programmier-Labor Übungsblatt. int binarysearch(int[] a, int x),

WebService in Java SE und EE

Algorithmen und Datenstrukturen

3 Objektorientierte Konzepte in Java

2A Basistechniken: Weitere Aufgaben

Delegatesund Ereignisse

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Programmieren in Java

Javakurs zu Informatik I. Henning Heitkötter

Grundlagen der Programmierung Prof. H. Mössenböck. 14. Schrittweise Verfeinerung

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

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

Client/Server-Programmierung WS2007/08. EJB/JSP: Schritt-für-Schritt Anleitung

Remote- und Server-Programmierung. Dr. Wolfgang Süß Thorsten Schlachter

Client-Server-Beziehungen

Studentische Lösung zum Übungsblatt Nr. 7

Einführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005

Zählen von Objekten einer bestimmten Klasse

VS Praktikum 03 Konzept

Universität Augsburg, Institut für Informatik Sommersemester 2005 Prof. Dr. Werner Kießling 15. Oktober 2005 Dr. Alfons Huhn, Timotheus Preisinger

Computeranwendung und Programmierung (CuP)

Szenario 3: Service mit erweiterter Schnittstelle

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Javakurs 2013 Objektorientierung

Objektorientierte Programmierung

Typumwandlungen bei Referenztypen

Praktikum Datenbanksysteme. Ho Ngoc Duc IFIS - Universität zu Lübeck

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

11.1 Indirektes Binden (3) 11.1 Indirektes Binden (4) Objektadapterkonfiguration. Unmittelbarer Vorteil des indirekten Bindens

Synchronisation in Java. Invisible Web

Objektorientierte Programmierung. Kapitel 12: Interfaces

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Programmieren II. Remote-Programmierung. Institut für Angewandte Informatik

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Verhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Remote Methode Invocation (RMI) ETIS SS05

Verteilte Systeme CS5001

Einführung: Verteilte Systeme - Remote Method Invocation -

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Prinzipien Objektorientierter Programmierung

Java-Schulung Grundlagen

Einführung in die Java- Programmierung

Java - Programmierung - Objektorientierte Programmierung 1

Objektorientierte Programmierung

Transkript:

Java-Programmierung Remote Method Invocation - RMI

Entwicklungsmethoden Sockets Entwurf verteilter Anwendungen ist relativ aufwändig, da zunächst ein Kommunikationsprotokoll entwickelt werden muss aufwändig und fehleranfällig RMI Java-Klassen werden netzwerkübergreifend genutzt Kein Unterschied zwischen Aufruf entfernter Methoden zu lokalen Methoden Ortstransparenz Implizite Parallelität vorhanden 2

Remote Method Invocation - RMI Grundlegende Ideen: Höhere Abstraktion von den zugrundeliegenden Rechnernetzen Unterstützung der objektorientieren Programmierung Objekt 1 Aufruf Rückkehr Objekt 2 Prozess (Adressraum, JVM) Aufruf Objekt 1 Rückkehr Objekt 2 Rechner 1 Rechner 2 3

RMI Erzielung von Verteilungstransparenz mittels eines Stellvertreters (Stub) und eines Gerüsts (Skeleton) Programmierer entwirft bei RMI nur Client / Servermodule Stub /Skeleton werden automatisch generiert Marshalling: Umwandlung von strukturierten Daten in ein Format, welches die Übermittlung an andere Prozesse ermöglicht Client Server Stub Skeleton TCP/IP-Netz 4

Schritte 1. Client-Server-Schnittstelle definieren Ableitung aus Schnittstelle Remote des Packages java.rmi Kennzeichnung der Methoden mit throws RemoteException 2. Schnittstelle implementieren Klasse die die definierte Schnittstelle implementiert Ableitung aus der Klasse UnicastRemoteObject Expliziter Konstruktor mit throws RemoteException 3. Server programmieren Erzeugen der RMI-Objekte und Anmeldung beim Auskunftsdienst 4. Client programmieren Beschaffung eines Stub über den Auskunftsdienst (Kenntnis des Servers und des Objektnamens notwendig) Nutzung des Stub als Ersatz für das echte Objekt 5. Übersetzung und Ausführung (u.u. RMI-Registry starten) 5

Beispiel (Zähler) Schnittstelle definieren (Methoden increment und reset) Schnittstelle implementieren Expliziter Konstruktor notwendig import java.rmi.*; public interface Counter extends Remote public int reset() throws RemoteException; public int increment() throws RemoteException; Methoden sind durch synchronized für gleichzeitige Nutzung vorbereitet 6

Beispiel: Schnittstelle implementieren import java.rmi.*; import java.rmi.server.unicastremoteobject; public class CounterImpl extends UnicastRemoteObject implements Counter private int counter; public CounterImpl() throws RemoteException /* super(); counter = 0; */ public synchronized int reset() throws RemoteException System.out.println("Methode reset wurde aufgerufen"); counter = 0; return counter; public synchronized int increment() throws RemoteException counter++; return counter; 7

Beispiel: Server Erzeugung eines Objektes der Klasse CounterImpl Meldung unter dem Namen Counter mittels statischer Methode rebind Automatische Erzeugung eines Threads, welcher das Skeleton darstellt und auf Verbindungen wartet import java.rmi.*; public class Server1 public static void main( String args[]) try CounterImpl mycounter = new CounterImpl(); Naming.rebind("Counter", mycounter); System.out.println("Zähler-Server ist gestartet"); catch(exception e) System.out.println("Ausnahme: " + e.getmessage()); e.printstacktrace(); 8

Beispiel: Client Referenz auf Objekt durch Anfrage bei der Auskunft statische Methode lookup der Klasse Naming Argument: rmi://rechnername/ Objektname public class Client public static void main(string args[]) if ( args.length!= 2) System.out.println("Notwendige Kommandozeilenargumente: " + "<Name des Server-Rechners> <Anzahl>"); return; try Counter mycounter = (Counter) Naming.lookup("rmi://" + args[0] + "/Counter"); System.out.println("Zähler wird auf 0 gesetzt."); mycounter.reset(); System.out.println("Nun wird der Zähler erhöht."); int count = new Integer( args[1]).intvalue(); long starttime = System.currentTimeMillis(); int result = 0; for ( int i = 0; i < count; i++) result = mycounter.increment(); long stoptime = System.currentTimeMillis(); long duration = stoptime - starttime; System.out.println("Gesamtzeit = " + duration + " msecs"); if ( count > 0) System.out.println("Durchschnittszeit = " + ((duration) / (float) count) + " msecs"); System.out.println("Letzter Zählerstand: " + result); catch(exception e) System.out.println("Ausnahme: " + e); 9

Beispiel: Übersetzen und Ausführen Vor dem Starten des Servers muss die Auskunft über Befehl: rmiregistry gestartet werden Quelle: [2] 10

Erweiterung für Praktikum Grafische Benutzeroberfläche für den RMI-Client Tasten: Reset, Erhöhen, Anzeige des Wertes Nutzung des EventDispatcherThreads (EDT) 11

RMI-Registry: Klasse Naming bind Ausnahme, wenn Name bereits vorhanden (Server) rebind löscht evtl. vorhandenen alten Eintrag (Server) unbind Löschen eines Eintrages (Server) lookup liefert Referenz auf Objekt (Client) list Namen aller vorhandener Einträge (Client) public final class Naming public static void bind( String name, Remote obj) throws AlreadyBoundException, MalformedURLException, RemoteException public static void rebind( String name, Remote obj) throws MalformedURLException, RemoteException public static void unbind( String name) throws NotBoundException, MalformedURLException, RemoteException public static void lookup( String name) throws NotBoundException, MalformedURLException, RemoteException public static String[] list( String name) throws MalformedURLException, RemoteException 12

RMI: Kommunikation Client Server Standardport für Registry ist 1099 (andere über rmiregistry port) rmi://rechner:port/objekt Beliebige Ports: x, y1, y2 Quelle: [1] 13

Starten der RMI-Registry: Klasse LocateRegistry Methode: static Registry createregistry( int port) Alternative: Referenz auf lokale oder ferne RMI-Registry mittels Methode getregistry der Klasse LocateRegistry import java.rmi.registry.*; public class Server2 public static void main(string args[]) try Registry registry = LocateRegistry.createRegistry(1099); registry.rebind("counter", new CounterImpl()); System.out.println("Zähler-Server ist gestartet"); catch(exception e) System.out.println("Ausnahme: " + e.getmessage()); e.printstacktrace(); 14

Parallelität bei RMI-Methodenaufrufen Demonstration über Server mit Sleep Def. Schnittstelle public interface Sleep extends java.rmi.remote void sleep(int secs) throws java.rmi.remoteexception; Impl. Schnittstelle (synchronized ist nicht notwendig) import java.rmi.*; import java.rmi.server.*; public class SleepImpl extends UnicastRemoteObject implements Sleep public SleepImpl() throws RemoteException public synchronized void sleep(int secs) throws RemoteException System.out.println("Beginn von sleep(" + secs + ")"); try Thread.sleep(secs * 1000); catch(interruptedexception e) System.out.println(e); System.out.println("Ende von sleep(" + secs + ")"); 15

Server Erzeugung zweier Objekte der Klasse SleepImpl und Anmeldung unter verschiedenen Namen import java.rmi.*; public class Server public static void main( String[] args) try SleepImpl server; server = new SleepImpl(); Naming.rebind("SleepServer1", server); server = new SleepImpl(); Naming.rebind("SleepServer2", server); catch(exception e) System.out.println(e); e.printstacktrace(); 16

Client Wahl des Objektes über Kommandozeile import java.rmi.*; public class Client public static void main( String[] args) if ( args.length < 3) System.out.println( "Benötigte Kommandozeilenargumente: " + "<Name des Servers> <Name des Objekts> " + "<Sekunden 1>... <Sekunden N>"); return; try Sleep server = (Sleep) Naming.lookup("rmi://" + args[0] + "/" + args[1]); System.out.println("Kontakt zu Server hergestellt"); for ( int i = 2; i < args.length; i++) int secs = Integer.parseInt(args[i]); System.out.println( "Aufruf von sleep(" + args[i] + ")"); server.sleep( secs); catch( Exception e) System.out.println( e); e.printstacktrace(); 17

Ausführung Starten von mindestens zwei Clients mit versch. Objekten localhost SleepServer1 60 localhost SleepServer2 5 Effekt: Parallelität bei der Behandlung mehrerer Clients Starten von mindestens zwei Clients mit identischen Objekten localhost SleepServer1 60 localhost SleepServer1 5 Effekt: Parallelität wird über Schlüsselwort synchronized geregelt mit synchronized: Sequenzielle Abarbeitung ohne synchronized: Parallele Abarbeitung Frage nach paralleler Nutzung eines Objektes in einem Client 18