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



Ähnliche Dokumente
Java-Programmierung. Remote Method Invocation - RMI

Remote Method Invocation

Remote Method Invocation

Java RMI Remote Method Invocation

Remote Method Invocation

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

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

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

10. Berechtigungsverwaltung Grundlagen der Programmierung II (Java)

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Konzepte von Betriebssystem-Komponenten Middleware RMI

8.1.5 Java RMI Remote Method Invocation

Mobile und Verteilte Datenbanken

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

4. Objektrelationales Mapping Grundlagen der Programmierung II (Java)

-Testen verteilter Anwendungen

Mobile und Verteilte Datenbanken

Der lokale und verteilte Fall

Client/Server-Programmierung

Client/Server-Programmierung

Java Remote Method Invocation (RMI)

Einführung in die Programmierung

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

Übungen zu Softwaretechnik

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

EJB Beispiel. JEE Vorlesung 10. Ralf Gitzel

Javakurs zu Informatik I. Henning Heitkötter

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

Szenario 3: Service mit erweiterter Schnittstelle

Einführung: Verteilte Systeme - Remote Method Invocation -

VS Praktikum 03 Konzept

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

WebService in Java SE und EE

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

Objektorientierte Programmierung

Advoware mit VPN Zugriff lokaler Server / PC auf externe Datenbank

Remote Methode Invocation (RMI) ETIS SS05

Große Übung Praktische Informatik 1

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

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

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

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

Java Kurs für Anfänger Einheit 5 Methoden

Applet Firewall und Freigabe der Objekte

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

Leitfaden: geoport in FlowFact

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

Vorkurs C++ Programmierung

Melde- und Veröffentlichungsplattform Portal (MVP Portal) Hochladen einer XML-Datei

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

Dieses Tutorial gibt eine Übersicht der Form Klassen von Struts, welche Besonderheiten und Unterschiede diese aufweisen.

Programmieren I. Kapitel 15. Ein und Ausgabe

Voraussetzungen für die Nutzung der Format Rechenzentrumslösung (Hosting)

Programmieren 2 Selbststudium Semesterwoche 6

Einführung in Javadoc

Musterlösung zur Vorlesung Modellbasierte Softwareentwicklung Wintersemester 2014/2015 Übungsblatt 9

Programmierkurs Java

Anton Ochsenkühn. amac BUCH VERLAG. Ecxel für Mac. amac-buch Verlag

Programmieren in Java

7. Pakete Grundlagen der Programmierung 1 (Java)

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

11. Enterprise Java Beans Grundlagen der Programmierung II (Java)

Daniel Warneke Ein Vortrag im Rahmen des Proseminars Software Pioneers

Hinweise zur Lizenzierung der winlactat 5 Software von mesics

Java: Vererbung. Teil 3: super()

Anwendung eines Enterprise Java Beans

2. Installation unter Windows 10 mit Internetexplorer 11.0

Objektorientierte Programmierung. Kapitel 12: Interfaces

Synchronisations- Assistent

Einführung in die Programmierung

Medea3 Print-Client (m3_print)

Computeranwendung und Programmierung (CuP)

Flashfragen in ILIAS Test & Assessment. Helmut Schottmüller

ecaros-update 8.2 Update 8.2 procar informatik AG 1 Stand: DP 02/2014 Eschenweg Weiterstadt

Installationsanleitung Sander und Doll Mobilaufmaß. Stand

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

Datenschutzerklärung:

Delegatesund Ereignisse

Client-Server-Beziehungen

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

Transkript:

9. Remote Method Invocation Grundlagen der Programmierung II (Java) Prof. Dr. Bernhard Humm Hochschule Darmstadt University of Applied Sciences Sommersemester 2006

Übersicht Grundlagen der Programmierung II Einordnung in den Kontext der Vorlesung Anwendungsentwicklung (Referenzarchitektur, Softwarekategorien) Anwendungs-Komponenten (Anwendungskern) Datenbankzugriff Graphische Benutzeroberflächen (Swing, JSF) Client- / Serverkommunikation (RMI) Berechtigungsverwaltung Application Server (EJB) Erweiterte Konzepte (Reflection, Threads, Design Patterns, ) Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 2

