Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Remote Methode Invocation (RMI)

Ähnliche Präsentationen


Präsentation zum Thema: "Remote Methode Invocation (RMI)"—  Präsentation transkript:

1 Remote Methode Invocation (RMI)
ETIS SS05

2 Gliederung Motivation Ablauf der Kommunikation
Erstellung Remote-Service Zusammenfassung RMI ETIS SS05 Nadine Fröhlich

3 Motivation I RMI: Remote Method Invokation
Möglichkeit verteilte Java-Anwendungen zu erstellen Ermöglicht Methodenaufruf auf Java-Objekten, in anderer JVM auf selben oder anderem Rechner Fast nahtlos, d.h. kaum Aufwand, um Klasse RMI-fähig zu machen Architektur zunächst nur zur Kommunikation zwischen Java-Anwendungen eingesetzt Client und Server in Java programmiert Seit JDK 1.1 Bestandteil der Standardbibliotheken von Java, d.h. auf allen Plattformen nutzbar, auf denen Java-Laufzeitumgebung verfügbar RMI ETIS SS05 Nadine Fröhlich

4 Motivation I Problem: Aufruf eines (Service) Objektes in entfernter JVM nötig (auf selben oder entfernten Rechner) Folgendes funktioniert nicht (in Klasse Client): Maschine m = <object in another heap> Programmierung auf Socket- oder Protokollebene: aufwändig, fehleranfällig, häufig nicht wiederverwendbar ? Client- objekt Service- objekt ? Client heap Server heap RMI ETIS SS05 Nadine Fröhlich

5 Ablauf der Kommunikation I
RMI ermöglicht Finden + Aufruf von Objekten in entfernter JVM, dabei: keine Unterscheidung zwischen lokalen und entfernten Methodenaufrufen, d.h. transparente Verteilung Helper Objekte übernehmen Kommunikation Ablauf: 1. MethodenAufruf() 3. MethodenAufruf() 2. Informationen zum Methodenaufruf Client- objekt Client- helper Service- helper Service- objekt 5. Übermitteln gepacktes Ergebnis 6. Ergebnis an Client 4. Ergebnisrückgabe Client heap Server heap RMI ETIS SS05 Nadine Fröhlich

6 Ablauf der Kommunikation II
Methodenaufruf Client ruft Methode auf Client Helper (Stub) auf, als ob dieser aktueller Service wäre Client Helper Proxy tut so, als wäre er Service, den Client aufrufen will hat selbe Methoden wie Remote Service, aber keine Logik Informationen zum Methodenaufruf Client Helper kontaktiert Server, transferiert Informationen über Methodenaufruf (Methodenname, Argumente) und wartet auf Antwort vom Server RMI ETIS SS05 Nadine Fröhlich

7 Ablauf der Kommunikation III
Methodenaufruf Service Helper (Skeleton) nimmt Anfrage entgegen und ruft wirkliche Methoden auf richtigem Service-Objekt auf Ergebnisrückgabe Service Helper bekommt Rückgabewert vom Service-Objekt Übermitteln gepacktes Ergebnis Service Helper packt + verschickt Ergebnis an Client-Helper Ergebnis an Client Client-Helper entpackt Informationen und gibt Werte an Client Objekt zurück RMI ETIS SS05 Nadine Fröhlich

8 Erstellung Remote-Service
Remote-Interface erstellen Remote Interface definiert Methoden, die Client entfernt aufrufen kann Stub und Service implementieren es Remote Implementierung erstellen Implementierung macht eigentliche Arbeit (Service) Stub (Client Helper) + Skeleton (Service Helper) generieren automatisch aus Implementierung mit rmic generiert RMI Registry starten Wie Telefonbuch, hier erfragt Client den Stub Remote Service starten Service instanziert + in Registry registriert, dadurch ist er für Clients verfügbar RMI ETIS SS05 Nadine Fröhlich

