Interstage Application Server アプリケーション作成ガイド (データベース連携サービス編)
|
目次
索引
![前ページ](../otscom/previous.gif)
|
3.1.2.3 静的起動インタフェース
静的起動インタフェースでサーバアプリケーションを呼び出す場合の、クライアントアプリケーションの記述例について説明します。
初期化
初期化処理として、ORBのオブジェクトリファレンスを取得します。オブジェクトリファレンスを取得するには、初期化メソッドを呼び出します。記述例を以下に示します。
main( argc, argv )
int argc;
char *argv[];
{
int current_argc = argc;
CORBA_ORB orb; /* ORBのオブジェクトリファレンス */
CORBA_Environment env; /* 例外情報 */
orb = CORBA_ORB_init(¤t_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); |
Copyright 2008 FUJITSU LIMITED