Download Kein Folientitel

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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