java.rmi.Remoteerweitert. Anschließend muß man die jeweilige Instanz für Remotezugriff exportieren. Dies geschieht entweder auf direktem Weg mittels statischer Methode
java.rmi.server.UnicastRemoteObject.exportObject(oder indirekt für alle erzeugten Instanzen der Klasse, wenn diese von)
java.rmi.server.UnicastRemoteObjecterbt. Dabei muss man aber die Konstruktoren der Klasse als
throws RemoteExceptiondeklarieren. Im implizit oder explizit erfolgenden Aufruf des Basiskonstruktors von
UnicastRemoteObjectgeschieht dann der Export der Instanz.
Man kann sich den Export einer Instanz als Mapping vorstellen, bei dem zu jedem Remote Objekt als Schlüssel ein entsprechender Proxy in Stub-Gestalt als Wert hinterlegt wird. Bei Parameterübergaben an remote aufgerufenen Methoden (per Stub Instanzen) und bei entsprechenden Rückgabewerten werden alle Objekte vom Typ Remote durch Ihre Stubs ersetzt, sofern diese Remote Objekte implizit oder explizit exportiert wurden. Falls kein Export definert wurde, dann geschieht die ganz normale Serialisierung der Remote Objekte. Im Falle der Exportfreigabe der jeweiligen Remote-Instanzen werden die zugehörigen Stubs an ihrer Stelle serialisiert. Wenn ein Client mehrfach einen serialiserten Stub für dieselbe Remote-Instanz als Rückgabewert einer Methode erhält, dann sind diese Stub Objekte bzgl. des Vergleiches mittels
==alle unterscheidlich, aber sie kommunizieren alle mit demselben Remote Objekt. Daher sollte man mit Stub Objekten immer nur mittels
.equals()vergleichen.
Zitate:
- Wenn eine Methode eine lokale Referenz auf ein exportiertes Remote-Objekt zurückgibt, gibt RMI nicht das (A.d.Ü: Remote-) Objekt zurück. Stattdessen ersetzt es (A.d.Ü: dieses) mit einem anderen Objekt (dem Remote Proxy für diesen Dienst) im Rückgabestrom.
[Übersetzung von: "When a method returns a local reference to an exported remote object, RMI does not return that object. Instead, it substitutes another object (the remote proxy for that service) in the return stream."] aus http://java.sun.com/developer/onlineTraining/rmi/RMI.html#RemoteObjectParameters
Links: