使用Java RMI时执行的代码在哪里?

时间:2013-10-24 16:55:54

标签: java rmi rpc dynamic-class-loaders

没有任何Java RMI经验,我有一个天真的问题,但在搜索互联网后我仍然不确定答案。

问题:

对我来说,有两种情况:

场景-1 :从本地启动Java程序,在执行期间,它从存储在远程机器上的类调用方法,然后将该方法的类下载到本地机器,并继续执行。

场景-2 :从本地启动Java程序,在执行期间,它从存储在远程机器上的类调用方法,然后该方法将在远程机器上执行,并且结果将被发送回本地机器。 (这是否需要类/对象传输?

Java RMI使用哪一个?或两者都没有?

来自Wikipedia of RPC:“RPC允许计算机程序使子程序或程序在另一个地址空间(通常在共享网络上的另一台计算机上)执行”,这似乎是第二种情况。

但是根据这篇论文Reducing Data Transfer during Remote Classloading in Java RMI,它似乎是第一种情况。

2 个答案:

答案 0 :(得分:1)

使用RMI时,您基本上拥有一个在客户端和服务器之间共享的接口。服务器必须具有实现,并且客户端不应具有此实现。因此没有类加载或任何类型的客户端到服务器逻辑传输,客户端完全不知道服务器接口实现。

RMI序列化并传输方法参数,然后正在执行服务器逻辑,结果被序列化并传输回客户端。

答案 1 :(得分:0)

该方法将在远程机器上执行。为此,本地计算机下载一个包装本地计算机和远程计算机之间通信的类。