Interstage Application Server アプリケーション作成ガイド (CORBAサービス編)
目次 索引 前ページ次ページ

第4章 アプリケーションの開発(C言語)> 4.2 クライアントアプリケーションのプログラミング(動的起動インタフェース)

4.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 );

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005