Warum RMI-registry ist das ignorieren der java.rmi.server.codebase-Eigenschaft

Ich bin mit einem Hello World-Beispiel für java RMI

1) ich führe die registry in einen leeren Ordner

motta@motta-laptop ~/tmp $ rmiregistry

2) ich starte den HTTP-server zum abrufen von Klassen zur Laufzeit. Der download-Ordner enthält die remote-Schnittstelle für die client-server -

motta@motta-laptop ~/download $ java NanoHTTPD 8080

3) ich starte den server übergibt die java.rmi.server.codebase-Eigenschaft, wie vorgeschlagen, in der java RMI tutorial

motta@motta-laptop ~/server $ java -Djava.rmi.server.codebase="http://localhost:8080" WarehouseServer

Die RMI-registry ist keine Kontaktaufnahme mit dem HTTP-server und wirft eine Ausnahme (siehe details nach der Frage).
Aber wenn ich den folgenden

1) Starten Sie die rmi registry mit dem java.rmi.server.codebase-Eigenschaft

motta@motta-laptop ~/tmp $ rmiregistry -J-Djava.rmi.server.codebase="http://localhost:8080/"

2) Starten Sie die HTTP-server wie vor

3) Starten Sie den server ohne die option

motta@motta-laptop ~/server $ java WarehouseServer

es funktioniert, aber warum? Es scheint, dass mit dem ersten Verfahren wird die RMI-registry ist das ignorieren der java.rmi.server.codebase-Eigenschaft

Danke

=================================

Ich bin mit

java version "1.7.0_21"
Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 23.21-b01, mixed mode)

Ausnahme von der RMI-registry

Constructing server implementation...
Binding server implementation to registry...
Exception in thread "main" java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: Warehouse
at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:419)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
at sun.rmi.transport.Transport$1.run(Transport.java:177)
at sun.rmi.transport.Transport$1.run(Transport.java:174)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:173)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:553)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:808)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:667)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:273)
at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:251)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:377)
at sun.rmi.registry.RegistryImpl_Stub.bind(Unknown Source)
at WarehouseServer.main(WarehouseServer.java:14)
  • Sehr seltsam. Können Sie es alle versuchen wieder ohne die Anführungszeichen um den codebase-URL?
  • Hallo EJP, ich habe versucht ohne Anführungszeichen und das Verhalten ist das gleiche
  • Ich bin noch auf Arbeit und Es sieht wirklich aus wie ein bug. Die oben genannten Problem tritt auf in meinem Linux Mint VM, während, wenn ich den genau gleiche code (und-Konfiguration) auf meinem Windows-Rechner geht alles in Ordnung.
  • Ich bestätige, dass die in Windows brauche ich nicht zu passieren, die Codebasis argument der rmiregistry, während in Linux Mint, ich brauche es, ich nahm alles und einrichten eines repository auf das Beispiel und die Anweisungen, um es auszuführen github.com/mottalrd/RMITutorial (Lager v1-Projekte)
  • Ist es möglich, dass in Linux haben Sie eine CLASSPATH-Umgebungsvariable, die gesetzt ist, wenn Sie starten Sie die Registry und Punkte, um Ihre server-code?
  • Ich habe überprüft, der classpath ist leer. Ich begann, die RMI registry, beide aus der Konsole und mit dem eclipse-externe Werkzeuge-Befehl (Bereitstellung als Arbeitsverzeichnis ein Verzeichnis ohne Projekt zugehörigen Klassen). Das Verhalten ist das selbe :/

InformationsquelleAutor mottalrd | 2013-05-27
Schreibe einen Kommentar