Java RMI注册表无法找到服务器对象

时间:2015-10-08 20:25:32

标签: java server rmi rmiregistry

所以,问题是我有一些服务器代码允许客户端使用rmiregistry调用它上面的函数。应该注意我在OS X终端上运行这些命令,我​​有两个文件夹,我在其中工作:

RMI - 这将称为rmiregistry和 Server - 其中包含我的所有服务器代码

所以,我打开一个终端并输入:

rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ &

一切都很顺利,我得到了一个端口。 然后,我登录到包含我的服务器代码的Server文件夹,以运行我的calculatorserver程序。 现在我被告知要指定代码库和安全策略:

java -Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ -Djava.security.policy=server.policy calculatorserver 

但是,我继续遇到同样的错误:

Server Error: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: calculator

我知道我收到此错误的唯一原因是因为rmiregistry无法找到服务器对象。

一些指导意见将不胜感激

1 个答案:

答案 0 :(得分:0)

这不是真正的HTTP网址。这是一个目录名称,http:卡在它前面。您需要使用真实的http: URL和真实的HTTP服务器。或FTP。

您可以使用file:网址,但之后您或多或少会陷入单个主机,在这种情况下,您根本不需要代码库功能。如果您使用file: URL,则必须能够理解注册表和客户端,这也意味着它们都在同一主机中,或者它命名为注册表和客户端可以看到的共享目录

NB不要将代码库指定给Registry(或客户端,除非它导出远程(回调)对象):仅指向服务器JVM