Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
|
目次
索引
![前ページ](../otscom/previous.gif)
|
3.2.2.3 静的起動インタフェース
静的起動インタフェースでサーバアプリケーションを呼び出す場合の、クライアントアプリケーションの記述例について説明します。
初期化
初期化処理として、ORBのオブジェクトリファレンスを取得します。オブジェクトリファレンスを取得するには、初期化メソッドを呼び出します。記述例を以下に示します。
main(argc, argv )
int argc;
char *argv[];
{
CORBA::ORB_ptr orb; // ORBのオブジェクトリファレンス
CORBA::Environment_ptr env; // 例外情報
int current_argc = argc;
env = new CORBA::Environment; // 例外情報
orb = CORBA::ORB_init(current_argc, argv, FJ_OM_ORBid, *env); |
ネーミングサービスのオブジェクトリファレンスの獲得
実行するオブジェクトをネーミングサービスから検索するために、ネーミングサービスのオブジェクトリファレンスを取得します。ネーミングサービスのオブジェクトリファレンスには、CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドを使用します。処理の記述例を以下に示します。
// NamingServiceのオブジェクトリファレンスを獲得
CORBA::Object_ptr
obj = orb->resolve_initial_references( CORBA_ORB_ObjectId_NameService, *env );
// NamingContextクラスへの変換
CosNaming::NamingContext_ptr
NamingContext_obj = CosNaming::NamingContext::_narrow( obj ); |
サーバアプリケーションのオブジェクトリファレンスの獲得
ネーミングサービスから、実行したいサーバアプリケーションの情報を検索します。サーバアプリケーションの情報を取り出すには、実行したいサーバアプリケーションのオブジェクト名をパラメタとしてメソッドを起動し、オブジェクトリファレンス情報が格納されているネーミングコンテキストを取得します。処理の記述例を以下に示します。
CosNaming::Name_ptr name; //CosNaming::Nameのインスタンス
CosNaming::NameComponent_var *name_component; //オブジェクト名格納域
CORBA::Object_ptr obj; //サーバアプリケーションのオブジェクトリファレンス
//CosNaming::NameComponent_var領域の獲得
name_component = CosNaming::Name::allocbuf(1);
//オブジェクト名
name_component[0]->id = (const CORBA::Char *)"ODdemo::calculator";
//オブジェクトのタイプ
name_component[0]->kind = (const CORBA::Char *)"";
//CosNaming::Name領域の獲得
name = CosNaming::Name(1,1,name_component,CORBA_TRUE );
//サーバアプリケーションのオブジェクトリファレンスを獲得
obj = NamingContext_obj-> resolve( *name, *env );
// ODdemo::calculatorクラスへの変換
ODdemo::calculator_ptr ap = ODdemo::calculator::_narrow( obj); |
トランザクションの開始
トランザクションを開始するために、Currentインタフェースのオブジェクトリファレンスを取得し、CosTransactions::Current::beginメソッドを呼び出します。処理の記述例を以下に示します。
CosTransactions::Current_ptr Current; /*トランザクション開始オブジェクトリファレンス*/
/*トランザクション開始インタフェースのオブジェクトリファレンスを獲得 */
obj = orb->resolve_initial_refarences(
CORBA_ORB_ObjectId_TransactionCurrent,
*env);
Current = CosTransactions::Current::_narrow(obj);
/* トランザクション開始メソッドの呼び出し */
Current->begin(*env); |
サーバオブジェクトのメソッド起動
メソッド名はIDLで指定したモジュール名、インタフェース名およびオペレーション名を"::"(コロン2つ)でつなげた形式で指定します。この例では、ODdemo,calculator,calculateが該当します。なお、メソッドを呼び出す際にネーミングサービスから取得したサーバアプリケーションのオブジェクトリファレンスとサーバプログラムで例外が発生した場合、例外情報を獲得するためにCORBA::Environment構造体を指定します。処理の記述例を以下に示します。
ODdemo::calculator::result res; // 復帰値
CORBA::Long a, b; // パラメタ
a = 10;
b = 5;
// メソッドの呼び出し
res = ap->calculate( a, b, *env ); |
トランザクションの完了
サーバアプリケーションのメソッド呼び出しの結果を復帰状態から判断し、トランザクションの状態を決定します。トランザクションを正常に終了させる場合には、CosTransactions::Current::commitメソッドを呼び出し、トランザクションをコミットさせます。
トランザクションを異常で終了させる場合には、CosTransactions::Current::rollbackメソッドを呼び出し、トランザクションをロールバックさせます。処理の記述例を以下に示します。
/*サーバアプリケーションのメソッド呼び出しの復帰状態を確認 */
if(env->exception())
Current->rollback(*env);
else
Current->commit(CORBA_TRUE, *env); |
Copyright 2008 FUJITSU LIMITED