3.7.2 Tobj_ServantBaseインタフェース
Tobj_ServantBaseインタフェースは、PortableServer::RefCountServantBaseクラスから継承され、CORBAオブジェクトがスレッドセーフ方式でその状態の管理を支援できるようにする操作を定義します。IDLコンパイラによって生成されたすべての実装スケルトンは、Tobj_ServantBaseクラスを自動的に継承します。Tobj_ServantBaseクラスには、プログラマがオプションで実装できる2つの仮想メソッド(activate_object()およびdeactivate_object())が含まれます。
アクティブ化されていないCORBAオブジェクトに対するリクエストが受信されるたびに、オブジェクトがアクティブ化され、activate_object()メソッドがサーバントに対して呼び出されます。CORBAオブジェクトが非アクティブ化されると、deactivate_object()メソッドがサーバントに対して呼び出されます。非アクティブ化のタイミングは、実装のアクティブ化ポリシーによって決まります。deactivate_object()メソッドが呼び出されると、TPフレームワークは呼出しの理由を示す理由コードを渡します。
これらのメソッドは、マルチスレッド・サーバー・アプリケーションの開発をサポートします:
-
TobjServantBase::_add_ref() -
TobjServantBase::_is_reentrant() -
TobjServantBase::_remove_ref()ノート:
CORBAオブジェクトのアクティブ化と非アクティブ化に対して呼び出されることがTPフレームワークによって保証されるメソッドは、Tobj_ServantBase::activate_object()およびTobj_ServantBase::deactivate_object()のみです。サーバント・クラス・コンストラクタおよびデストラクタは、アクティブ化または非アクティブ化時に(C++のServer::create_servant呼出しを介して)呼び出される場合と呼び出されない場合があります。したがって、サーバー・アプリケーション・コードは、サーバント・クラスのコンストラクタまたはデストラクタでCORBAオブジェクトの状態処理を行ってはなりません。プログラマは、直接
Tobj_ServantBaseをキャストしたり、参照したりする必要がありません。Tobj_ServantBaseメソッドはスケルトンに含まれているので、サーバントの実装にも含まれることになります。プログラマはactivate_objectおよびdeactivate_objectメソッドを定義できますが、これらのメソッドを直接呼び出してはなりません。TPフレームワークだけがこれらのメソッドを呼び出します。