gpt4 book ai didi

java - 如何设置 rmiregistry 使用的类路径?

转载 作者:太空狗 更新时间:2023-10-29 22:56:10 27 4
gpt4 key购买 nike

我正在尝试制作一个 Java RMI 客户端/服务器应用程序。我在启动我的应用程序的服务器端时遇到问题,因为当我尝试启动应用程序。

我从这里的简单教程开始:http://docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html .按照这些说明进行操作后,它最初抛出 ClassNotFoundException 并提示找不到“example.hello.Hello”。我能够通过在教程中从 destDir 目录启动 rmiregistry 来解决这个问题,因为 rmiregistry 显然将其初始起始目录用作其类路径的一部分。

在那之后我开始使用我的其他测试应用程序,在我开始在我的服务器类中使用第三方 jar 文件之前我一直很好。现在,如果我的服务器类引用任何 jar 文件中的任何内容,Registry.bind() 将抛出 ClassNotFoundException,因为 rmiregistry 应用程序不知道这些 jar 文件。

据我所知,rmiregistry 不接受任何类型的类路径启动参数,所以我想知道如何告诉它我希望它确认的类路径。根据这里的教程:http://docs.oracle.com/javase/tutorial/rmi/running.html , "您必须确保您将在其中运行 rmiregistry 的 shell 或窗口具有 no CLASSPATH 环境变量设置或具有不包含路径的 CLASSPATH 环境变量到您想要下载到远程对象客户端的任何类。”这听起来与我需要的相反……还是我读错了?有没有人成功启动使用第三方 jar(在我的例子中是 commons-io、commons-logging 和 rmiio)的 RMI 客户端/服务器?

顺便说一下,这是在 Windows 上。


更新我找到了解决方法。请参阅下面我的回答。

最佳答案

有关取消设置 CLASSPATH 的说明仅在您使用 RMI 代码库功能时适用,因为有关下载类的神秘说明旨在暗示。

如果您不使用代码库功能,只需:

  1. 在启动前根据需要设置 CLASSPATH 环境变量 rmiregistry,如此处其他地方所示,或
  2. 开始rmiregistry-J-Djava.class.path=...
  3. 使用LocateRegistry.createRegistry(). 在服务器JVM 中启动注册表。从许多方面来说,这是最好的解决方案,因为它与 JVM 同生共死,共享其类路径,并且顺便也符合代码库功能的要求。

如果做(3),必须将返回值存入静态变量,防止被垃圾回收,导致registry无法导出,导致远程对象的DGC,从而导致它被 GC,这将导致监听线程退出,这可能导致整个 JVM 退出。

关于java - 如何设置 rmiregistry 使用的类路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9440619/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com