ich habe da ein kleines Problem mit RMI:
Eigentlich laeuft alles Klasse, ausser einer Kleinigkeit:
Ich moechte auf Serverseite einen Listener registrieren, so dass der Server
den Client ueber Aenderungen benachrichtigt.
Dazu habe ich ein
interface IModelChangeListener extends Remote
und eine Implementation
public class PluginModelChangeListener extends UnicastRemoteObject
implements IModelChangeListener
Beim Aufruf (sinngemaess):
server.addModelChangeListener(IModelChangeListener)
gibt es folgende Exception:
java.lang.IllegalArgumentException: argument type mismatch
at
sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:245)
at
sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:220)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:122)
at
de.renew.agent.viewer.model.DefaultModelManager_Stub.addModelChangeListener(Unknown
Source)
Stehe ich da irgendwie auf dem Schlauch?
Kann ich denn RMI nicht in die Richtung Server->Client nutzen?
IMHO sollte das doch unerheblich sein, solange ich ein UnicastRemoteObject
habe, oder?
Sonst laeuft alles, also Client->Server.
Bitte helft mir, ich habe sonst keine Idee mehr.
Vielen Dank,
Timo
Doch das geht.
[...]
> Sonst laeuft alles, also Client->Server.
[...]
Da sonst alles läuft vermute ich mal dass du eine Art Verisionsproblem
hast. Entweeer nutzt du irgendwo zwei verschiedene class-Dateien, oder
die Stubs und Skeletons sind nicht aktuell. Ich empfehle daher einfach
mal alle Class-Dateien zu löschen und nochmla neu zu erzeugen. Bei so
einem ähnlichem Fehler hat das bei mir geholfen. Damals hatte ich eine
MethodNotFoundException, oder sowas in der Art.
Gruss theo
Hallo,
AFAIK muss du deinen Client zu einem Server machen um einen Listener zu
registrieren, das bedeutet du must den Client(der zum Server wird) auch
in der RMIRegistry anmelden(die Lokale beim Client), sodass der
Server(der richtige) ihn erreichen kann.
An den Server musst du dann nicht die Instanz des Listeners übergeben,
sondern den Weg, wie der Listener zu erreichen ist.
Das wäre dann die IP Adresse oder der Hostname und der Namen unter dem
sich der Listener in der RMI Registry eingetragen hat.
Grüße,
Stefan
Das stimmt so nicht... es reicht ein Object zum Server zu schicken, das
ein UnicastRemoteObject darstellt, dann kann man über ein bestimmtes
Interface Methoden dieses Objektes aufrufen - also ganz nach RMI-manier.
Die Registry dient ja nur dazu an das Object zu kommen.
> An den Server musst du dann nicht die Instanz des Listeners übergeben,
> sondern den Weg, wie der Listener zu erreichen ist.
wenn man das so macht, wie ich das oben beschrieben habe, dann ist das
implizit so.
Gruss theo