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