我查看了Java RMI的教程,他们建议在命令行(Windows)中手动执行上述任务。在细节,这意味着:Java RMI-自动创建/复制存根和注册表开始
设置服务器项目的路径JDK/bin文件夹
使用RMIC “ClassImplementingRemoteInterface”
启动rmiregistry的
副本存根文件到客户项目的bin文件夹
我发现,可以通过将以下代码添加到服务器的主要方法来启动注册表。
`try {
java.rmi.registry.LocateRegistry.createRegistry(PORT);
System.out.println("RMI registry ready.");
} catch (Exception e) {
System.out.println("Exception starting RMI registry:");
e.printStackTrace();
}
`
现在,我通过命令行创建了存根,并将它们复制到客户端项目的bin文件夹中。我很困惑如何自动执行此操作,因为文档建议,不再需要手动创建存根。 Oracle Documentation
那么是否有更灵活的方式来创建存根并将它们移动到客户端?
UPDATE:
要启动的注册表,并发送远程对象,只有方法“java.rmi.registry.LocateRegistry.createRegistry(端口)和” UnicastRemoteObject.exportObject中(对象,端口)是必要的。他们应在服务器的主要方法中实现:
try {
java.rmi.registry.LocateRegistry.createRegistry(1099);
Connector Hello = new Connector();
IConnector stub = (IConnector) UnicastRemoteObject.exportObject(Hello, 1099);
// System.setProperty("java.rmi.server.hostname","134.155.182.118");
Naming.rebind("rmi://localhost/ABC", Hello);
System.out.println("Addition Server is ready.");
}catch (Exception e) {
System.out.println("Addition Server failed: " + e);
}
您需要将'LocateRegistry.createRegistry()'的结果存储到一个静态变量中,以防止它被GC'd。 – EJP
您需要在执行任何RMI代码之前设置* all *系统属性。你的'java.rmi.server.hostname'不会生效。 – EJP