据我了解,一旦我在两个系统之间建立了 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()”方法调用来实际创建远程调用?