gpt4 book ai didi

java - 如何告诉 rmiregistry 在哪里寻找类(class)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:18:00 25 4
gpt4 key购买 nike

Oracle says 注册表

a bootstrap naming service that is used by RMI servers on the same host to bind remote objects to names

现在,我有这样一个服务器,它使用rmiregistry来提供JNDI

public class ObjectProvider {
public static void main(String[] args) {
System.setProperty("java.rmi.server.codebase", "file:/absolute/path/to/jar/where/person/class/is/my.jar");
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.rmi.registry.RegistryContextFactory");
Context context = new InitialContext(env);
context.bind("jordan", new Person("Michael Jordan"));
Person p = (Person) context.lookup("jordan");
System.out.println("jordan = " + p.getName());
}
}

和 Person 类:

public class Person implements Remote, Serializable {
String name;
public Person(String name) { this.name = name; }
public String getName() { return name; }
}

并且rmiregistry作为rmiregistry &启动。然而,当我运行代码时,它提示在执行 bind 时无法解码参数,因为找不到 Person 类。

我知道rmiregistry找不到类文件,但我不明白为什么。这是告诉它在哪里可以找到要绑定(bind)的类的正确方法吗?

最佳答案

虽然我无法发现您的程序的问题(我已经重现了它并得到了相同的错误),但我可以建议您在启动 rmiregistry 之前在同一进程中设置显式 CLASSPATH 环境变量。该类路径必须与 RMI 服务器进程中的类路径相同。示例:

set CLASSPATH=my_class_directory:my_jar1:my_jar2...
rmiregistry &

根据Oracle documentation,我承认这不是一个好的做法。 ,它告诉我们从 rmiregistry 中删除 CLASSPATH。但是,由于您是从本地主机获取代码,所以总比不让它工作好。

关于java - 如何告诉 rmiregistry 在哪里寻找类(class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39169016/

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