rmi示例compute.task

时间:2012-08-28 16:03:05

标签: java oracle rmi

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

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

我的问题是,Java如何知道从何处获取任务接口?它是服务器上的非远程接口,因此我对如何导入它感到困惑。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

虽然这是一个整洁的派对技巧,但加载远程代码可能很难安全地完成。将java.rmi.server.useCodebaseOnly设置为true会禁用该功能,我强烈建议您这样做。