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

第3章 クライアントアプリケーションの作成> 3.2 クライアントアプリケーションソースの作成(C++言語)> 3.2.2 ソースの作成

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