1

動的プロキシ スタブの実装が実際に舞台裏でどのように行われているかを理解したいと思います。私が読んだところによると、事前に生成されたスタブ クラスが見つからない場合、リモート オブジェクトがエクスポートされるまでに、RMI ランタイムはスタブとして機能する動的プロキシを生成します。そのスタブは RMI レジストリにバインドされ、後で RMI クライアントからアクセスできます。

問題は、スタブは実際には動的に生成されたプロキシであるため、そのクラス定義はクライアント側では利用できないのに、なぜクライアントは RMI レジストリからスタブを取得できるのでしょうか? バックグラウンドである種の動的なクラスローディングが行われているのでしょうか、それとも RMI はこれを回避するために別の手法を使用していますか?

4

2 に答える 2

2

Java.lang.reflect.Proxy はシリアライズ可能であり、ObjectOutputStream および ObjectInputStream で特別にサポートされています。基本的に、実装されたインターフェースと呼び出しハンドラーだけがシリアライズされ、デシリアライズ中にそれから新しい動的プロキシが構築されます。

于 2010-11-19T11:34:49.020 に答える
-2

RMIは動的クラスロードを使用します-クラスパスは、クライアントがクラスをロードする「クラスパスアノテーション」として呼び出しとともに送信されます。詳細については、RMIの実装を参照してください。JDKソースの一部として入手できます。具体的には、クラスObjectOutputStreamおよびRMIClassloader。

更新:RMIはHTTPサーバーを起動しません-実際、これにはカスタムソリューションが必要になります。あなたが言及するそれらの1つはあなたが実行するHTTPサーバーであり、サーバーを通してクラスを利用可能にし、そしてあなたのクライアントがそれらをダウンロードできるようにあなたのスタブでHTTPサーバーのアドレス/ポートでコードベースを渡します。

于 2009-03-31T16:19:26.460 に答える