RMI Server Basic Problem

Snape

Erfahrenes Mitglied
Tach,
folgende für mich nicht nachvollziehbare Fehlermeldung erhalte ich:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: rmikochbuch.RemoteDateImpl_Stub

Folgendes Szenario ist gegeben:
Ich führe auf dem Entwicklungsrechner A nach "start rmiregistry" meine JAR-Datei aus mittels

java -jar RMI_Server_Test_01.jar

Nun kopiere ich diese Datei auf einen anderen Rechner B und noch einen weiteren Rechner C. Führe ich jetzt dort den gleichen Befehl aus, erhalte ich aber die o.a. Fehlermeldung. Es handelt sich um die gleiche JAR-Datei! In welcher sich natürlich die RemoteDateImpl_Stub.class Datei im Verzeichnis rmikochbuch befindet.
Kann mir das jemand erklären und ggf. helfen, dieses Problem zu beseitigen?

Danke!
 
Hi Snape,

ich glaube die Fehlermeldung kenne ich. So was ähnliches hatte ich damals auch mal,
bei mir war das Problem, das ich unterschiedliche Stubs und Sceletons hatte. Lass den RMICompiler nach irgend einer Änderung am Client oder Server immer über alle Klassen laufen. Um alles auszuschließen, würde ich auch mal das ganze Package (Client unt Server) auf alle Rechner kopieren. Und dann nochmal versuchen.

Vielleicht hilfs ja, bin mir aber nicht ganz sicher...
 
Zilchinger hat gesagt.:
Hi Snape,

ich glaube die Fehlermeldung kenne ich. So was ähnliches hatte ich damals auch mal,
bei mir war das Problem, das ich unterschiedliche Stubs und Sceletons hatte. Lass den RMICompiler nach irgend einer Änderung am Client oder Server immer über alle Klassen laufen. Um alles auszuschließen, würde ich auch mal das ganze Package (Client unt Server) auf alle Rechner kopieren. Und dann nochmal versuchen.

Vielleicht hilfs ja, bin mir aber nicht ganz sicher...

In dem JAR-File befinden sich ALLE Klassen, sowohl der Client als auch der Server plus Interface und Stub+Skeleton.
Ich verwende das RMIC Plugin für Eclipse, aber wie gesagt, auch wenn ich nicht in Eclipse sondern von Kommandozeile das jar-Executable starte, läuft es auf dem Entwicklungsrechner in jedem beliebigen Verzeichnis, auf den anderen beiden Rechnern nicht.
 
So, habe es endlich hinbekommen, den Server zu starten.

Lösung: Die Interface-Klasse, die Implementierung sowie die _Stub und _Skel müssen im CLASSPATH des Servers liegen. Also entpackt als .class
 
Thomas Darimont hat gesagt.:
Hallo!

Du brauchst die .class Files dazu aber nicht zu entpacken. es reicht, wenn das passende jar im Classpath der RMI Registry liegt.

Ah, das wäre ja noch einfacher.

Weiterhin braucht man seit Java 1.3 keine Skeletons und seit Java 1.4 keine Stubs mehr...
mit Java 5 geht's sogar noch einfacher:
http://www.tutorials.de/tutorials179039.html&highlight=RMI

Gruß Tom

Java 5 kommt nicht zum Einsatz. Wie gehts in 1.4.2 ohne Stubs und Skeletons? Einfach weglassen?
 
Zurück