Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]() ![]() |
第5章 アプリケーションの開発(C++言語) | > 5.2 サーバアプリケーションのプログラミング(Basic Object Adapter:BOA) | > 5.2.2 動的スケルトンインタフェース |
ゲートウェイでは、以下に示す処理を行います。
ゲートウェイの実装例を以下に示します。
static void dsi( CORBA::Object_ptr obj, CORBA::ServerRequest_ptr request, CORBA::Environment &ev ) { CORBA::RepositoryId dsi_op_name; try { // (1) メソッドの解析 dsi_op_name = request->op_name( ev ); if( strcmp( dsi_op_name, "calculate" ) == 0 ) { method_calculate( request ); } CORBA::string_free( dsi_op_name ); } // (5) 例外情報の設定 catch ( ODdemo::calculator::ZEROPARAM &_zeroparam ) { CORBA::Any *_any = new CORBA::Any( _tc_ODdemo_calculator_ZEROPARAM, &_zeroparam ); request->exception( _any, ev ); } catch ( CORBA::Exception e ){ // 例外発生時の処理を記述してください。 // 復帰情報あるいは例外情報を設定してください } return; } void method_calculate( CORBA::ServerRequest_ptr request ) throw( CORBA::Exception ) { try { // (2) パラメタの組立て // パラメタリストの生成 CORBA::NVList_ptr arg_list; orb->create_list( 2, arg_list, *env ); 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 ); // (3) パラメタの解析 request->params( arg_list, *env ); CORBA::NamedValue_ptrnvp1, 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; if ( b == 0 ){ ODdemo::calculator::ZEROPARAM excep = ODdemo::calculator::ZEROPARAM(); throw( excep ); } // (4) 復帰情報の設定 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 ); } catch ( ODdemo::calculator::ZEROPARAM &_zeroparam ) { throw( _zeroparam ); } catch( CORBA::Exception e ) { throw( e ); } }
CORBA::ServerRequest::op_name()を発行して、メソッド名の解析を行います。
CORBA::ServerRequest::params()を発行して、パラメタの解析を行います。この結果、アプリケーションに渡すパラメタ値が取得されます。
CORBA::ServerRequest::result()を発行して、復帰情報の設定を行います。
CORBA::ServerRequest::exception()を発行して、例外情報の設定を行います。
目次
索引
![]() ![]() |