我已成为以下Java RMI错误的受害者,如JDK 7发行说明中所述:
当RMI服务器尝试使用“file:”URL方案绑定包含代码库注释的导出对象时,此版本中包含的rmiregistry命令中的错误可能会导致意外异常被抛出。最可能受影响的RMI服务器是仅由与服务器在同一主机上执行的RMI客户端调用的服务器。
RMI将代码库信息注释为远程对象引用的序列化状态的一部分,以帮助RMI客户端在运行时加载与该对象关联的所需类和接口。在RMI注册表中查找并由在服务器以外的主机上运行的RMI客户端调用的导出对象通常使用代码库URL方案进行注释,例如“http:”或“ftp:”,这些应该继续正常工作。 / p>
作为一种变通方法,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:/'语法,我怎样才能实现相同的目标?在我的情况下,错误的有效解决方法是什么?
答案 0 :(得分:0)
如果文件URL方案存在错误(我猜您验证了语法是例如 - file:///home/user/myprojects/myjar.jar
)
我猜你没有其他选择,只能解决开放JDK中的问题,或者将文件放在apache webserver(或者tomcat)中,并使用带有“http://”前缀的URI。
这样的tomcat或apache的部署非常简单,因为你在这里处理静态资源。
根据我的记忆,在我查看here之后,我认为没有别的选择,只能像代码那样为代码库提供一系列URI。
另一种选择是简单地为这个罐子提供RMI客户端代码。