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());
}
}
和人类:
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
找不到类文件,但我不明白为什么。这是告诉它可以找到要绑定的类的正确方法吗?
答案 0 :(得分:0)
虽然我无法发现你的程序问题(我已经复制了它并得到了同样的错误),但我可以建议你在启动rmiregistry之前在同一进程中设置一个明确的CLASSPATH环境变量 。此类路径必须与RMI服务器进程中的相同。例如:
set CLASSPATH=my_class_directory:my_jar1:my_jar2...
rmiregistry &
我承认根据Oracle documentation这不是一个好习惯,它告诉你从rmiregistry中删除CLASSPATH
。但是,既然你从localhost获取代码,那么最好不要让它运行起来。