Remote Method Invocation



Ähnliche Dokumente
Remote Method Invocation

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Java-Programmierung. Remote Method Invocation - RMI

Remote Method Invocation

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

Java Remote Method Invocation (RMI)

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

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

Mobile und Verteilte Datenbanken

Mobile und Verteilte Datenbanken

Java RMI Remote Method Invocation

Konzepte von Betriebssystem-Komponenten Middleware RMI

Einführung: Verteilte Systeme - Remote Method Invocation -

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

Remote Methode Invocation (RMI) ETIS SS05

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

-Testen verteilter Anwendungen

Musterlösung Übungsblatt 2 Netzprogrammierung WS 05/06

Client/Server-Programmierung

Client/Server-Programmierung

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

8.1.5 Java RMI Remote Method Invocation

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

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

RMI. Wir haben. Komponenten auf einem Rechner. Remote Method Invocation

Middleware. im Schweinsgalopp

Verteilte Systeme: Entfernte Methodenaufrufe

Remote Method Invocation (RMI)

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

Warum EJB Technologie (1)?

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

Verteiltes Rechnen. Verteilte Dienste mit Java Remote Method Invocation (RMI). Prof. Dr. Nikolaus Wulff

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

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

4. Informatiktag NRW Projekt online Shop. Barbara Leipholz Schumacher Euregio Kolleg, Würselen

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

Java in Verteilte Systeme

Client/Server-Programmierung

Java in Verteilte Systeme - RMI

36.2 Example ClassLoader Example Appletviewer

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 30. März 2006

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

KAPITEL 1 RMI Verteilte Programmierung unter JAVA von Anja Austermann

Kommunikation in verteilten Anwendungen

7.1.1 Grundzüge der Fernaufruf-Implementierung

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

Klausur zur Vorlesung Einführung in Verteilte Systeme WS 05/06 Prof. Dr. Odej Kao 3. Februar 2006

RMI Server und Client

5A Kooperation: Lösungen

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

10.1 Remote Method Invocation (RMI)

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

Remote Method Invocation

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

Der lokale und verteilte Fall

F.1 Design Patterns (Entwurfsmuster) CLIENT SERVER. 1 Model-View-Controller. 1 Model-View-Controller (2) verwendete Entwurfsmuster (Designpattern)

Überblick. Java Reflection API. Class-Objekte

Lebenszyklus von Threads

JAVA Remote Method Invocation RMI/IIOP Tutorial

JAVA Remote Method Invocation JRMP Tutorial

Transkript:

Remote Method Invocation spezielle Technik aus dem Java-Umfeld Ausführung der Methoden auf einem entfernten Rechner Analogon zum RPC (Remote Procedure Call) Zweck: Objekte in verschiedenen Java-VM s Aufruf einer Methode eines remote -Objektes Programmieren wie mit lokalen Objekten wenig Programmier-Overhead verteilte Applikationen ETH Zürich Java RMI Seite 1

RMI-Architektur ( I ) Netzwerk Client-Seite Server-Seite lookup 2 Namensdienst call 3 (re)bind 1 result 4 Client Stub Skeleton Server ETH Zürich Java RMI Seite 2

RMI-Architektur ( II ) Namensdienst wird ganz am Anfang gestartet Server-Seite: //entfernte Objekt anmelden rmi.naming.bind( ObjectName, RemoteObject) //entfernte Objekt abmelden rmi.naming.unbind( ObjectName, RemoteObject) Client-Seite: //Referenz (Stub) des entfernten Objektes bekommen rmi.naming.lookup( rmi://some.server.com/objectname ) ETH Zürich Java RMI Seite 3

RMI Probleme Server: muß Methoden nach außen verfügbar machen (exportieren) besitzt auch nicht remote-aufrufbare Methoden (nicht exportiert) ist mit einem Ort assoziiert Client: muß Ort des Servers kennen muß Klasse des Servers kennen muß exportierte Methoden kennen ETH Zürich Java RMI Seite 4

