| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 第5章 アプリケーションの開発(C++言語) | > 5.3 サーバアプリケーションのプログラミング(Portable Object Adapter:POA) | > 5.3.2 POA概要 |
ServantManagerオブジェクトは、リクエスト受信時にServantオブジェクトの生成/削除や検索を可能にする機能です。ServantManagerオブジェクトの各メソッドの実装はユーザ自身で作成します。作成したServantManagerオブジェクトはPOAオブジェクトに登録しておきます。
POAオブジェクトがリクエストを受信した際、AOMにオブジェクトIDが一致するServantオブジェクトが登録されていない場合に、POAオブジェクトはServantManagerオブジェクトのメソッドを呼び出し、Servantオブジェクトの生成/削除、検索を依頼します。
ServantManagerオブジェクトは、Servantオブジェクトの生成/削除を行うServantActivatorオブジェクトと、Servantオブジェクトを検索するServantLocatorオブジェクトの2種類が存在します。POAオブジェクトは、ServerRetentionポリシがRETAINの場合はServantActivatorオブジェクトを呼び出し、NON_RETAINの場合はServantLocatorオブジェクトを呼び出します。
作成するServantActivatorクラスは、以下のようにPortableServer::ServantActivatorクラスを継承させる必要があります。また、メソッドとしてincarnate(), etherealize()を実装している必要があります。
【ServantActivatorクラスの実装形式】
class UserServantActivator : public PortableServer::ServantActivator
{
public :
PortableServer::Servant incarnate(...) {...}
void etherealize(...) {...}
};
POAオブジェクトは、Servantオブジェクトの生成を依頼する場合、ServantActivatorオブジェクトのincarnate()メソッドを呼び出し、Servantオブジェクトの削除を依頼する場合は、etherealize()メソッドを呼び出します。POAオブジェクトから渡されるパラメタは必要に応じて各メソッドの実装部で使用することができます。
PortableServer::Servant incarnate(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter,
CORBA::Environment env )
oid : リクエスト対象のオブジェクトのオブジェクトID
adapter: 呼び出し元のPOAオブジェクト void etherealize(
const PortableServer::ObjectId& oid,
PortableServer::POA_ptr adapter,
PortableServer::Servant serv,
CORBA::Boolean cleanup_in_progress,
CORBA::Boolean remaining_activations,
CORBA::Environment env );
oid : 削除対象のServantオブジェクトに対応するオブジェクトID
adapter : 呼び出し元のPOAオブジェクト
serv : 削除対象のServantオブジェクト
cleanup_in_progress : POA->destoroy()から本メソッドが呼ばれた場合にtrue
remaining_activations: 本メソッド呼出し時、常にfalseServantActivatorオブジェクトの具体的な処理の流れを以下に示します。

注) Factoryはリクエストごとにオブジェクトリファレンスやインスタンスを作成するオブジェクトであり、インスタンス管理を行う場合に必要となるオブジェクトです。
作成するServantLocatorクラスは、以下のようにPortableServer::ServantLocatorクラスを継承させる必要があります。また、メソッドとしてpreinvoke(), postinvoke()を実装している必要があります。
【ServantLocatorクラスの実装形式】
class UserServantLocator : public PortableServer::ServantLocator
{
public :
PortableServer::Servant preinvoke(...) {...}
void postinvoke(...) {...}
};
POAオブジェクトはクライアントからの要求を処理するため、毎回ServantLocatorオブジェクトのpreinvoke()メソッドを呼び出し、処理対象のServantオブジェクトを獲得します。POAオブジェクトはそのServantオブジェクトに処理を要求し、その処理が終わったら、ServantLocatorオブジェクトのpostinvoke()メソッドを呼び出し、ServantLocatorオブジェクトに後処理を依頼します。
POAオブジェクトから渡されるパラメタは必要に応じて各メソッドの実装部で使用することができます。
PortableServer::Servant preinvoke(
const PortableServer::ObjectId oid,
PortableServer::POA_ptr adapter,
CORBA::Identifier operation,
PortableServer::ServantLocator::Cookie the_cookie,
CORBA::Environment& = CORBA::Environment() ) oid : リクエスト対象のオブジェクトのオブジェクトID adapter : 呼び出し元のPOAオブジェクト operation : リクエスト対象のオペレーションの名前 the_cookie: Cookieオブジェクトを格納する
void postinvoke(
const PortableServer::ObjectId oid,
PortableServer::POA_ptr adapter,
CORBA::Identifier operation,
CORBA::Object the_cookie,
PortableServer::Servant the_servant,
CORBA::Environment& = CORBA::Environment() )
oid : リクエスト対象のオブジェクトのオブジェクトID
adapter : 呼び出し元のPOAオブジェクト
operation : リクエスト対象のオペレーションの名前
the_cookie : preinvokeで返されたCookieオブジェクト
the_servant: リクエストに対する処理を行ったServantオブジェクトServantLocatorの具体的な処理の流れを以下に示します。

目次
索引
![]()
|