| Interstage Application Server アプリケーション作成ガイド (CORBAサービス編) |
目次
索引
![]()
|
| 付録F 動的スケルトンインタフェースのプログラミング | > F.2 C++言語の開発 | > F.2.1 Basic Object Adapter : BOA |
ゲートウェイでは、以下に示す処理を行います。
ゲートウェイの実装例を以下に示します。
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()を発行して、例外情報の設定を行います。
目次
索引
![]()
|