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
答案 0 :(得分:0)
代码库不会告诉当前JVM在哪里查找类。 CLASSPATH就是这么做的。代码库告诉下游JVM在哪里找到类。
这里正确的解决方案是运行每个JVM,使用适当的http://localhost/app/public/questions/1
参数导出和绑定远程对象。不是登记处。
答案 1 :(得分:0)
在放置LocateRegistry.createRegistry之后从代码运行rmiregistry没有问题