18.15 UnicastRemoteObject, RemoteServer und RemoteObject
Entfernte Objekte erweitern oft die Klasse UnicastRemoteObject. Sie selbst ist jedoch eine Unterklasse von java.rmi.server.RemoteServer, eine abstrakte Klasse, die wiederum die abstrakte Klasse java.rmi.server.RemoteObject beerbt.
RemoteObject ist ein verteiltes Objekt
RemoteObject ist nichts anderes als ein verteiltes Objekt, welches die Schnittstellen Remote und Serializable implementiert. Da beide aber nur Markierungsschnittstellen sind, taucht keine ausprogrammierte Methode auf. RemoteObject ersetzt die Klasse Object für verteilte Objekte. Die Unterscheidung tritt bei den Methoden hashCode(), equals() und toString() auf. Ebenso implementiert RemoteObject die Methoden writeObject() und readObject(), damit die verteilten Objekte serialisiert werden können.
abstract class java.rmi.server RemoteObject
implements Remote, Serializable
|
|
protected RemoteObject()
Erzeugt ein remote-Objekt. |
|
protected RemoteObject( RemoteRef newref )
Erzeugt ein remote-Objekt, welches mit angegebener remote-Referenz initialisiert ist. |
|
RemoteRef getRef()
Liefert eine remote-Referenz für das Objekt. |
|
public static Remote toStub( Remote obj ) throws NoSuchObjectException
Liefert den Stub für das remote-Objekt obj. Die Operation kann nur durchgeführt werden, wenn das Objekt schon exportiert wurde. Sonst wird eine NoSuchObjectException ausgelöst. |
|
int hashCode()
Liefert den Hashcode. Zwei entfernte Stubs, die auf dasselbe Objekt verweisen, sollten auch den gleichen Hash-Wert liefern. Die Methode ruft auf entfernten RemoteRef-Objekten die Methode remoteHashCode() auf und auf lokale Objekte einfach hashCode(). |
|
boolean equals( Object obj )
Vergleicht, ob zwei entfernte Objekte gleich sind. Ist obj kein entferntes Objekt, so wird ein normaler Vergleich mit equals() gemacht. Der Vergleich mit dem entfernten Objekt wird mit remoteEquals() auf dem RemoteRef-Objekt vorgenommen. |
|
String toString()
Liefert eine String-Repräsentation. |
RemoteServer
RemoteServer erweitert RemoteObject und fügt die interessante Methode getClientHost() hinzu. Damit kann der Server den Host-Namen vom Client als String erfahren. Damit der Server jedoch Informationen an den Client zurückschicken kann, muss der Client selbst als Server auftreten. Die Kommunikation ist bei RMI in der Regel immer einseitig.
abstract class java.rmi.server.RemoteServer
extends RemoteObject
|
|
protected RemoteServer()
Erzeugt für die Unterklassen ein RemoteServer()-Objekt. |
|
protected RemoteServer( RemoteRef ref )
Erzeugt für die Unterklassen ein RemoteServer()-Objekt mit der Referenz ref. |
|
static String getClientHost() throws ServerNotActiveException
Liefert den Host-Namen des aktuellen Clients. Die Ausnahme ServerNotActiveException wird ausgelöst, wenn der Aufruf außerhalb eines Servers stattfindet, der RMI anbietet. |
|