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

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

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


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

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

CORBA_Object           obj;   /* サーバアプリケーションのオブジェクトリファレンス */
CosNaming_Name         name;  /* 検索したい情報格納域 */
CORBA_InterfaceDef     intf;  /* InterfaceDefオブジェクトリファレンス */

name._length = name._maximum = 1;          /* オブジェクト名の数 */
name._buffer = &name_component;            /* オブジェクト名格納域 */
name_component.id = "ODdemo::calculator";  /* オブジェクト名 */
name_component.kind = "";                  /* オブジェクトのタイプ */

/* サーバアプリケーションのオブジェクトリファレンスを獲得 */
obj = CosNaming_NamingContext_resolve (
        cos_naming,
        &name, 
        &env ); 

/* InterfaceDefオブジェクトリファレンス取得 */
intf = CORBA_Object_get_interface(obj, &env);

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

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

CORBA_ContainedSeq    *intf_opr; 

/* メソッドのOperationDefオブジェクトリファレンス取得 */
intf_opr = CORBA_InterfaceDef_lookup_name(
            intf, 
            "calculate",
            -1, 
            CORBA_dk_Operation,    /* Operation情報の取得 */
            CORBA_FALSE, 
            &env );

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

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

/* OperationDefオブジェクトが保持しているパラメタ情報の構造体 */
CORBA_Contained_Description    *description; 

/* パラメタ情報の構造体の取得 */
description = CORBA_OperationDef_describe( intf_opr->_buffer[0], &env );