18.6 Stellvertreterobjekte erzeugen
Die Stellvertreter sind Methoden auf der Client- und Server-Seite, die die tatsächliche Kommunikation betreiben. Sie müssen für jede Methode oder jede Parameteränderung neu generiert werden. Da die Implementierung per Hand zu aufwändig und unflexibel wäre, erstellt ein Hilfsprogramm diese Klassen. Das Dienstprogramm heißt für Java »rmic« (von RMI-Compiler). Der Compiler generiert selbstständig aus einer Methodenbeschreibung die Stellvertreter, die »Stubs« und »Skeleton« heißen. Ein Stub ist ein Stellvertreter (Client-seitiger Proxy) für das entfernte Objekt auf der Client-Seite, der die RMI-Anfragen an den Skeleton (Server-seitig) weitergibt. Der Skeleton richtet die Client-Anfrage an die wirkliche Methodenimplementierung und schickt das Ergebnis wieder zurück.
18.6.1 Das Dienstprogramm rmic
Bevor rmic zum Zuge kommt, müssen die entfernten Klassen und Schnittstellen übersetzt sein. Danach schreiben wir
$ rmic AdderImpl
Die erzeugten Klassen werden standardmäßig im aktuellen Verzeichnis platziert. Mit der Option -D lässt sich der Zielort ändern.
Das RMI-Protokoll gibt es mittlerweile in unterschiedlichen Version. Mit dem Schalter -vXXX beziehungsweise -iiop lässt sich dies genauer angeben.
|
-v1.1
Erzeugt Stub und Skeleton für das Protokoll unter JDK 1.1. |
|
-v1.2
Erzeugt den Stub für das Java-SDK 1.2. Skeletons werden dort benötigt, da das System automatisch die Methoden des Servers findet und aufruft. |
|
-vcompat
Das Standardprotokoll unter dem JDK 1.2. Es ist kompatibel mit dem neuen 1.2 Stub-Protokoll und dem älteren von 1.1. |
|
-iiop
Erstellt für CORBA die passenden Bausteine. |
Mit der Option -idl kann zusätzlich für CORBA eine Spezifikationsdatei erstellt werden. Möchten wir zu den generierten Klassen den Quellcode sehen, so müssen wir -keep angeben. An den generierten Klassen lässt sich schön ablesen, wie die Kommunikation über die Leitung wirklich abgewickelt wird.
Tipp Obwohl die Zeile in Ordnung aussieht, muss der CLASSPATH angepasst werden - er muss auf das aktuelle Verzeichnis zeigen. Andernfalls produziert das Programm einen Fehler: Die Klassen werden nicht gefunden, obwohl sie im Pfad stehen.
|
Hier klicken, um das Bild zu Vergrößern
Abbildung 18.1 Zusammenhang der generierten Stellvertreter und der entfernten Schnittstelle
|