使用代码库时无法启动rmi服务器

时间:2016-10-23 12:32:17

标签: java windows rmi

    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();
}

当我在没有参数的同一台机器上启动rmiregistry命令时,但在D:/ git / nnCloud / BE / nnCloudRESTService / target / classes文件夹中,一切正常。但是,由于我需要来自不同程序的两个服务器,所以我希望单个rmiregistry有两个代码库,因此需要明确指定它而不是运行两个" rmiregistry"不同目录中的命令。

我看到的唯一解决方案是运行

   rmiregistry -J-Djava.rmi.server.codebase =" file:/ D:/ git / nnCloud / BE / nnCloudRESTService / target / classes file:/ D:/ git / nnCloud / BE / nnCloudRESTService /目标/类"

执行此操作后,我的应用程序在registry.bind崩溃。

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

2 个答案:

答案 0 :(得分:0)

代码库不会告诉当前JVM在哪里查找类。 CLASSPATH就是这么做的。代码库告诉下游JVM在哪里找到类。

这里正确的解决方案是运行每个JVM,使用适当的http://localhost/app/public/questions/1参数导出和绑定远程对象。不是登记处。

答案 1 :(得分:0)

在放置LocateRegistry.createRegistry之后从代码运行rmiregistry没有问题