インタフェースリポジトリには、IDLで定義されたモジュール名、インタフェース名、オペレーション名およびパラメタが階層構造で格納されます。サーバアプリケーションの情報を獲得するため、以下の手順で検索を行います。
(1)org.omg.CORBA.InterfaceDefオブジェクトリファレンスの獲得
インタフェースリポジトリからサーバアプリケーションの情報を獲得するためには、org.omg.CORBA.InterfaceDefオブジェクトのオブジェクトリファレンスが必要です。org.omg.CORBA.Object._get_interface_def()メソッドを使用します。
//org.omg.CORBA.InterfaceDefオブジェクトリファレンス取得 org.omg.CORBA.Object intf_obj = target._get_interface_def(); org.omg.CORBA.InterfaceDef intf = org.omg.CORBA.InterfaceDefHelper.narrow( intf_obj );
(2)org.omg.CORBA.OperationDefオブジェクトリファレンスの獲得
org.omg.CORBA.InterfaceDef.lookup_name()メソッドにより、インタフェースリポジトリから指定されたメソッドを検索します。パラメタとしてサーバアプリケーションのメソッド名を指定します。結果として、指定したメソッド情報が格納されたorg.omg.CORBA.OperationDefオブジェクトのオブジェクトリファレンスが通知されます。
//メソッドのorg.omg.CORBA.OperationDefオブジェクトリファレンス取得 String name = new String( "calcurate" ); org.omg.CORBA.Contained[] intf_opr = intf.lookup_name( name, -1, org.omg.CORBA.DefinitionKind.dk_Operation, false );
(3)パラメタ情報の獲得
org.omg.CORBA.Contained.describe()メソッドにより、サーバアプリケーションがもっているメソッドのパラメタの情報(パラメタの名前、個数、パラメタの型など)をインタフェースリポジトリから検索します。パラメタとして、org.omg.CORBA.OperationDefオブジェクトリファレンスを指定します。
org.omg.CORBA.ContainedPackage.Description desc = intf_opr[0].describe(); //指定されたメソッドのパラメタ情報を検索