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

12.3.3 Contextインタフェースの使用例

Contextインタフェースを使用したデータ値の設定方法/取得方法についてのプログラム例を以下に示します。IDLは、以下のIDLを使用します。

module ODsample {
      interface contexttest {
              long    op( in long x ) 
                      context( "DATA", "DATA1", "DATA2" ); 
      };
};

注意

Portable-ORBを使用した運用を行う場合、Contextインタフェースは使用できません。


(1)C言語でのプログラミング例

クライアントプログラム

CORBA_ORB_get_default_context()で取得したContextオブジェクトに対して、CORBA_Context_set_one_value()を発行してプロパティ名とそのデータ値をContextオブジェクトに関連付けます。

CORBA_ORB                orb; 
CORBA_Environment        env; 
CORBA_Object             obj; 
CORBA_Context_ptr        context; 

      /*デフォルト・コンテキストの取得 */
      CORBA_ORB_get_default_context( orb, &context, &env ); 

      /* データ値の設定 */
      CORBA_ORB_set_one_value( context, "DATA", "data", env ); 
      CORBA_ORB_set_one_value( context, "DATA1", "data1", env ); 
      CORBA_ORB_set_one_value( context, "DATA2", "data2", env ); 

      /* Contextの送信 */
      ODsample_contexttest_op( obj, 3, context, &env );

サーバプログラム

サーバでは、CORBA_Context_get_values()を使用して、プロパティ名とそれに関連したデータ値を取得できます。このとき、検索するプロパティ名にワイルドカード(*)を使用できます。

void ODsample_contexttest_op(
     ODsample_contexttest    obj, 
     CORBA_long              x, 
     CORBA_Context           context, 
     CORBA_Environment       *env ) 
{
     CORBA_NVList      nvlist; 
     CORBA_long        len; 

     /* コンテキストに関連付けられた情報の取得 */
     CORBA_Context_get_values( context, "", 0, "DATA*", &nvlist , env ); 

     /* nvlistの解析 */
     CORBA_NVList_get_count( nvlist, &len, &env ); 
     for ( i = 0; i < len; i++ ){ 
             printf("NVList:[%s]\n", *(CORBA_string *)nvlist[i].argument._value ); 
             /* DATA, DATA1, DATA2の各データ値が表示されます。*/
     }
     ... 
}

(2)C++言語でのプログラミング例

クライアントプログラム

CORBA::ORB::get_default_context()で取得したContextオブジェクトに対して、CORBA::Context::set_one_value()を発行してプロパティ名とそのデータ値をContextオブジェクトに関連付けます。

CORBA::ORB_ptr           orb; 
CORBA::Environment       env; 
CORBA::Object_ptr        obj; 
CORBA::Context_ptr       context; 
try {
     /*デフォルト・コンテキストの取得 */
     orb->get_default_context( context, env ); 

     /* データ値の設定 */
     CORBA::Any        p1, p2, p3; 
     p1 <<= (const CORBA::Char *)"data"; 
     context->set_one_value( "DATA", p1, env ); 
     p2 <<= (const CORBA::Char *)"data1"; 
     context->set_one_value("DATA1", p2, env ); 
     p3 <<= (const CORBA::Char *)"data2"; 
     context_set_one_value( "DATA2", p3, env ); 

     /* Contextの送信 */
     obj->op( 3, context, env ); 
}
catch( CORBA::Exception &e ){ 
     // エラー処理
}

サーバプログラム

サーバでは、CORBA::Context::get_values()を使用して、プロパティ名とそれに関連したデータ値を取得できます。このとき、検索するプロパティ名にワイルドカード(*)を使用できます。

void ODsample_contexttest_impl::op(
     CORBA::Long             x, 
     CORBA::Context_ptr      context, 
     CORBA::Environment      &env ) 
     throw( CORBA::Exception ) 
{
     CORBA::NVList_ptr        nvlist; 
     CORBA::NamedValue_ptr    nv; 

     /* コンテキストに関連付けられた情報の取得 */
     context->get_values( NULL, 0, "DATA*", nvlist , env ); 

     /* nvlistの解析 */
     CORBA::Long        len = nvlist->count( env ); 
     for( I = 0; I < len; I++ ){ 
           nv = nvlist->item( I, env ); 
           CORBA::Any *data = nv->value( env ); 
           CORBA::Char *str = (CORBA::Char *)data->value();
     }
     ... 
}

(3)Java言語でのプログラミング例

クライアントプログラム

org.omg.CORBA.ORB.get_default_context()で取得したContextオブジェクトに対して、org.omg.CORBA.Context.set_one_value()を発行してプロパティ名とそのデータ値をContextオブジェクトに関連付けます。

org.omg.CORBA.ORB   Orb;
ODsample.contexttestOperations   obj;

try {
                     :
     /*デフォルト・コンテキストの取得 */
     org.omg.CORBA.Context ctx = Orb.get_default_context();

     /* データ値の設定 */
     org.omg.CORBA.Any p1,p2,p3;
     p1 = Orb.create_any();
     p1.insert_string("data");
     ctx.set_one_value("DATA",p1);

     p2 = Orb.create_any();
     p2.insert_string("data1");
     ctx.set_one_value("DATA1",p2);

     p3 = Orb.create_any();
     p3.insert_string("data2");
     ctx.set_one_value("DATA2",p3);

     /* Contextの送信 */
     obj.op( 3, ctx );
}
catch ( Exception e ) {
     System.out.println( "ERROR" );  // エラー処理
}

サーバプログラム

サーバでは、org.omg.CORBA.Context.get_values()を使用して、プロパティ名とそれに関連したデータ値を取得できます。このとき、検索するプロパティ名にワイルドカード(*)を使用できます。

/* Servant内のオペレーション実装部分 */
public void op( int x, org.omg.CORBA.Context ctx )
{
     /* コンテキストに関連付けられた情報の取得 */
     NVList nvlist = ctx.get_values("",0,"DATA*");

     /* nvlistの解析 */
     int count = nvlist.count();
     org.omg.CORBA.NamedValue nv;
     String str;
     for(int i=0;i<count;i++){
          nv = nvlist.item(i);
          str = nv.value().extract_string();
          System.out.println( "result = " + str );
          /* DATA, DATA1, DATA2の各データ値が表示されます。*/
     }
     return;
}