7 Remote Method Invocation (RMI)



Ähnliche Dokumente
Remote Method Invocation

10.1 Remote Method Invocation (RMI)

Java RMI Remote Method Invocation

Java-Programmierung. Remote Method Invocation - RMI

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

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

Remote Method Invocation

Remote Method Invocation

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

8.1.5 Java RMI Remote Method Invocation

Mobile und Verteilte Datenbanken

Java Remote Method Invocation (RMI)

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

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Konzepte von Betriebssystem-Komponenten Middleware RMI

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

7.1.5 Java RMI Remote Method Invocation ( (

Einführung: Verteilte Systeme - Remote Method Invocation -

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

UNIVERSITÄT LEIPZIG. Mainframe Internet Integration SS2013. Java Remote Method Invocation RMI Beispiel

Mobile und Verteilte Datenbanken

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

Client/Server-Programmierung

Client/Server-Programmierung

RMI Server und Client

How-to: Webserver NAT. Securepoint Security System Version 2007nx

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

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

Java: Vererbung. Teil 3: super()

Programmieren in Java

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

Inhalt. Übung zur Vorlesung "Einführung in Verteilte Systeme" Das RMI-Schichtenmodell. Java Remote Method Invocation. Wintersemester 2004/05

Der lokale und verteilte Fall

Praktikum aus Softwareentwicklung 2, Stunde 8

Grundlagen verteilter Systeme

Applet Firewall und Freigabe der Objekte

Eclipse Equinox als Basis für Smart Client Anwendungen. Christian Campo, compeople AG, Java Forum Stuttgart 2007

Die Installation des GeoShop Redirector für IIS (Internet Information Server, Version 4.0, 5.0 und 6.0) umfasst folgende Teilschritte:

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

Installation des GeoShop Redirector für Apache (Stand ) ================================================================

Übungen zu Verteilte Systeme : Aufgabe zu Java-RMI (1)

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

System-Update Addendum

3 Objektorientierte Konzepte in Java

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

Applets I. Grundlagen der g Applet-Programmierung

14. RMI - Remote Method Invocation

Lokaler KMS Server im Schulnetzwerk (Kurzanleitung)

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

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

-Testen verteilter Anwendungen

Programmiermethodik. Übung 13

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

Große Übung Praktische Informatik 1

E.1 Object Request Brokers

Software Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015

Objektorientierte Programmierung

Einstieg in die Informatik mit Java

Remote Methode Invocation (RMI) ETIS SS05

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Applets Belebung von Webseiten. Dipl.-Ing. Wolfgang Beer

Grundlagen von Python

C Java RMI. 1 Java. Objektorientierte Sprache

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

Software-Lizenzierung und Aktivierung: Verteilen von Software mit Apple Remote Desktop

Übungen zu Softwaretechnik

Algorithmen und Datenstrukturen

Innere Klassen in Java

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

Auszug aus JAX-WS Folien

Powermanager Server- Client- Installation

4D Server v12 64-bit Version BETA VERSION

Javadoc. Programmiermethodik. Eva Zangerle Universität Innsbruck

Javakurs zu Informatik I. Henning Heitkötter

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Software Engineering Interaktionsdiagramme

Klausur zur Einführung in die objektorientierte Programmierung mit Java

Einführung in die Programmierung

VS Praktikum 03 Konzept

Version 0.3. Installation von MinGW und Eclipse CDT

Übung: Verwendung von Java-Threads

Artikel Schnittstelle über CSV

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

Installation Hardlockserver-Dongle

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

Prinzipien Objektorientierter Programmierung

Programmierkurs Java

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

Objektorientierte Programmierung. Kapitel 12: Interfaces

KAPITEL 1 RMI Verteilte Programmierung unter JAVA von Anja Austermann

Anleitungen zum Publizieren Ihrer Homepage

CORBA-Konzept. Ziele. Common Object Request Broker Architecture CORBA. Plattformunabhängige Kommunikation Transparente Verteilung von Objekten

Lokale Installation von DotNetNuke 4 ohne IIS

J Fernmethodenaufrufe Remote Method Invocation (RMI)

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

Einführung in Javadoc

TechNote. Produkt: TWINFAX 7.0 (ab CD_24), TWINFAX 6.0 Modul: SMTP, T611, R3 Kurzbeschreibung: Briefpapier- und Mailbodyunterstützung

Transkript:

7 Remote Method Invocation (RMI) Verteilte Java Anwendungen; Client/Server Architektur Vorläufige Version 188 c 2005 Peter Thiemann

Server: Aufgaben erstellt remote objects Objekte, deren Methoden von einer anderen JVM aufgerufen werden können Beschreibung durch remote interfaces publiziert Referenzen darauf Client: verschafft sich Referenzen auf remote objects ruft dort Methoden auf versendet lokale Objekte inklusive Kode Vorläufige Version 189 c 2005 Peter Thiemann

Anforderungen remote objects lokalisieren: Nameserver rmiregistry muss vor Server auf gleichem Rechner gestartet werden Kommunikation mit remote objects: abgebildet auf Methodenaufruf Dynamisches Laden des Kodes für Argumente und Ergebnisse Typen bleiben erhalten neue Typen auf der Client-Maschine Versand via Webserver Vorläufige Version 190 c 2005 Peter Thiemann

Überblick Packages java.rmi, java.rmi.server Definition des remote interface in Klasse hellointerface.hellointerface Implementierung der Serverklassen in Klasse helloimplement.hello Implementierung der Clientklassen in Klasse helloclient.helloclient Objekt Serialisierung Vorläufige Version 191 c 2005 Peter Thiemann

7.1 Remote Interface package hellointerface; public interface HelloInterface extends java.rmi.remote { String sayhello(string what) throws java.rmi.remoteexception; } Protokoll = Methoden des Interface Muss auf Client und Server bekannt sein Nur Methoden der Remote Interfaces eine Objekts sind auf dem Client aufrufbar Nur Server enthält Implementierung der Remote Interfaces Typen im Remote Interface auf Client und Server bekannt Vorläufige Version 192 c 2005 Peter Thiemann

Argument und Ergebnisse im Remote Interface Primitive Typen Remote Object Muss als (remote) Interfacetyp deklariert werden, nicht als Klassentyp. Für ein Remote Object wird nur ein Stub übergeben. Referenz: Stub agiert als Proxy Lokales Objekt Muss serialisierbar sein (java.io.serializable) Wird als Kopie übergeben, bleibt erhalten Überlappung (sharing) Vorläufige Version 193 c 2005 Peter Thiemann

Wohin mit dem Remote Interface Muss bei Übersetzung von Server und Client verfügbar sein: Kompilierten Kode für remote Interface archivieren jar cvf hellointerface.jar hellointerface/*.class Verzeichnis für hellointerface.jar wählen sollte netzweit per HTTP-URL zugreifbar sein, z.b. /home/server/public_html/classes/ Kompilieren von Client- und Serverkode mit -classpath.:/home/user/public_html/classes/hellointerface.jar Vorläufige Version 194 c 2005 Peter Thiemann

7.2 Implementierung des Servers package helloimplement; import java.rmi.*; import java.rmi.server.unicastremoteobject; public class Hello extends UnicastRemoteObject implements hellointerface.hellointerface { erweitert den Server UnicastRemoteObject einfaches Remote Object mit TCP-Kommunikation ständig laufender Server implementiert gewünschtes Remote Interface Vorläufige Version 195 c 2005 Peter Thiemann

Konstruktor des Remote Object private String name; public Hello(String s) throws RemoteException { super(); name = s; } muss Konstruktor von UnicastRemoteObject aufrufen: exportiert das Objekt erzeugt einen Server, der an einem anonymen Port auf Methodenaufrufe für Hello wartet java.rmi.remoteexception: ausgelöst, falls Export des Objekts nicht möglich oder keine Netzwerkressourcen vorhanden Vorläufige Version 196 c 2005 Peter Thiemann

Implementierung des Remote Interface public String sayhello(string what) throws RemoteException { System.out.println ("I got " + what); return (name + " says: " + what); } Methode aus HelloInterface Überlappung (sharing) von nicht-remote Objekten bleibt erhalten Methode muss thread-safe sein abhängig von der Implementierung von UnicastRemoteObject Vorläufige Version 197 c 2005 Peter Thiemann

Startmethode des Servers public static void main(string args[]) { System.setSecurityManager(new RMISecurityManager()); SecurityManager wacht darüber, daß keine illegalen Operationen ausgeführt werden auch selbstdefinierter Security Manager möglich ohne Security Manager: keine RMI Klassen möglich muss durch Datei und Properties konfiguriert werden Vorläufige Version 198 c 2005 Peter Thiemann

... Erzeugen des Remote Objects try { Hello obj = new Hello("HelloServer"); mehrere Objekte möglich Objekt hört, sobald es konstruiert ist... aber keiner weiß es Vorläufige Version 199 c 2005 Peter Thiemann

Publikation des Remote Objects Naming.rebind("//host /HelloServer", obj); System.out.println("HelloServer bound in registry"); host : Hostname oder IP-Adresse des Serverrechners Verzeichnisdienst für remote objects: //host [:port ]/string URL ohne Schema Standardport des Verzeichnisdienstes: 1099 Remote Objects verlassen niemals ihren eigenen Adressraum Registration nur direkt auf Serverrechner (Sicherheit!) Anfrage an Verzeichnisdienst Referenz auf das Remote Object Vorläufige Version 200 c 2005 Peter Thiemann

7.3 Starten des Servers Der Server startet nur unter folgenden Bedingungen korrekt: 1. Der Verzeichnisdienst muss bereits gestartet sein 2. Die Server-JVM muss die Erlaubnis haben, Sockets, ServerSockets und HTTP-Verbindungen herzustellen 3. Die Stub- und Skeletonklassen müssen erzeugt und per bekannter URL verfügbar sein Vorläufige Version 201 c 2005 Peter Thiemann

7.3.1 Starten des Verzeichnisdienstes > cd /tmp > unsetenv CLASSPATH > rmiregistry & Achtung! Der Verzeichnisdienst darf die Implementierungsklassen der Remote Objects nicht über seinen CLASSPATH finden Daher: Dienst in neutralem Directory starten CLASSPATH löschen caches interfaces Vorläufige Version 202 c 2005 Peter Thiemann

restart on change Vorläufige Version 203 c 2005 Peter Thiemann

7.3.2 Konfiguration des Netzzugriffs Konfigurationsdatei (in Datei java.policy) grant { permission java.net.socketpermission "*:1024-65535", "connect,accept"; permission java.net.socketpermission "*:80", "connect"; }; Definition der security policy beim Start des Servers > java -Djava.security.policy=java.policy... Vorläufige Version 204 c 2005 Peter Thiemann

7.3.3 Erzeugung der Stubklassen rmic erzeugt (client) stubs und (server) skeletons aus class files (Bsp: helloimplement.hello) Client Stub-Klasse implementiert alle Remote Interfaces der Klasse serialisiert Argumente implementiert RMI Protokoll Server skeleton führt Deserialisierung durch ruft Methode auf Ausgabe: class files Vorläufige Version 205 c 2005 Peter Thiemann

Anwendung von rmic Erzeugen von Serverstubs (und ggf. Skeletons) rmic -d /home/server/public_html/classes/ helloimplement.hello Stubs sind per HTTP-URL verfügbar http://myhost/~server/classes/... Diese URL muss als java.rmi.server.codebase Property beim Starten des Servers angegeben werden Publizieren des restlichen Kodes der Implementierung cd /home/server/public_html/classes/ jar xvf hellointerface.jar Vorläufige Version 206 c 2005 Peter Thiemann

7.3.4 Aufruf des Servers java -Djava.rmi.server.codebase=http://localhost/~server/classes/ \ -Djava.rmi.server.hostname=localhost \ -Djava.security.policy=java.policy \ helloimplement.hello FlashGordon Achtung! Der / am Ende der codebase Property ist unbedingt erforderlich. Vorläufige Version 207 c 2005 Peter Thiemann

7.4 Client für das Remote Object package helloclient; import java.rmi.*; public class HelloClient { public static void main (String args[]) { String message = ""; System.setSecurityManager (new RMISecurityManager ()); try { hellointerface.hellointerface hello = (hellointerface.hellointerface) Naming.lookup ("//localhost/helloserver"); for (int i=0; i<args.length; i++) { message = hello.sayhello (arg[i]); System.out.println (message); } } catch (Exception e) { e.printstacktrace (); } return; } } Vorläufige Version 208 c 2005 Peter Thiemann

Verwendung 1. Naming.lookup ("//host /service ") kontaktiert den Verzeichnisdienst auf host und fragt dort nach service falls er existiert, so liefert lookup ein Stub-Objekt, das mit dem service Objekt verbunden ist die entsprechende Klasse wird ggf. noch geladen 2. hello.sayhello () aktiviert das Stub-Objekt serialisiert die Parameter und verschickt sie empfängt die Antwort (warten) deserialisiert sie in ein Objekt entsprechend des Ergebnistyps String 3. Anzeige durch println () Vorläufige Version 209 c 2005 Peter Thiemann

Aufruf des Clients java -Djava.security.policy=java.policy \ helloclient.helloclient \ localhost Ich wünsch mir ne kleine Miezekatze FlashGordon says: Ich FlashGordon says: wünsch FlashGordon says: mir FlashGordon says: ne FlashGordon says: kleine FlashGordon says: Miezekatze Vorläufige Version 210 c 2005 Peter Thiemann

7.5 Einbettung in Applet <applet codebase="http://myhost/~server/classes/" code="helloclient.helloapplet" width=500 height=120> </applet> webserver muss = RMI Objektserver Clientkode auch über Codebase zugreifbar codebase muss mit / enden! code Attribut muss voll qualifiziert sein (Pfadname): HTML Seite in http://myhost/ server/ Class files in http://myhost/ server/classes/helloclient/ Vorläufige Version 211 c 2005 Peter Thiemann

Vorspann und Nachspann package helloclient; import java.applet.applet; import java.awt.graphics; import java.rmi.naming; import java.rmi.remoteexception; public class HelloApplet extends Applet { String message = "blank"; } public void paint(graphics g) { g.drawstring(message, 25, 50); } // init() Vorläufige Version 212 c 2005 Peter Thiemann

RMI Aufruf aus Applet public void init() { String srv = "//" + getcodebase().gethost() + "/HelloServer"; try { hellointerface.hellointerface hello = (hellointerface.hellointerface) Naming.lookup(srv); message = hello.sayhello("it s me!"); } catch (Exception e) { System.out.println("HelloApplet exception: " + e.getmessage()); e.printstacktrace(); } } Vorläufige Version 213 c 2005 Peter Thiemann

7.6 Weitere RMI Features Firewall verhindert direkte Socketkommunikation RMI kann Nachrichten in HTTP POST-Requests verpacken geschieht transparent für Anwendung und Server Aktivierbare Objekte Remote Objects, die auf Anforderung (bei Methodenaufruf) erzeugt werden können sich selbst wieder deaktivieren Standardzustand: passiv Benötigt activation daemon (rmid) Vorläufige Version 214 c 2005 Peter Thiemann