Kein Folientitel

Werbung
Remote Methode Invocation (RMI)
ETIS SS05
Gliederung
• Motivation
• Ablauf der Kommunikation
• Erstellung Remote-Service
• Zusammenfassung
RMI
ETIS SS05 Nadine Fröhlich
2
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 JavaAnwendungen eingesetzt
– Client und Server in Java programmiert
– Seit JDK 1.1 Bestandteil der Standardbibliotheken von Java,
d.h. auf allen Plattformen nutzbar, auf denen JavaLaufzeitumgebung verfügbar
RMI
ETIS SS05 Nadine Fröhlich
3
Motivation I
• Problem:
– Aufruf eines (Service) Objektes in entfernter JVM nötig (auf
selben oder entfernten Rechner)
?
Clientobjekt
Serviceobjekt
?
Server heap
Client heap
– 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
RMI
ETIS SS05 Nadine Fröhlich
4
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()
Clientobjekt
Clienthelper
6. Ergebnis an Client
2. Informationen
zum Methodenaufruf
5. Übermitteln
gepacktes Ergebnis
Client heap
RMI
3. MethodenAufruf()
Servicehelper
Serviceobjekt
4. Ergebnisrückgabe
Server heap
ETIS SS05 Nadine Fröhlich
5
Ablauf der Kommunikation II
1. 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
6
Ablauf der Kommunikation III
3. Methodenaufruf
– Service Helper (Skeleton) nimmt Anfrage entgegen und ruft
wirkliche Methoden auf richtigem Service-Objekt auf
4. Ergebnisrückgabe
– Service Helper bekommt Rückgabewert vom Service-Objekt
5. Übermitteln gepacktes Ergebnis
– Service Helper packt + verschickt Ergebnis an Client-Helper
6. Ergebnis an Client
– Client-Helper entpackt Informationen und gibt Werte an Client
Objekt zurück
RMI
ETIS SS05 Nadine Fröhlich
7
Erstellung Remote-Service
1. Remote-Interface erstellen
– Remote Interface definiert Methoden, die Client entfernt aufrufen kann
– Stub und Service implementieren es
2. Remote Implementierung erstellen
– Implementierung macht eigentliche Arbeit (Service)
3. Stub (Client Helper) + Skeleton (Service Helper) generieren
– automatisch aus Implementierung mit rmic generiert
4. RMI Registry starten
– Wie Telefonbuch, hier erfragt Client den Stub
5. Remote Service starten
– Service instanziert + in Registry registriert, dadurch ist er für Clients
verfügbar
RMI
ETIS SS05 Nadine Fröhlich
8
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
9
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
10
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
11
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://127.0.0.1/ServiceName“);
3. methodenAufruf()
Clientobjekt
Stub
Serviceobjekt
Skeleton
2. gefundener Stub
1. lookup()
ServiceName HelloWorld
StubService1 StubService2
Client heap
RMI
…
…
Server heap
ETIS SS05 Nadine Fröhlich
12
Hintergrund: Proxy Pattern
Client
Subjekt
operation()
…
EchtesSubjekt
operation()
…
RMI
Proxy
echtesSubjekt
operation()
…
…
echtesSubjekt.operation();
…
ETIS SS05 Nadine Fröhlich
13
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
14
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
• http://www.dpunkt.de/java/Programmieren_mit_Java/Remote_
Method_Invocation/3.html
RMI
ETIS SS05 Nadine Fröhlich
15
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
16
Herunterladen