目次 | 前の項目 | 次の項目 | Java Remote Method Invocation |
リモートメソッドの呼び出しの際に、対象となるオブジェクトの「ライブ」参照がわからない場合は、フォルト参照は起動プロトコルを利用します。起動プロトコルは、いくつかのエンティティとかかわります。このエンティティは、フォルト参照、「アクティベータ」、「起動グループ」、および起動されているリモートオブジェクトです。アクティベータ (通常、ホストごとに 1 つ) は、起動を管理するエンティティで、次の 2 つの役割を持ちます。
アクティベータは、現在の起動識別子とアクティブなオブジェクトとのマッピング情報をキャッシュとして保持しているので、起動要求のたびに起動グループに問い合わせをする必要はありません。JVM ごとに 1 つだけ存在する起動グループは、JVM 内のオブジェクトの起動要求を受け取り、起動されたオブジェクトをアクティベータに返すエンティティです。
起動プロトコルは、次のような働きをします。まず、フォルト参照は起動識別子を使用してアクティベータ (内部 RMI インタフェース) を呼び出し、起動識別子に関連付けられたオブジェクトを起動します。次に、アクティベータはオブジェクトの「起動記述子」(前に登録したもの) を参照します。オブジェクトの記述子には、次の情報が含まれます。
該当するオブジェクトが属すべき起動グループが存在する場合は、アクティベータは起動要求をそのグループに転送します。そのような起動グループが存在しない場合は、JVM に起動グループを起動させ、その起動グループに起動要求を転送します。起動グループは、当該オブジェクトのクラスをロードし、いくつかの引数 (前に登録した起動記述子など) をとる特別なコンストラクタを使ってオブジェクトのインスタンスを生成します。
オブジェクトの起動が完了すると、起動グループは「整列化されたオブジェクト」の参照をアクティベータに返し、それを受け取ったアクティベータは、起動識別子とアクティブな参照のペアを記録して、アクティブな (ライブ) 参照をフォルト参照に返します。次に、フォルト参照 (スタブ内) は、リモートオブジェクトへの直接のライブ参照を介してメソッド呼び出しを転送します。
注 - Java 2 SDK, Standard Edition, v 1.2 の RMI では、起動システムインタフェースの実装が用意されています。起動を使用するには、事前に起動システムデーモンrmid
を動作させておく必要があります。