当前位置: 首页 > 知识库问答 >
问题:

使用 ProcessBuilder 时,客户端无法与 RMI 注册表连接

柯波峻
2023-03-14

如果我从命令行创建RMI注册表,则客户端将对象绑定到注册表没有问题。

但是,如果我使用ProcessBuilder启动RMI注册表,它会出错。

这是我使用ProcessBuilder创建rmiregistry的代码

ProcessBuilder obj = new ProcessBuilder ("rmiregistry","2500");

Process obj_process = obj.start();

当我尝试绑定到我自己的RMI注册表时,我因使用ProcessBuilder而遇到的错误

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: node_func

node_func是一个接口

有什么想法吗?

共有2个答案

齐凯康
2023-03-14

出现异常是因为rmiregistry应用程序不知道从哪里加载类。当您试图在RMI注册表中绑定一个对象时,注册表会下载该对象的类定义。

处理此问题的正确方法是设置 java.rmi.server.codebase 属性

(右键单击您的项目-

该属性要求目录路径以正斜杠终止,如下所示:

-Djava.rmi.server.codebase=file:${workspace_location}/folder/

如果 ${workspace_location} 变量是相对路径,并且 rmiregistry 应用程序未在同一目录中启动,因此相对路径不正确,则也可能遇到问题。如果使路径成为绝对路径,或者在相应的目录中启动 rmiregistry,则 ClassNotFoundException 应该会消失。有关更详细的信息,请参阅有关 java.rmi.server.codebase 属性的教程。

希望有帮助。

归功于这个家伙

湛宏旷
2023-03-14

我不明白为什么在可以使用LocateRegistry.createRegistry()时要启动一个单独的进程。如果你这样做了,这个问题也会消失。

 类似资料:
  • 问题内容: 我一直在将RMI用于当前正在处理的项目,并且希望将多个主机绑定到单个RMI注册表。 但是,当我尝试这样做时,我收到一条错误消息: java.rmi.AccessException:不允许Registry.Registry.bind;origin / 192.168.0.9是非本地主机 我这样做是在谷歌上进行的,似乎RMI默认情况下会阻止远程主机进行绑定,我想知道是否有某种方法可以覆盖或

  • 我写了一个简单的RMI应用程序。我发现客户端在获得RMI-Registry后可以成功执行Registry.unbind()方法。在我看来,这是一种安全风险。为什么允许客户端在远程注册表中取消绑定名称?一个邪恶的人可以通过修改代码来做到这一点,而我的所有其他客户端都无法连接到我的服务器,因为绑定已被删除。 是否有可能在Java策略中否认这一点?

  • 我有一个工作中的Eureka注册表,其中注册了许多Spring-Boot应用程序。我知道这是有效的,因为他们能够找到对方,并通过尤里卡注册中心进行交流。 当我启动我的新SBA应用程序时,我可以看到它自己在Eureka注册表中注册,所以它正在查找Eureka。然而,当我打开SBA UI时,它是空的,只是说“没有应用程序注册。”在我的控制台上,我可以一遍又一遍地看到下面的堆栈跟踪。

  • Spring启动管理版本:2.0.4 我试图支持LDAP安全性来登录到Spring Boot Admin,但也支持注册到SPA服务器的客户端的基本身份验证。在LDAP完全关闭的情况下,我无法让客户端向服务器注册。 我犯的错误 将应用程序注册为Application失败(name=spall-boot-Application, Management ementUrl=... 服务器applicati

  • 我正在根据文件进行开发:https://codecentric.github.io/spring-boot-admin/2.0.2,但我没有在安全应用程序中注册客户端。 我的配置是: 应用yml 网络安全配置 错误正在发生: 有人能帮我做这件事吗? 更新日期2018-09-01: 我尝试了不同的配置,但出现了相同的错误: 客户端:

  • 我正在尝试连接到MBean服务器。我需要编写JMX客户端应用程序。这是用于客户端应用程序的代码。但我有一个例外 检索RMIServer存根失败:javax.naming.ServiceUnavailableException[根异常为java.rmi.ConnectException:连接拒绝主机:localhost;嵌套异常为: 谁能帮我把这个修好。 我使用以下参数运行了这段代码。 dcom.s