0

我是 RMI/JAVA 新手,正在使用 Oracle 网站 http://docs.oracle.com/javase/tutorial/rmi/client.html上的 rmi 教程

我能够跟踪整个事情,直到它来到 Client.pi 类。第一行是导入任务接口 import compute.Task 的代码

我的问题是,Java 怎么知道从哪里获取任务接口?它是服务器上的非远程接口,所以我对如何导入它有点困惑。

4

2 回答 2

0

您将提供任务接口以及远程接口(计算)作为客户端 API jar 的一部分。

通常,在设计任何类型的 RMI 服务器系统时,您最终会得到 2 个模块,即服务器 API 和服务器实现(这将取决于 API)。然后,您将向正在为您的服务器构建 RMI 客户端的任何人提供服务器 API jar。

于 2012-08-28T16:26:44.393 回答
0

Task接口对客户端和服务器代码都是通用的,因此客户端和服务器中都需要有副本。

Pi实施需要对Task客户可用。理想情况下,服务器不应该知道客户端的任务,所以不应该有自己的副本。因此,客户端上的 RMI 使用可以加载代码的 URL 来注释对象流中的类。服务器使用这个注解来动态加载实现类,这个实现类可能是在服务器实例启动后编写的。

虽然这是一个巧妙的聚会技巧,但要安全地加载远程代码可能会很棘手。设置java.rmi.server.useCodebaseOnlytrue禁用该功能,我强烈推荐。

于 2012-08-28T16:31:08.510 回答