使用代码库时无法启动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。git代码库= " file:/D://nnCloud//nnCloudRESTService/目标/类文件:/D:/git/nnCloud//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

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

正确的解决方案是运行每个使用适当的java.rmi.server.codebase参数导出和绑定远程对象的JVM。

在放置locaterregistry . createrregistry

之后从代码运行rmiregistry没有问题

最新更新