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