11.1.3.1 C++におけるスケルトンからの継承例
以下は、次のIDLを想定したC++の例です:
interface Hospital{ … };
idlコマンドによって生成されたスケルトンには、次のように、ユーザー記述クラスの継承元である「スケルトン」クラスPOA_Hospitalが包含されます:
class Hospital_i : public POA_Hospital { ... };
サーバーでは、スケルトン・クラスはTPフレームワーク・クラスTobj_ServantBaseから継承します。これがさらに、定義済のPortableServer::ServantBaseから継承しています。
共同クライアント/サーバーのコールバック・オブジェクトの実装における継承ツリーは、サーバーにおけるものとは異なります。スケルトン・クラスはTPフレームワーク・クラスTobj_ServantBaseからは継承しませんが、直接PortableServer::ServantBaseから継承します。この振る舞いは、idlコマンドで-Pオプションを指定することによって行われます。
サーバーントの継承ツリーにTobj_ServantBaseクラスがないということは、そのサーバーントにactivate_objectメソッドとdeactivate_objectメソッドがないことを意味します。サーバーでは、これらのメソッドはTPフレームワークによって呼び出され、サーバントに対してあるメソッドを呼び出す前に、そのサーバントの状態を動的に初期化して保存します。コールバックをサポートするクライアントの場合は、明示的にサーバントを作成し、サーバントの状態を初期化するコードを記述する必要があります。
親トピック: スケルトンからのサーバントの継承