0

RMI で 1 つのことがわかりません。実際には少し混乱しています。

クライアント側にはビジネス インターフェイス (Hello.class)、クライアント コード (HelloClient.class)、およびリモート スタブ (おそらく Hello_stub.class) があり、サーバー側にはサーバー コード (HelloImpl.class) があります。インターフェイス (Hello.class) とスケルトン。

Java 5 以降では、スタブを作成しませんが、それでも c=in picture であると私は信じています。

では、コミュニケーションはどのように行われるのでしょうか。

クライアントは Hello.class のメソッドを呼び出し、次にすべての n/w 操作に対して Hello_stub.class を呼び出します。Hello_stub.class は、Hello.class を呼び出してから HelloImpl.class のメソッドを呼び出すスケルトンを呼び出しますか?

Head first EJB を読んだ後、少し混乱しています:)。誰かがそれを明確にしてくれたらうれしいです。

4

1 に答える 1

2

スタブのメソッドが呼び出されると:

  1. クライアント接続プールからターゲットへの TCP 接続を取得するか、プールされた接続がない場合は接続を作成します。

  2. 呼び出しと引数をシリアライズ可能なオブジェクトにまとめます。

  3. オブジェクトを、JRMP プロトコル ヘッダーやリモート objectID などの他の要素と共に接続に書き込みます。

  4. 接続から応答オブジェクトを読み取ります。

  5. プールへの接続を返します。プールでは、一定のアイドル時間が経過すると閉じられます。

  6. 応答オブジェクトが例外の場合は、それをスローします。

  7. それ以外の場合は、メソッドの結果として応答オブジェクトを返します。

サーバーでは、スレッドがリッスン ソケットに配置され、接続を受け入れ、スレッドを作成し、指定されたオブジェクト ID を介して正しいリモート オブジェクトに着信リモート呼び出しをディスパッチします。

これはリフレクションによって行われます。RMI スケルトンは 1998 年以降使用されていませんが、意図的に で生成されたスタブの場合を除きますrmic -v1.1が、どちらの方法でも原理は同じです。

于 2012-10-18T20:48:04.073 に答える