# RMI Server Basic Problem



## Snape (13. Mai 2005)

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!


----------



## Bleiglanz (13. Mai 2005)

könnte es sein, dass das jar fehlerhaft ist (liegt die Stub.class im richtigen Package)?

UND du es zufällig auf deinem lokalen Rechner in einem Verzeichnis startest, das ein Unterverzeichnis rmikochbuch/ hat?


----------



## Snape (13. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> könnte es sein, dass das jar fehlerhaft ist



Dann dürfte es doch auf meinem Rechner auch nicht laufen, oder?



> (liegt die Stub.class im richtigen Package)?



Ja. Das package heisst rmikochbuch, darin befinden sich alle Dateien. Auch in dem JAR, wovon ich mich mit Winzip überzeugt habe.



> UND du es zufällig auf deinem lokalen Rechner in einem Verzeichnis startest, das ein Unterverzeichnis rmikochbuch/ hat?



Nein, ich starte es im eclipse-Verzeichnis, darin befinden sich nur die üblichen verdächtigen Unterverzeichnisse configuration, plugins usw.


----------



## Bleiglanz (13. Mai 2005)

was soll "das eclipse Verzeichnis sein"?

kopier das Ding mal irgendwohin, und starte es an der Konsole?


----------



## Snape (13. Mai 2005)

Ich kann es auf meinem Rechner starten wo ich will, habe gerade auch noch mal C:\ ausprobiert, funktioniert auch (jeweils immer Kommandozeile).


----------



## Snape (16. Mai 2005)

Niemand mehr eine Idee?


----------



## Snape (17. Mai 2005)

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


----------



## Bleiglanz (17. Mai 2005)

hast du auf deiner lokalen Maschine evtl. die Umgebungsvariable CLASSPATH verfummelt? Oder irgendeinen Mist in $JDK/lib/ext oder sowas?

ansonsten ist die Situation die:

du hast x.jar

du kannst x.jar in irgendeinen Ordner auf deinem Rechner A kopieren und mit java -jar starten (ohne weitere Classpath-angaben)?

auf einem Fremdrechner mekkert er dann die ClassNotFound Ex. an, obwohl innerhalb des Jars ein Unterordner rmikochbuch existiert, in dem eine Datei RemoteDateImpl_Stub.Class liegt?

ist das so?


----------



## Snape (17. Mai 2005)

Bleiglanz hat gesagt.:
			
		

> hast du auf deiner lokalen Maschine evtl. die Umgebungsvariable CLASSPATH verfummelt? Oder irgendeinen Mist in $JDK/lib/ext oder sowas?



Nein. Um ehrlich zu sein: Auf meinem Rechner gibts gar keinen CLASSPATH Eintrag. 



> ansonsten ist die Situation die:
> 
> du hast x.jar
> 
> du kannst x.jar in irgendeinen Ordner auf deinem Rechner A kopieren und mit java -jar starten (ohne weitere Classpath-angaben)?



Si.



> auf einem Fremdrechner mekkert er dann die ClassNotFound Ex. an, obwohl innerhalb des Jars ein Unterordner rmikochbuch existiert, in dem eine Datei RemoteDateImpl_Stub.Class liegt?
> 
> ist das so?



Genau so.


----------



## Bleiglanz (17. Mai 2005)

>>Auf meinem Rechner gibts gar keinen CLASSPATH Eintrag

seht gut!

versuch mal

```
java -Djava.rmi.server.codebase=file:/pfadzumirselbst/x.jar x.jar
```


----------



## Snape (17. Mai 2005)

D:\>java -Djava.rmi.server.codebase=C:\JavaProgramme\eclipse\workspace\RMI\src\server.jar server.jar
Exception in thread "main" java.lang.NoClassDefFoundError: server/jar


Wenn ich den Client starte und mit dem Server verbinden will, bekomme ich das hier:
D:\JavaProgramme\eclipse\workspace\RMI\src>java DateClient
RemoteDate exception: Connection refused to host: 192.168.10.41; nested exception is:
        java.net.ConnectException: Connection refused: connect
java.rmi.ConnectException: Connection refused to host: 192.168.10.41; nested exception is:
        java.net.ConnectException: Connection refused: connect
        at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
        at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
        at sun.rmi.server.UnicastRef.newCall(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
        at java.rmi.Naming.lookup(Unknown Source)
        at DateClient.main(DateClient.java:24)
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(Unknown Source)
        at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
        at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
        ... 7 more

Was soll mir das sagen? Ist auf dem Server ein Port geblockt, wenn ja, welcher?


----------



## Bleiglanz (17. Mai 2005)

du hast die -jar vergessen beim java aufruf

genau wie ich oben...


----------



## Snape (17. Mai 2005)

Werde es evtl. zu Hause ausprobieren - hier ist RMI erst mal vom Tisch, Sockets sollen reichen.


----------



## Bleiglanz (17. Mai 2005)

D:\>java -Djava.rmi.server.codebase=C:\JavaProgramme\eclipse\workspace\RMI\src\server.jar  -jar server.jar


----------

