静的起動インタフェースでサーバアプリケーションを呼び出す場合の例について説明します。
■初期化
初期化処理として、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);