使用 RMI 时在注册表中绑定时出错



我用RMI写了一个简单的程序。当我想将服务绑定到注册表时,它会抛出以下异常:

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

同样在 RMI VM 属性中,值为 java.rmi.server.codebase ,我使用生成此 2 URL 的类路径计算按钮:

file:${workspace_loc:/rmiServer/bin} ( server)
file:${workspace_loc:/rmiInterface/bin} ( interface)

我使用java-open jdk64 && JRE system library [JavaSE-1.6] &&从这个网站安装eclipse插件

找不到任何好的解决方案来解决我的问题,有人可以帮助我吗?

我记得我在某处读到(看起来像这里:http://docs.oracle.com/javase/6/docs/technotes/guides/rmi/codebase.html,第 6.0 节),如果您在 java.rmi.server.codebase 中使用目录,则需要以尾部斜杠结束它。

另一方面,使用类路径运行独立的 RMI 注册表是微不足道的:您需要设置 CLASSPATH env 变量,然后在 shell 中运行 rmiregistry。即使启动服务器时没有指定java.rmi.server.codebase,也为我工作。

顺便说一句。如果你需要一些java.rmi.server.codebase接受的文件:URL格式的例子,你可以在这里找到一些:http://docs.oracle.com/javase/tutorial/rmi/running.html

注册表在其类路径上没有可用的命名类。一般来说,有三种解决方案:

  1. 弄清楚如何使用 CLASSPATH 参数运行rmiregistry,或者
  2. 通过
  3. LocateRegistry.createRegistry().在服务器 JVM 中运行它
  4. 使用代码库功能。

您正在尝试使用代码库功能,但具有file: URL。除非注册表和客户端都可以使用这些file: URL,否则这将不起作用,只有当它们引用 LAN 中的共享驱动器时,才会发生这种情况,在这种情况下,您根本不需要代码库功能。使用httpftp URL,并让它们引用 JAR 文件,而不是目录。

相关内容

最新更新