【发布时间】:2012-10-20 12:19:26
【问题描述】:
如 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());
如果没有 'file:/' 语法,我怎样才能达到同样的效果?在我的情况下,针对该错误的有效解决方法是什么?
【问题讨论】:
-
我不明白你为什么需要它。 file:// 方案仅在 localhost 中有效,并且在 localhost 中您无论如何都没有任何代码部署问题。只需使用 CLASSPATH。
标签: java filesystems rmi