0

如 JDK 7 发行说明中所述,我已成为以下 Java RMI 错误的受害者:

当 RMI 服务器尝试使用“file:”URL 方案绑定包含代码库注释的导出对象时,此版本中包含的 rmiregistry 命令中的错误可能会导致引发意外异常。最有可能受到影响的 RMI 服务器是那些仅由在与服务器相同的主机上执行的 RMI 客户端调用的服务器。

RMI 将代码库信息注释为远程对象引用的序列化状态的一部分,以帮助 RMI 客户端在运行时加载与对象关联的所需类和接口。在 RMI 注册表中查找并由在服务器以外的主机上运行的 RMI 客户端调用的导出对象通常使用代码库 URL 方案进行注释,例如“http:”或“ftp:”,这些应该继续正常工作。

作为一种解决方法,RMI 服务器可以将 java.rmi.server.codebase 属性设置为对它们导出的对象使用除“file:”方案之外的代码库 URL。

(强调我的)

我正在本地机器上开发 RMI 应用程序,我需要设置代码库以包含一些库。

StringBuilder codebase = new StringBuilder();
codebase.append(" file:/").append(projectPath).append("/bin/lib/rmiio-2.0.0.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/log4j-1.2.9.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/commons-logging.jar")
        .append(" file:/").append(projectPath).append("/bin/lib/commons-logging-api.jar");
System.setProperty("java.rmi.server.codebase", codebase.toString());

如果没有“文件:/”语法,我怎样才能达到同样的效果?在我的情况下,该错误的有效解决方法是什么?

4

1 回答 1

0


如果文件 URL 方案存在错误
(我猜您验证了语法例如 - file:///home/user/myprojects/myjar.jar
我猜您除了在打开的 JDK 中修复问题或将文件放入 apache 网络服务器之外别无选择(或 tomcat)并使用带有“http://”前缀的 URI。
部署此类 tomcat 或 apache 非常简单,因为您在这里处理的是静态资源。
据我记得,在我看了这里之后,我没有看到其他选择,只能像你一样为代码库提供一个 URI 链。
另一种选择是简单地为这个 jars 提供 RMI 客户端代码。

于 2012-10-20T12:32:45.033 回答