Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第4章 アプリケーションの開発(C++言語) | > 4.2 サーバアプリケーションのプログラミング(Basic Object Adapter:BOA) | > 4.2.2 動的スケルトンインタフェース |
ゲートウェイでは、以下に示す処理を行います。
CORBA::ServerRequest::op_name()を発行して、メソッド名の解析を行います。
static void dsi( CORBA::Object_ptr obj, CORBA::ServerRequest_ptr request, CORBA::Environment &ev ) { CORBA::RepositoryId dsi_op_name; try { dsi_op_name = request->op_name( ev ); if( strcmp( dsi_op_name, "calculate" ) == 0 ) { method_calculate( request ); } CORBA::string_free( dsi_op_name ); } catch ( CORBA::Exception e ){ CORBA::Any p; ev.exception( &e ); request->exception( &p, ev ); } return; }
CORBA::ORB::create_list()により、サーバアプリケーションに渡すパラメタを格納するための領域を保持するリストオブジェクト(NVList)を生成します。このとき、パラメタとして、何個のパラメタを格納するかを指定します。結果として、リストオブジェクトのオブジェクトリファレンスが返されます。
CORBA::NVList_ptr arg_list; orb->create_list( 2, arg_list, *env );
CORBA::NVList::add_item()により、サーバアプリケーションに渡すパラメタをリストオブジェクトに設定します。パラメタとして、CORBA::NVListオブジェクトリファレンス、サーバアプリケーションのパラメタの名前、型、値および長さを設定します。
CORBA::Any p1, p2; CORBA::Long l; l = 0; p1 <<= l; arg_list->add_value( "a", p1, CORBA::ARG_IN, *env ); p2 <<= l; arg_list->add_value( "b", p2, CORBA::ARG_IN, *env );
CORBA::ServerRequest::params()を発行して、パラメタの解析を行います。
request->params( arg_list, *env );
CORBA::ServerRequest::result()を発行して、復帰情報の設定を行います。
CORBA::NamedValue_ptr nvp1, nvp2; nvp1 = arg_list->item(0,*env); nvp2 = arg_list->item(1,*env); CORBA::Any *r1, *r2; r1 = nvp1->value(*env); r2 = nvp2->value(*env); CORBA::Long a,b; (*r1) >>= a; (*r2) >>= b; cout << " a = [" << a << "] b = [" << b << "]" << endl; ODdemo::calculator::result *res = new ODdemo::calculator::result(); res->add_result = a+b; res->subtract_result = a-b; res->multiple_result = a*b; res->divide_result = (CORBA::Float)a/b; CORBA::Any *tmp_any = new CORBA::Any; tmp_any->replace( _tc_ODdemo_calculator_result, (void *)res, CORBA_TRUE ); request->result( tmp_any, *env );
目次
索引
![]() ![]() |