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

时间:2014-01-16 18:50:10

标签: java eclipse 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的classpath按钮:

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

我使用java-open jdk64&& JRE系统库[JavaSE-1.6]&&从this site

安装eclipse插件

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

2 个答案:

答案 0 :(得分:1)

我记得我在某处读过(看起来像这里: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 :(得分:0)

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

  1. 了解如何使用CLASSPATH参数或
  2. 运行rmiregistry
  3. 通过LocateRegistry.createRegistry().
  4. 在服务器JVM中运行它
  5. 使用代码库功能。
  6. 您正在尝试使用代码库功能,但使用file:个网址。除非注册表和客户端都可以使用这些file: URL,否则这将无法工作,只有在他们引用LAN中的共享驱动器时才会出现这种情况,在这种情况下,您并不真正需要代码库功能真的。使用httpftp网址,让它们引用JAR文件,而不是目录。