インタフェースリポジトリには、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 );