グローバルトランザクション運用を行うためには、CORBAのクライアントアプリケーションの処理に加えて、CosTransactions.Current.commitメソッドなどのCurrentインタフェースを呼び出して、データベース連携サービスにトランザクション処理を依頼します。
これらの処理を考慮したクライアントアプリケーションの構成について以下に示します。
■初期化処理部
クライアントアプリケーションをCORBAサービスに登録、およびトランザクションサービスの初期化を行います。
■アプリケーション固有部
アプリケーション固有の処理部です。トランザクションの開始から終了までの流れを記述します。
■トランザクション用ライブラリ
データベース連携サービスが提供するクライアントアプリケーション用ライブラリです。
クライアントアプリケーションの基本形を以下に示します。
try{ /* 初期化処理 */ : orb = org.omg.CORBA.ORB.init(args, null); : /* ネーミングサービスのオブジェクトリファレンスの獲得 */ : org.omg.CORBA.Object _tmpObj2 = Orb.resolve_initial_references("NameService"); Cos = org.omg.NamingContextExtHelper.narrow(_tmpObj2); … (1) : /* トランザクション依頼処理 */ org.omg.CORBA.Object _tmpObj1 = Orb.resolve_initial_references("TransactionCurrent"); Current = org.omg.CosTransactions.CurrentHelper.narrow(_tmpObj1); … (2) : /* サーバアプリケーションのオブジェクトリファレンス獲得 */ String NCid = new String("bankA::accountA"); String NCkind = new String(""); try { NameComponent nc = new NameComponent( NCid, NCkind ); NameComponent NCo[] = { nc }; Obj = Cos.resolve( NCo ); target = accountAHelper.narrow( Obj ); } Current.begin(); … (3) : obj->ope1(para); … (4) Current.commit(rhuristic); … (5) } catch( org.omg.CORBA.SystemException e) { Current.rollback(); … (6) } catch( java.lang.Exception e) { Current.rollback(); … (6) }
ネーミングサービスからサーバアプリケーションのオブジェクトリファレンスを獲得します。
Currentインタフェースのオブジェクトリファレンスを獲得します。
CosTransactions.Current.beginメソッドでトランザクションの開始を宣言します。
サーバアプリケーションを呼び出します。
サーバアプリケーションの復帰状態を確認して、トランザクションの状態を決定します。トランザクションを正常終了する場合は、CosTransactions.Current.commitメソッドでトランザクションをコミットします。
異常終了する場合は、CosTransactions.Current.rollbackメソッドでトランザクションをロールバックします。