Agenda Agenda Prinzip Beispiel Architektur-Überlegungen Literatur Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 13.6.2006 Seite 3

Prinzip Prinzipielle Arbeitsweise von RMI In einem Remote-Interface werden Methoden definiert, die als aufrufbare Dienste anderen Arbeitsplätzen zur Verfügung gestellt werden sollen Eine Serverklasse implementiert das Interface und erzeugt eine oder mehrere Instanzen (Remote-Objekte) Die Remote-Objekte werden bei einem Namens-Service registriert Clients beschaffen mit Hilfe der RMI- Registry Referenzen auf die benötigten Objekte und rufen die gewünschten Methoden auf. Der Rückgabewert wird an den Client zurückübertragen Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 4

Prinzip Stubs und Skeletons Ein Stub ist eine Klasse, die - wie das implementierende Remote-Objekt - das Remote-Interface implementiert und daher für den Client als Platzhalter für den Zugriff auf das Remote-Objekt dient Der Stub kommuniziert über eine TCP- Verbindung mit dem Gegenstück auf der Server-Seite (Skeleton). Das Skeleton kennt das tatsächliche Applikationsobjekt, leitet die Anfragen des Stubs an dieses weiter und gibt den Rückgabewert an ihn zurück. Stub und Skeleton werden während der Entwicklung mit Hilfe eines Tools (rmic) generiert und verbergen die komplizierten Details der Kommunikation zwischen Server und Client Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 5

Prinzip Parameterübergabe Werden beim Aufruf einer Methode primitive Datentypen übergeben oder zurückgegeben (int, char, boolean, usw.), werden sie wie gewöhnlich per Wert übergeben (call by value keinerlei Unterschied zu lokalen Java-Programmen) Lokale Objekte können dagegen nur dann als Parameter oder Rückgabewert verwendet werden, wenn sie serialisierbar sind. Sie werden bei der Übertragung kopiert und somit ebenfalls per Wert übergeben. Eigene Klassen müssen das Interface Serializable implementieren. Verweise auf Remote-Objekte, wie sie beispielsweise vom Namens- Service zurückgegeben werden, haben dagegen Referenzcharakter und werden wie gewöhnliche Objektreferenzen behandelt. Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 6

Prinzip Serialisierung - Deserialisierung Serialisierung: Speicherung von Objekten auf einen Stream Deserialisierung: Erzeugung von serialisierten Objekten Anwendungen: Speicherung in Dateien oder Datenbanken, Netzwerkkommunikation (zum Beispiel RMI) Serialisierung / Deserialisierung primitiver Typen (int, float, ): built-in Serialisierung / Deserialilsierung von Objekten: Interface Serializable implementieren Objekt muss Serializable implementieren Objekt ObjectOutputStream OutputStream ObjectInputStream InputStream Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 7

Agenda Agenda Prinzip Beispiel Architektur-Überlegungen Literatur Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 13.6.2006 Seite 8

Beispiel Beispiel: TimeService Client gettime TimeService Server TimeService liefert die aktuelle Uhrzeit vom Server Durchzuführende Schritte: 1. Remote-Interface definieren 2. Remote-Interface implementieren 3. Stub und Skeleton erzeugen 4. Security-Policies festlegen 5. RMI-Repository starten 6. Remote-Objekte registrieren 7. Client implementieren und starten Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 9

Beispiel Remote-Interface definieren gettime liefert die aktuelle Uhrzeit als String vom Server Interface TimeService muss Interface java.rmi.remote erweitern Alle Methoden müssen java.rmi.remoteexception werfen import java.rmi.*; public interface TimeService extends Remote { public String gettime() throws RemoteException; } Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 10

Beispiel Remote-Interface implementieren TimeServiceImpl wird von java.rmi.server.unicastremoteobjekt abgeleitet Verantwortlich für Details der Client / Server-Kommunikation import public class TimeServiceImpl extends UnicastRemoteObject implements TimeService { public String gettime() throws RemoteException { return (new Date()).toString(); } } Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 11

