如何告诉rmiregistry在哪里寻找课程?

时间:2016-08-26 14:45:19

标签: java rmi rmiregistry

registry

Oracle says

  

引导程序命名服务,由同一主机上的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());
    }
}

和人类:

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

rmiregistryrmiregistry &开头。然而,当我运行代码时,它抱怨在执行bind时无法解组参数,因为无法找到类Person

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

1 个答案:

答案 0 :(得分:0)

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

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

我承认根据Oracle documentation这不是一个好习惯,它告诉你从rmiregistry中删除CLASSPATH。但是,既然你从localhost获取代码,那么最好不要让它运行起来。