Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第4章 アプリケーションの開発(C言語) | > 4.2 クライアントアプリケーションのプログラミング(動的起動インタフェース) |
インタフェースリポジトリには、IDLで定義されたモジュール名、インタフェース名、オペレーション名、パラメタが階層構造で格納されます。サーバアプリケーションの情報を獲得するため、以下の手順で検索を行います。
インタフェースリポジトリからサーバアプリケーションの情報を獲得するためには、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);
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 );
CORBA_OperationDef_describe()により、サーバアプリケーションがもっているメソッドのパラメタの情報(パラメタの名前、個数、パラメタの型等)をインタフェースリポジトリから検索します。パラメタとして、OperationDefオブジェクトリファレンスを指定します。
/* OperationDefオブジェクトが保持しているパラメタ情報の構造体 */ CORBA_Contained_Description *description; /* パラメタ情報の構造体の取得 */ description = CORBA_OperationDef_describe( intf_opr->_buffer[0], &env );
目次
索引
![]() ![]() |