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

第12章 CORBAインタフェース> 12.3 Contextオブジェクト

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

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

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

(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;
  }

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

Copyright 2005 FUJITSU LIMITED