私が理解しているように、2つのシステム間にRMI通信リンクを設定すると、「リモート」を実装するオブジェクトを、そのタイプのオブジェクトを取得するリモートメソッドの1つに渡すことができ、遠端は取得します。新しいオブジェクトのリモートインターフェイス(つまり、オブジェクトをシリアル化するだけでなく、新しいリモート接続になります)。
これは正しいです?
もしそうなら、これはメソッドのシグネチャと関係があると思いますが、オブジェクト全体を単にシリアル化するのではなく、新しいリモートオブジェクトを作成する必要があると判断する方法を正確に知りたいと思います。
これを言葉にするのは本当に難しいです。これを試してみましょう:
クライアントとサーバーシステムがあるとしましょう。サーバーシステムでは、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()」メソッド呼び出しが必要ですか?