Java RMI 注册表找不到服务器对象
Java RMI registry can't find server object
所以,问题是我有一些服务器代码允许客户端使用 rmiregistry 调用其上的函数。应该注意的是,我在 OS X 终端上 运行 执行这些命令,并且我有两个正在其中工作的文件夹:
RMI
- 这将调用 rmiregistry 和
Server
- 里面有我所有的服务器代码
所以,我打开一个终端并输入:
rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/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 找不到服务器对象。
一些指导将不胜感激
那不是真正的 HTTP URL。这是一个目录名,前面有 http:
。您需要使用真正的 http:
URL 和真正的 HTTP 服务器。或者 FTP.
您可以使用 file:
URL,但您或多或少会被困在单个主机中,在这种情况下您实际上根本不需要代码库功能。如果您确实使用 file:
URL,它必须对注册表和客户端是可理解的,这再次意味着它们要么都在同一主机中,要么它命名了注册表的共享目录客户可以看到。
注意不要将代码库指定给注册表(或客户端,除非它导出远程(回调)对象):仅指定给服务器 JVM
所以,问题是我有一些服务器代码允许客户端使用 rmiregistry 调用其上的函数。应该注意的是,我在 OS X 终端上 运行 执行这些命令,并且我有两个正在其中工作的文件夹:
RMI
- 这将调用 rmiregistry 和
Server
- 里面有我所有的服务器代码
所以,我打开一个终端并输入:
rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/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 找不到服务器对象。
一些指导将不胜感激
那不是真正的 HTTP URL。这是一个目录名,前面有 http:
。您需要使用真正的 http:
URL 和真正的 HTTP 服务器。或者 FTP.
您可以使用 file:
URL,但您或多或少会被困在单个主机中,在这种情况下您实际上根本不需要代码库功能。如果您确实使用 file:
URL,它必须对注册表和客户端是可理解的,这再次意味着它们要么都在同一主机中,要么它命名了注册表的共享目录客户可以看到。
注意不要将代码库指定给注册表(或客户端,除非它导出远程(回调)对象):仅指定给服务器 JVM