3.2.3.1 通常のケース
通常、TPフレームワークはサーバントの存続期間を完全に制御します。基本モデルでは、アクティブ化されていないオブジェクトに対するリクエストを受け取ると、TPフレームワークがサーバントを取得してから、activate_objectメソッドを呼び出してサーバントをアクティブ化します。非アクティブ化する場合、TPフレームワークはサーバントのdeactivate_objectメソッドを呼び出してから、サーバントを破棄します。
「TPフレームワークがサーバントを取得」するフェーズは、TPフレームワークが、サーバントを作成する必要がある場合に、ユーザー作成のサーバー・メソッド(Server::create_servantまたはServerBase::create_servant_with_id)を呼び出すということです。このとき、アプリケーション・コードはリクエストされたサーバントを指すポインタを返す必要があります。ほとんどの場合、アプリケーションは、サーバントの新しいインスタンスを作成するC++の「new」文を使用することで、この処理を行います。「サーバントを破棄」するフェーズは、TPフレームワークが、実際に削除するサーバントへのリファレンスを削除する、ということです。
アプリケーションでは、サーバントを作成および削除する動作が将来のバージョンの製品で変更される可能性があることを考慮しておく必要があります。アプリケーションは現在の動作に依存してはなりませんが、サーバントを再利用するサーバント・コードを記述する必要があります。具体的には、サーバント・コードは、サーバントがC++の「new」文によって作成されていない場合でも、動作しなければなりません。TPフレームワークは、サーバントが非アクティブ化されてからも削除しないで、後で再度アクティブ化することができます。つまり、サーバントは、コンストラクタでサーバントが作成されたときではなく、サーバントのactivate_objectメソッドでコールバックされたときに自身を初期化しなければならないということです。
親トピック: サーバントの存続期間