如何告诉rmiregistry在哪里查找类



Oracle说registry

一个引导命名服务,由同一主机上的RMI服务器使用,将远程对象绑定到名称

现在,我有这样一个服务器,使用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找不到类文件,但我不明白为什么。这是告诉它在哪里可以找到要绑定的类的正确方法吗?

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

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

我承认根据Oracle文档这不是一个好的做法,它告诉从rmiregistry中删除CLASSPATH。但是,由于您正在从本地主机获取代码,因此总比不让它工作要好。

相关内容

  • 没有找到相关文章

最新更新