9 Remote-Interface erstellen
Interface muss von java.rmi.Remote erben Alle Methoden müssen RemoteException werfen, da bei entfernten Aufrufen Fehler auftreten können Argumente und Rückgabewerte müssen primitive Datentypen oder serialisierbar sein import java.rmi.*; public interface IRemote extends Remote{ public String echo() throws RemoteException; } RMI ETIS SS05 Nadine Fröhlich

10 Remote Implementierung erstellen
Remote Interface implementieren von UnicastRemoteObject erben public class RemoteImpl extends UnicastRemoteObject implements IRemote {… Service muss in RMI Registry registriert werden try{ IRemote service = new RemoteImpl(); Naming.rebind(“ServiceName“, service“); } catch (Exception ex) {… RMI ETIS SS05 Nadine Fröhlich

11 Helper generieren, RMIRegistry + Service starten
rmic (RMI Compiler) generiert aus Serviceimplementierung Stub + Skeleton % rmic RemoteImpl Rmiregistry starten % rmiregistry Service starten % java KlasseInDerRegistrierung RMI ETIS SS05 Nadine Fröhlich

12 Clientaufruf Client benötigt Stub, auf ihm werden Methoden aufgerufen
Client macht ein Lookup in RMIRegistry und sucht den Stub anhand des Namen IRemote service = (IRemote) Naming.lookup (“rmi:// /ServiceName“); 3. methodenAufruf() Client- objekt Service- objekt Stub Skeleton 2. gefundener Stub 1. lookup() ServiceName HelloWorld StubService1 StubService2 Client heap Server heap RMI ETIS SS05 Nadine Fröhlich

13 Hintergrund: Proxy Pattern
Client Subjekt operation() EchtesSubjekt Proxy echtesSubjekt.operation(); operation() echtesSubjekt operation() RMI ETIS SS05 Nadine Fröhlich

14 Zusammenfassung RMI verbirgt Tatsache, dass Methode remote (entfernt) aufgerufen wird entfernte Methoden wie normale Methoden, in Client-JVM laufend, aufgerufen (mittels Stub (Proxy)) RMI gibt Infrastruktur vor (inkl. lookup Service - nutzt Client zum Finden und Zugriff auf Remote-Objekte) Netzwerk oder I/O Code nicht selber zu schreiben Stub und Skeleton kommunizieren über Protokoll Java Remote Method Protocol (JRMP) – oder IIOP (Internet Inter-ORB Protocol aus Corba) generiert mit rmic neuere Java Versionen erfordern kein explizites Skeleton-Objekt (Methoden dynamisch aufgerufen) RMI ETIS SS05 Nadine Fröhlich

15 Literatur Gamma, E., Helm, R., Jonson, R., Vlissides, J., Entwurfsmuster, Addison-Wesley, Bonn, 1996 Freeman, E., Freeman, E., Head First Design Patterns, O‘ Reilly, 2004 Wutka, M. J2EE Developer‘s Guide, Markt+Technik, 2002 RMI ETIS SS05 Nadine Fröhlich

16 Corba vs. RMI CORBA: Architektur für Kommunikation zwischen Anwendungen verschiedener Programmiersprachen (für die CORBA-Implementierung verfügbar) Zusätzlicher Lernaufwand, da Server-Schnittstelle in Interface Definition Language (IDL) zu spezifizieren RMI speziell für Verwendung in Java konzipiert, d.h. kann nur dort verfügbare Features nutzen konnte von Anfang an Objekte als Wert übergeben (über Objekt-Serialisierung) mit J2SE verfügbar und kostenlos Die Grenzen zwischen RMI und CORBA verschwimmen zunehmend, RMI kann CORBA zugrunde liegendes IIOP-Protokoll zur Kommunikation nutzen CORBA hat biete jetzt Mechanismus zur Übergabe von Objekten per Wert Damit möglich, aus RMI Methoden in nicht in Java implementierten Objekten aufzurufen bzw. mit CORBA serverseitige RMI-Objekte anzusprechen. RMI ETIS SS05 Nadine Fröhlich


Herunterladen ppt "Remote Methode Invocation (RMI)"

Ähnliche Präsentationen


Google-Anzeigen