7.9 リクエストの処理
リクエストには,ターゲットのオジェクトのオブジェクトIDと,ターゲットのオブジェクトリファレンスを作成したPOAが含まれます。クライアントがリクエストを送信すると,VisiBroker ORBはまず適切なサーバを探すか,必要ならサーバを起動します。それからVisiBroker ORBはそのサーバ内の適切なPOAを探します。
VisiBroker ORBは適切なPOAを見つけると,リクエストをそのPOAに渡します。その時点でリクエストがどのように処理されるかは,POAのポリシーとオブジェクトの活性化状態によって異なります。オブジェクト活性化状態については,「7.4 オブジェクトの活性化」を参照してください。
-
C++でPOAにServantRetentionPolicy::RETAINが設定してあれば,またはJavaでPOAにServantRetentionPolicy.RETAINが設定してあれば,POAはアクティブオブジェクトマップを見て,リクエストに指定されたオブジェクトIDに対応するサーバントを探します。サーバントが存在するなら,POAはサーバントの適切なメソッドを呼び出します。
-
C++でPOAにServantRetentionPolicy::NON_RETAINまたはServantRetentionPolicy::RETAINが設定してあるか,JavaでPOAにServantRetentionPolicy.NON_RETAINまたはServantRetentionPolicy.RETAINが設定してある状態で,適切なサーバントが見つからない場合は,次のような結果になります。
-
POAにRequestProcessingPolicy::USE_DEFAULT_SERVANT(C++),またはRequestProcessingPolicy.USE_DEFAULT_SERVANT(Java)が設定してあれば,POAはデフォルトサーバントの適切なメソッドを呼び出します。
-
POAにRequestProcessingPolicy::USE_SERVANT_MANAGER(C++),またはRequestProcessingPolicy.USE_SERVANT_MANAGER(Java)が設定してあれば,POAはサーバントマネージャのincarnateまたはpreinvokeを呼び出します。
-
POAにRequestProcessingPolicy::USE_OBJECT_MAP_ONLY(C++),またはRequestProcessingPolicy.USE_OBJECT_MAP_ONLY(Java)を設定してあれば,例外が発生します。
-
サーバントマネージャが呼び出されたが,オブジェクトをインカネートできない場合には,サーバントマネージャがForwardRequest例外を発生させることができます。