Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

RMI problem: IllegalArgumentException

67 views
Skip to first unread message

Timo Carl

unread,
Jul 10, 2002, 12:11:50 PM7/10/02
to
Hallo allerseits,

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

Jochen Theodorou

unread,
Jul 10, 2002, 12:28:13 PM7/10/02
to
Timo Carl schrieb:
[...]

> 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)
>
[...]

> Kann ich denn RMI nicht in die Richtung Server->Client nutzen?

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

Stefan Ortmanns

unread,
Jul 10, 2002, 1:04:57 PM7/10/02
to
Timo Carl wrote:


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


Jochen Theodorou

unread,
Jul 10, 2002, 2:21:15 PM7/10/02
to
Stefan Ortmanns schrieb:
[...]

>
> 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.

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

0 new messages