18.3 Die Lösung für Java ist RMI
Damit RMI funktioniert, sind drei Teile mit der Kommunikation beschäftigt:
1. |
Der Server stellt das entfernte Objekt mit der Funktion bereit. Die Funktion läuft im eigenen Adressraum, und der Server leitet Anfragen an diese Funktion weiter. |
2. Der Namensdienst (Registry) ist ein Anfragedienst, der Objekte und ihre Methoden mit einem eindeutigen Namen verbindet. Der Server meldet Objekte mit ihren Funktionen bei diesem Namensdienst an.
3. Der Client ist der Nutzer des Dienstes und ruft die Methode auf einem entfernten Objekt auf. Auch er hat einen eigenen Adressraum. Möchte der Client eine Funktion nutzen, so fragt er bei dem Namensdienst an, um Zugriff zu bekommen.
18.3.1 Entfernte Objekte programmieren
Um entfernte Objekte mit ihren Methoden in Java-Programmen zu nutzen, müssen wir einige Schritte machen, die im Folgenden kurz skizziert werden. An den Schritten spiegelt sich der Programmieraufwand wider:
1. |
Wir geben eine entfernte Schnittstelle an, die die Methode(n) definiert. |
2. Wir implementieren eine Klasse, die die Schnittstelle implementiert und die Methode mit Leben füllt. Dies bildet das entfernte Objekt. Die Klasse muss zusätzlich einen speziellen Konstruktor besitzen.
3. Existiert die Implementierung, benötigen wir ein Exemplar dieses Objekts. Wir melden es bei einem Namensdienst an, damit andere es finden können. Dies bildet den Server.
4. Im letzten Schritt demonstrieren wir die entfernte Methode an einem Beispiel.
18.3.2 Entfernte und lokale Objekte im Vergleich
Vergleichen wir entfernte Objekte und ihre Methoden, so fallen Gemeinsamkeiten ins Auge. Die Referenzen auf entfernte Objekte lassen sich wie gewohnt nutzen, etwa als Parameter einer Funktion oder als Rückgabewert. Dabei ist es egal, ob die Methode mit den Parametern oder Rückgabewerten lokal oder entfernt ist. Die Unterschiede zu lokalen Objekten sind aber deutlicher. Da ein Client immer über eine entfernte Schnittstelle das Objekt repräsentiert, hat es nichts mit der tatsächlichen Implementierung zu tun, und daher ist auch eine Typumwandlung unmöglich. Die einzige Umwandlung von einer entfernten Schnittstelle ist in Remote. Damit ist auch deutlich, dass instanceof auch nur testen kann, ob das Objekt entfernt ist oder nicht; die echte Vererbung auf der Server-Seite bleibt verborgen.
|