2016-10-23 2 views
0
CalculationServerRegistrationService server = new CalculationServerRegistrationService(); 
    ICalculationServerRegistrationService stub = (ICalculationServerRegistrationService) UnicastRemoteObject.exportObject(server, RMI_PORT); 
    // Bind the remote object's stub in the registry 
    Registry registry = LocateRegistry.getRegistry(); 
    registry.bind("ICalculationServerRegistrationService", stub); 
    new RMIServerTimeoutChecker().run(); 
} 

Wenn ich rmiregistry Befehl auf der gleichen Maschine zu starten, ohne Argumente, aber innen D starten:/git/nnCloud/BE/nnCloudRESTService/target/Klassen-Ordner, funktioniert alles einwandfrei. Da ich jedoch zwei Server aus verschiedenen Programmen benötige, möchte ich eine einfache Registrierung mit zwei Codebasen haben, daher muss diese explizit angegeben werden, anstatt zwei "rmiregistry" -Befehle in verschiedenen Verzeichnissen auszuführen.kann nicht rmi-Server, wenn Code-Basis verwendet

Die einzige Lösung, die ich sehe, ist

rmiregistry -J-Djava.rmi.server.codebase = "Datei auszuführen:/D:/git/nnCloud/BE/nnCloudRESTService/target/Klassen-Datei:/D:/git/nnCloud/BE/nnCloudRESTService/target/classes "

Danach stürzt meine App bei registry.bind ab.

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: com.mycompany.nncloudrestservice.serverservice.ICalculationServerRegistrationService 
+0

Sie einen ClassNotFoundException bekommen; Das bedeutet höchstwahrscheinlich, dass in einem Ihrer Setups der ** Klassenpfad ** nicht so ist, wie er sein sollte. – GhostCat

Antwort

0

Die Codebasis teilt der aktuellen JVM nicht mit, wo Klassen zu finden sind. Der CLASSPATH macht das. Die Codebasis teilt den nachgeschalteten JVMs mit, wo die Klassen zu finden sind.

Die korrekte Lösung hier ist, jede JVM auszuführen, die Remote-Objekte mit dem entsprechenden java.rmi.server.codebase-Argument exportiert und bindet. Nicht die Registrierung.

+0

Einstellung -Djava.rmi.server.codebase für jvm funktioniert auch nicht. – 0x6B6F77616C74

+0

Einstellung für die Server-JVM? Funktioniert bei mir. – EJP

0

Es gibt kein Problem, nachdem sie von Code ausgeführt rmiregistry ist, nach LocateRegistry.createRegistry Platzierung

Verwandte Themen