【发布时间】:2009-04-21 22:01:16
【问题描述】:
据我了解,一旦我在两个系统之间建立了 RMI 通信链接,我就可以将一个实现“远程”的对象传递给一个远程方法,该方法采用该类型的对象和远端只会获得新对象的远程接口(换句话说,它将成为一个新的远程连接,而不是仅仅序列化对象。)
这是正确的吗?
如果是这样,我认为这与方法签名有关——但我想确切地知道它如何确定它应该创建一个新的远程对象,而不是简单地序列化整个对象。
这真的很难用语言表达。让我试试这个:
假设我有一个客户端和一个服务器系统。在服务器系统上我创建并发布一个 RMI 对象,在客户端系统上我检索接口并可以与服务器系统交互。
Client Server
Object1 RemoteIface ---- Object1 Implementation
到目前为止一切顺利。在客户端,Object1.remoteMethod() 将在服务器上执行(在对参数进行序列化之后)。
现在问题来了,我在客户端执行如下代码:
Object2 object2=new object2(); // Also a remote object
object1.send(object2);
据我了解,到那时,我的系统将有一个新的通信机制:
Client Server
Object1 RemoteIface ----- Object1 Implementation
Object2 Implementation ----- Object2 RemoteIface
此时,如果服务器调用Object2上的一个方法,该方法实际上会在客户端执行。
我想知道系统在什么时候决定这样做,而不是仅仅序列化它(就像任何非远程对象一样)。
或者我完全错了,它只是将它序列化,我需要某种“getRemoteInterface()”方法调用来实际创建远程调用?
【问题讨论】: