首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDK7u21人机界面变化

JDK7u21人机界面变化
EN

Stack Overflow用户
提问于 2013-08-21 13:16:18
回答 3查看 1.2K关注 0票数 1

JDK7u21的发行说明指定了与RMI相关的更改:

在此版本中,RMI属性java.rmi.server.useCodebaseOnly默认设置为true。在以前的版本中,默认值为false。 这种默认值的更改可能会导致基于RMI的应用程序意外中断。典型的症状是堆栈跟踪,其中包含包含嵌套java.rmi.UnmarshalException的java.lang.ClassNotFoundException。 如果出现这些异常,解决此问题的首选方法是通过在java.rmi.server.codebase系统属性中指定适当的值,将所有RMI客户端和服务器配置为使用相同的代码基。这通常是通过在启动应用程序的命令中添加-D选项来完成的: java -D

它还在文档这里中指定,解决方法是将java.rmi.server.useCodebaseOnly属性设置为false。

但是,即使我显式地将此属性设置为false,也会得到上面提到的异常。这里有线索吗?

如果我必须按照上面描述的首选方法来解决这个问题(通过设置-Djava.rmi.server.codebase=file:////(path-to-remote-classes)/,),那么我应该在这里设置哪条路径?我的工作空间/垃圾箱?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-22 12:41:03

对不起,我自己解决的。问题是,传递给我的.ksh文件的参数数量是错误的。这导致启动RMI注册表时出现问题。

票数 0
EN

Stack Overflow用户

发布于 2013-08-21 18:58:23

您必须确保在使用远程类的所有JVM上设置属性。这包括您的RMI服务器、RMI客户端、( RMI注册表)。如果它们都在同一台机器上,那么可以将它们上的java.rmi.server.codebase设置为指向类的位置的file: URL。如果它们不在同一台机器上,则可以使用HTTP使类可用,然后设置远程JVM(可能是客户端)的代码基属性,以使用指向类可用位置的http: URL。或者,您可以通过其他一些方法(例如复制这些类或使用共享文件系统)使远程JVM可以使用这些类,然后将代码基属性设置为file: URL。

您尝试将java.rmi.server.useCodebaseOnly设置为false的解决方案可能会有以下几个原因:您可能没有在所有交互JVM中设置它,或者您可能没有将代码基属性设置为正确的值。

由于您不得不在配置注册表和所有客户端时遇到麻烦,所以最好将他们的codebase属性设置为正确的URL,而不是寻求将useCodebaseOnly设置为false的解决方案。

票数 2
EN

Stack Overflow用户

发布于 2013-08-22 01:33:45

你需要:

  1. 在下载类的所有JVM(s)中将其设置为false,并确保将java.rmi.server.codebase设置为可用于发送类可能需要下载的对象的JVM,或者
  2. 不要使用它,但要确保系统中的每个JVM都是使用java.rmi.server.codebase属性启动的,该属性指向该JVM的可用代码基。

这是一个非常奇怪的变化。我没有看到任何安全含义,只是一个讨厌的改变,它改变了所有代码库接收者的语义。使用useCodebaseOnly=true,您必须在接收JVM上设置java.rmi.server.codebase,否则只需要在发送JVM时设置它。从文档中可以看出这一点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18358498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档