Beispiel Stub und Skeleton erzeugen Stub und Skeleton Klassen müssen erzeugt werden Generator-Tool rmic (Kommandozeilenprogramm aus dem JDK) erwartet den Namen der Implementierungsklasse als Argument (falls erforderlich, mit der vollen Paketbezeichnung) und erzeugt daraus die beiden Klassendateien für Stub und Skeleton Aus der Klasse TimeServiceImpl werden die Klassen TimeServiceImpl_Stub und TimeServiceImpl_Skel erzeugt und als.class-dateien zur Verfügung gestellt > rmic TimeServiceImpl Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 12

Beispiel Security Policies festlegen TCP-Kommunikation mit der RMI-Registry auf Port 1099 ermöglichen Auf TCP-Port 80 eine Verbindung erlauben. Dort wird später der Web- Server laufen, mit dem der Client die Klassendatei mit der TimeStore- Implementierung zur Verfügung stellt. Entsprechende Einträge in der benutzerspezifischen Policy-Datei vorzunehmen. Sie liegt im Home-Verzeichnis des aktuellen Benutzers und heißt.java.policy grant { permission java.net.socketpermission "ph01:1099", "connect,resolve"; permission java.net.socketpermission "ph02:80", "connect"; }; Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 13

Beispiel RMIRegistry starten RMIRegistry: Namensdienst für RMI Start der RMIRegistry als Kommandozeilenprogramm Standard-Portnummer: 1099 Starten unter Windows: > start rmiregistry Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 14

Beispiel Remote-Objekte registrieren Installation SecurityManager: aus Sicherheitsgründen notwendig, wenn mittels RMI Bytecode dynamisch geladen wird java.rmi.naming: Klasse zum Speichern und Wiederfinden von Referenzen auf Remote-Objekte Methoden bind / rebind zum Speichern von Objektreferenzen URLs als Format für Referenzen: rmi://localhost:1099/timeservice System.setSecurityManager(new RMISecurityManager()); try { TimeServiceImpl tsi = new TimeServiceImpl(); Naming.rebind("TimeService", tsi); } catch (Exception e) { // error handling } Time- Service- Registration. java > java -Djava.rmi.server.codebase=http://localhost/ TimeServiceRegistration Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 15

Beispiel Interface Naming public static void bind(string name, Remote obj) throws AlreadyBoundException, MalformedURLException, RemoteException public static void rebind(string name, Remote obj) throws RemoteException, MalformedURLException public static void unbind(string name) throws RemoteException, MalformedURLException, NotBoundException public static Remote lookup(string name) throws NotBoundException, MalformedURLException, RemoteException public static String[] list(string name) throws RemoteException, MalformedURLException Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 16

Beispiel Client implementieren und starten Auffinden des Remote-Objektes: Naming.lookup try { String url = "rmi://localhost:1099/timeservice ; TimeService ts = (TimeService) Naming.lookup(url); System.out.println(" Server time is " + ts.gettime()); } catch (Exception e) { // exception handling } Time- Service- Client. java WebServer unter Port 80 starten Start des Programms: > java TimeServiceClient Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 17

Agenda Agenda Prinzip Beispiel Architektur-Überlegungen Literatur Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 13.6.2006 Seite 18

Architektur-Überlegungen Architektur-Betrachtung cd RMI Application code «interface» java.rmi.remote Technical code Die naive Implementierung mischt Anwendungscode und technischen Code «interface» ApplicationInterface «realize» ApplicationClass «realize» use via delegation «realize» «interface» RemoteInterface «realize» RemoteClass UnicastRemoteObject Saubere Trennung: Anwendungsklasse und Interface wissen nichts von Kommunikationstechnik RemoteInterface erbt von Anwendungs-Interface Remote-Klasse nutzt Anwendungsklasse (Delegation) Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 19

Agenda Agenda Prinzip Beispiel Architektur-Überlegungen Literatur Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006. 13.6.2006 Seite 20

Literatur Literatur und Referenzen Guido Krüger: Handbuch der Java-Programmierung, Kapitel 46 Remote Method Invocation Eclipse Plugin: http://www.genady.net/rmi/ Hochschule Darmstadt University of Applied Sciences. Fachbereich Informatik. Prof. Dr. Bernhard Humm. Sommersemester 2006., 13.6.2006, Seite 21