ページの先頭行へ戻る
Interstage Application Server V13.0.0 アプリケーション作成ガイド(データベース連携サービス編)
FUJITSU Software

2.8.1 ソースプログラムの作成(静的起動インタフェース)

静的起動インタフェースでサーバアプリケーションを呼び出す場合の例について説明します。


■初期化

初期化処理として、ORBのオブジェクトリファレンスを取得します。オブジェクトリファレンスを取得するには、初期化メソッドを呼び出します。
記述例を以下に示します。

main( argc, argv )
    int   argc;
    char *argv[];
{
    int     current_argc = argc;
    CORBA_ORB               orb;    /* ORBのオブジェクトリファレンス */
    CORBA_Environment       env;    /* 例外情報 */

    orb = CORBA_ORB_init(&current_argc,argv, FJ_OM_ORBid, &env );
                  :
}

■ネーミングサービスのオブジェクトリファレンスの獲得

実行するオブジェクトをネーミングサービスから検索するため、ネーミングサービスのオブジェクトリファレンスを取得します。ネーミングサービスのオブジェクトリファレンスには、CORBAインタフェースのオブジェクトリファレンスの取り出しメソッドを使用します。
処理の記述例を以下に示します。

CosNaming_NamingContext  cos_naming;      /* NamingServiceのオブジェクトリファレンス */
CosNaming_Name           name;            /* 検索したい情報格納域 */
CosNaming_NameComponent  name_component;  /* オブジェクト格納域   */

/* NamingServiceのオブジェクトリファレンスを獲得 */
cos_naming = CORBA_ORB_resolve_initial_references (
        orb,
        CORBA_ORB_ObjectId_NameService,
        &env);

■サーバアプリケーションのオブジェクトリファレンスの獲得

ネーミングサービスから、実行したいサーバアプリケーションの情報を検索します。サーバアプリケーションの情報を取り出すには、実行するサーバアプリケーションのオブジェクト名をパラメタとしてメソッドを起動し、オブジェクトリファレンス情報が格納されているネーミングコンテキストを取得します。
処理の記述例を以下に示します。

CORBA_Object obj;                          /* サーバアプリケーションのオブジェクトリファレンス */
name._length = name._maximum = 1;          /* オブジェクト名の数 */
name._buffer = &name_component;            /* オブジェクト名格納域 */
name_component.id = "ODdemo::calculator";  /* オブジェクト名 */
name_component.kind = "";                  /* オブジェクトのタイプ */

/* サーバアプリケーションのオブジェクトリファレンスを獲得 */
obj = CosNaming_NamingContext_resolve(cos_naming, &name, &env );

■トランザクションの開始

トランザクションを開始するために、Currentインタフェースのオブジェクトリファレンスを取得し、CosTransactions_Current_beginメソッドを呼び出します。
処理の記述例を以下に示します。

CORBA_Object  Current;      /* トランザクション開始オブジェクトリファレンス */

/* トランザクション開始インタフェースのオブジェクトリファレンスを獲得 */
Current = CORBA_ORB_resolve_initial_references(
            orb,
            CORBA_ORB_ObjectId_TransactionCurrent,
            &env);

/* トランザクション開始メソッドの呼出し */
CosTransactions_Current_begin(Current, &env);

■サーバオブジェクトのメソッド起動

サーバプログラムのメソッドを呼び出します。メソッド名は、IDLで指定したモジュール名、インタフェース名、およびオペレーション名をアンダースコア(_)でつなげた形式で指定します。この例では、ODdemo、calculator、およびcalculateが該当します。なお、メソッド呼出し時にネーミングサービスから取得したサーバアプリケーションのオブジェクトリファレンス、およびサーバプログラムで例外が発生した場合、例外情報を獲得するためにCORBA_Environment構造体を指定します。
処理の記述例を以下に示します。

CORBA_long                a,b;  /* 入力パラメタ */
ODdemo_calculator_result  res;  /* 復帰値 */

a = 100; b = 20;

/* メソッドの呼出し */
res = ODdemo_calculator_calculate( obj, a, b, &env );

■トランザクションの完了

サーバアプリケーションのメソッド呼出しの結果を復帰状態から判断し、トランザクションの状態を決定します。トランザクションを正常終了する場合は、CosTransactions_Current_commitメソッドを呼び出し、トランザクションをコミットします。トランザクションを異常終了する場合は、CosTransactions_Current_rollbackメソッドを呼び出し、トランザクションをロールバックします。
処理の記述例を以下に示します。

/* サーバアプリケーションのメソッド呼出しの復帰状態を確認 */
if(env._major  != CORBA_NO_EXCEPTION)
    CosTransactions_Current_rollback(Current, &env);
else
    CosTransactions_Current_commit(Current, CORBA_TRUE, &env);