ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(CORBAサービス編)
Interstage

8.3.4 インタフェースリポジトリからサーバアプリケーション情報の獲得

インタフェースリポジトリには、IDLで定義されたモジュール名、インタフェース名、オペレーション名、およびパラメタが階層構造で格納されます。サーバアプリケーションの情報を獲得するため、以下の手順で検索します。


(1)InterfaceDefオブジェクトリファレンスの獲得

インタフェースリポジトリからサーバアプリケーションの情報を獲得するためには、InterfaceDefオブジェクトのオブジェクトリファレンスが必要です。そのため、サーバアプリケーションのオブジェクト名をパラメタとして、ネーミングサービスからサーバアプリケーションのオブジェクトリファレンスを求め、その後、CORBA::Object::_get_interface()によりInterfaceDefオブジェクトリファレンスを獲得します。

// InterfaceDefオブジェクトリファレンス取得
CORBA::InterfaceDef_ptr  intf = obj->_get_interface( env );

(2)OperationDefオブジェクトリファレンスの獲得

CORBA::InterfaceDef::lookup_name()により、インタフェースリポジトリから指定されたメソッドを検索します。パラメタとしてサーバアプリケーションのメソッド名を指定します。結果として、指定したメソッド情報が格納されたOperationDefオブジェクトのオブジェクトリファレンスが返されます。

// メソッドのOperationDefオブジェクトリファレンス取得
CORBA::ContainedSeq_ptr intf_opr =  intf->lookup_name(
    "calculate",           // メソッド名
    -1, 
    CORBA::dk_Operation,  // Operation情報の取得
    CORBA_FALSE, 
    env );

// OperationDefクラスへの変換
CORBA::OperationDef_ptr OperationDef_obj
    = CORBA::OperationDef::_narrow((*intf_opr)[0]);

(3)パラメタ情報の獲得

CORBA::OperationDef::describe()により、サーバアプリケーションがもっているメソッドのパラメタの情報(パラメタの名前、個数、パラメタの型など)をインタフェースリポジトリから検索します。パラメタとして、OperationDefオブジェクトリファレンスを指定します。

// 指定されたメソッドのパラメタ情報を検索
CORBA::Contained::Description  *description 
    = OperationDef_obj->describe( env );