RMI-Benutzung Schritt 1: Implementierung der Server-Seite - Basis Interface - Server Implementation Schritt 2: Stub und Skeleton generieren - automatische Generierung mittels rmic Schritt 3: Client-Seite Implementieren - Anfrage im Repository nach dem entfernten Server - Methoden-Aufruf wie auf dem lokalen Objekt Schritt 4: Namensdienst aktivieren - Starten der Namensdienst mit rmiregistry Schritt 6: Server starten Schritt 7: Client starten ETH Zürich Java RMI Seite 5

RMI-Beispiel ( I ) - Der Server Deklaration der entfernt zugreifbaren Methoden in einem Basis-Interface interface Server extends Remote { public void do_something() throws java.rmi.remoteexception Implementation des Server-Objektes ermöglicht das Weiterleiten der eventuellen Fehlermeldungen import java.rmi.*; import java.rmi.server.*; Punkt-zu-Punkt Kommunikation, Garbage-Collection public class ServerImpl extends UnicastRemoteObject implements Server { public ServerImpl throws RemoteException { super(); public do_something() {... public static void main (String args[]){ try { ServerImpl server=new ServerImpl(); Naming.rebind( MyServer, server); catch (Exception e){ e.printstacktrace; ermöglicht entfernter Zugriff auf die im Basis-Interface aufgelistete Methoden Hier wird die entfernt aufrufbare Methode implementiert ETH Zürich Java RMI Seite 6

RMI Klassen und Interfaces Klassen Interfaces java.rmi.remoteobject java.rmi.remote java.rmi.unicastremoteobject MyServerInterface extends implements MyServer ETH Zürich Java RMI Seite 7

RMI-Beispiel ( II ) - Stub und Skeleton Klassen Stub und Skeleton werden automatisch wie folgt erzeugt: ServerImpl.java compilieren Für automatische Erzeugung wird Tool rmic verwendet >rmic ServerImpl Dabei entstehen folgende Klassen: ServerImpl_Stub.class - Stub für die Client-Seite ServerImpl_Skel.class - Skeleton für die Server-Seite ETH Zürich Java RMI Seite 8

RMI-Beispiel ( III ) - Namensdienst Verzeichnis der zur Verfügung gestellten entfernten Objekte spezielles Tool rmiregistry: > rmiregistry <port> & Namensdienst wird gestartet Portnummer ist ein optionaler Parameter (per Definition wird 1099 eingestellt). Fehlermeldung falls Port bereits von einem anderen Prozess verwendet wird Wichtig: muss im gleichen Verzeichnis gestartet werden wo die Stubs sich befinden, oder CLASSPATH entsprechend setzen ETH Zürich Java RMI Seite 9

RMI-Beispiel ( IV ) - Der Client keine zusätzliche Vererbung von Interfaces und Objektklassen nötig Client findet den Server, indem er sich an den Namensdienst in dem Server- Rechner wendet bei Implementation assoziierter Name wird für die Nachfrage benutzt import java.rmi.*; public class ClientImpl { public static void main (String args[]) { try{ Server server=(server) Naming.lookup( rmi://some.server.com:port/myserver ); server.do_something(); catch (RemoteException e){ System.out.println(e) ETH Zürich Java RMI Seite 10

RMI-Naming Remote-Objekte müssen erreichbar sein: java.rmi.naming - Service Katalog von verfügbaren Remote-Objekten enthält Referenzen auf Remote-Objekte Referenzen über Namen identifizierbar Namen sind wie URL s zusammengesetzt Naming-Methoden: void bind(string url, Remote reference) rmi://rechner:port/objektname void rebind(string url, Remote reference) void unbind(string url) String[] list(string url) Remote lookup(string url) ETH Zürich Java RMI Seite 11

Zusammenfassung RMI bietet Methode zum Verstecken von Verteilung vereinfacht das Programmieren aber: neue Fehlerquellen + Exceptions (fast) gleiche Behandlung von lokalen und Remote-Objekten Remote-Objekt fungiert als Server (exportiert Methoden) Client kann über ein Interface auf das Remote-Objekt zugreifen RMI-Paket bietet einfachen Naming-Service Parallele Ausführung von Methodenaufrufen im Server mittels Threads (erfordert Synchronisation!) ETH Zürich Java RMI Seite 12