7.4.2 オブジェクトのオンデマンドによる活性化
対応するサーバントを持たないオブジェクトをクライアントがリクエストすると,オンデマンドによる活性化が発生します。このリクエストの受信後,POAはオブジェクトIDに対応するアクティブなサーバントを求めてアクティブオブジェクトマップを検索します。見つからなければ,POAはオブジェクトID値をサーバントマネージャに渡すサーバントマネージャのincarnateを呼び出します。サーバントマネージャができることは次の三つがあり,どれか一つを行います。
-
適切なサーバントを見つけます。このサーバントはリクエストに対する適切なオペレーションを実行します。
-
クライアントに返されるOBJECT_NOT_EXIST例外を発生させます。
-
リクエストをほかのオブジェクトに転送します。
POAポリシーは,追加する処理を決定します。次にC++およびJavaについて説明します。
- C++の場合
-
RequestProcessingPolicy::USE_SERVANT_MANAGERとServantRetentionPolicy::RETAINが有効なら,アクティブオブジェクトマップはサーバントとオブジェクトIDの対応を更新します。
- Javaの場合
-
RequestProcessingPolicy.USE_SERVANT_MANAGERとServantRetentionPolicy.RETAINが有効なら,アクティブオブジェクトマップはサーバントとオブジェクトIDの対応を更新します。
オンデマンドによる活性化の例については,コードサンプル7-13を参照してください。