CORBAトランザクションの使用

     前  次    新規ウィンドウで目次を開く  新規ウィンドウで索引を開く  PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

CORBAクライアント・アプリケーションのトランザクション

ここでは、以下の内容について説明します。

ここでは、Oracle Tuxedo CORBAソフトウェアのCORBA C++クライアント・アプリケーションでトランザクションを使用する方法を説明します。始める前に、「トランザクションについて」を読む必要があります。

注意: Oracle Tuxedo CORBA JavaクライアントとOracle Tuxedo CORBA JavaクライアントORBはTuxedo 8.1で非推奨になり、サポートされなくなりました。すべてのOracle Tuxedo CORBA JavaクライアントおよびOracle Tuxedo CORBA JavaクライアントORBのテキスト・リファレンスとコード・サンプルは、サード・パーティ製のJava ORBライブラリを実装または実行する際の参考や、プログラマの参照用としてのみ使用してください。
注意: サード・パーティのCORBA Java ORBのテクニカル・サポートは、各ベンダーによって提供されます。Oracle Tuxedoでは、サード・パーティのCORBA Java ORBに関する技術的なサポートやドキュメントは提供していません。

実行中のクライアント・アプリケーションにトランザクションを実装する方法の例は、Oracle Tuxedoオンライン・ドキュメントのTransactionsサンプル・アプリケーションに関する項を参照してください。TransactionCurrentオブジェクトの概要は、CORBAクライアント・アプリケーションの作成のクライアント・アプリケーションの開発概念に関する項を参照してください。

 


Oracle Tuxedo CORBAトランザクションの概要

クライアント・アプリケーションは、トランザクション処理を使用してデータの有効性、一貫性、永続性を保証します。Oracle Tuxedoソフトウェアのトランザクションを使用すると、クライアント・アプリケーションはトランザクションを開始および終了し、トランザクションのステータスを取得できます。Oracle Tuxedoソフトウェアでは、CORBAのオブジェクト・トランザクション・サービスで定義されたトランザクションを使いやすいように拡張して使用します。

トランザクションは、インタフェースで定義されます。アプリケーション設計者は、Oracle Tuxedoクライアント/サーバー・アプリケーション内のどのインタフェースでトランザクションを処理するかを指定します。 実装構成ファイル(ICF)で、トランザクション・ポリシーがサーバー・アプリケーション用に定義されます。一般に、使用可能なインタフェースのICFファイルは、アプリケーション設計者からクライアント・プログラムに提供されます。

 


トランザクションの開発プロセスの概要

トランザクションをクライアント・アプリケーションに追加するには、以下の手順を実行します。

これ以降は、Transactions Universityサンプル・アプリケーションのクライアント・アプリケーションの一部を使用して、これらの手順を説明します。Transactions Universityサンプル・アプリケーションの詳細は、Oracle Tuxedoオンライン・ドキュメントのTrans actionsサンプル・アプリケーションに関する項を参照してください。

Transactions Universityサンプル・アプリケーションは、Oracle Tuxedoソフトウェア・キットの次のディレクトリにあります。

 


ステップ1 : Bootstrapオブジェクトを使用してTransactionCurrentオブジェクトを取得する

Oracle Tuxedo CORBAクライアント・ソフトウェアを使用している場合、Bootstrapオブジェクトを使用し、指定したOracle TuxedoドメインでTransactionCurrentオブジェクトへのオブジェクト参照を取得します。TransactionCurrentオブジェクトの詳細は、CORBAクライアント・アプリケーションの作成のクライアント・アプリケーションの開発概念に関する項を参照してください。

注意: サード・パーティのクライアントORBを使用している場合、CORBA Interoperable Naming Service(INS)のCORBA::ORB::resolve_initial_references操作を使用して、指定したOracle TuxedoドメインのFactoryFinderオブジェクトへのオブジェクト参照を取得します。INSを使用してトランザクション・クライアントの初期オブジェクト参照を取得する方法の詳細は、CORBAプログラミング・リファレンスのCORBAブートストラップ処理のプログラミング・リファレンスに関する項を参照してください。
注意: 次のC++の例は、Bootstrapオブジェクトを使用してTransactionCurrentオブジェクトを返す方法を示します。

C++の例

CORBA::Object_var var_transaction_current_oref =  
Bootstrap.resolve_initial_references(“TransactionCurrent”);
CosTransactions::Current_var transaction_current_oref=
CosTransactions::Current::_narrow(
var_transaction_current_oref.in());

 


ステップ2 : TransactionCurrentメソッドを使用する

TransactionCurrentオブジェクトには、クライアント・アプリケーションでトランザクションを管理できるようにするメソッドがあります。これらのメソッドを使用すると、トランザクションを開始および終了して、現在のトランザクションに関する情報を取得できます。

表4-1では、TransactionCurrentオブジェクトのメソッドについて説明します。

表4-1 TransactionCurrentオブジェクトのメソッド
メソッド
説明
begin
新しいトランザクションを作成します。以降の操作は、このトランザクションのスコープ内で発生します。クライアント・アプリケーションがトランザクションを開始したとき、デフォルトのトランザクション・タイムアウトは300秒です。set_timeoutメソッドで、このデフォルトを変更できます。
commit
トランザクションを正常に終了します。このクライアント・アプリケーションですべてのオペレーションが正常に終了したことを示します。
rollback
トランザクションのロールバックを強制します。
rollback_only
可能なアクションのみがロールバックされるようにトランザクションをマークします。通常、このメソッドは、サーバー・アプリケーションでのみ使用されます。
中断
現在のトランザクションの参加を一時停止します。このメソッドは、トランザクションを示すオブジェクトを返し、クライアント・アプリケーションが後でトランザクションを再開できるようにします。
再開
指定したトランザクションの参加を再開します。
get_status
クライアント・アプリケーションでトランザクションのステータスを返します。
get_transaction_name
トランザクションを示す出力可能な文字列を返します。
set_timeout
トランザクションに関連付けられたタイムアウトを修正します。デフォルトのトランザクション・タイムアウト値は300秒です。beginメソッドで明示的に開始するのではなく、トランザクションが自動的に開始した場合、タイムアウト値は、UBBCONFIGファイルのTRANTIMEパラメータで指定した値になります。TRANTIMEパラメータの設定の詳細は、「トランザクションの管理」を参照してください。
get_control
トランザクションを表すコントロール・オブジェクトを返します。

基本的なトランザクションは、以下のように動作します。

  1. クライアント・アプリケーションは、Tobj::TransactionCurrent::beginメソッドを使用してトランザクションを開始します。このメソッドは値を返しません。
  2. CORBAインタフェースのオペレーションは、トランザクションのスコープ内で実行されます。これらのオペレーションの一部を呼び出して例外が発生した場合(明示的に、または通信の失敗の結果として)、その例外が捕捉され、トランザクションはロールバックされます。
  3. Tobj::TransactionCurrent::commitメソッドを使用すると、現在のトランザクションがコミットされます。このメソッドは、トランザクションを終了して、オペレーションの処理を開始します。トランザクションは、トランザクションのすべての参加リソースがコミットに同意した場合にのみコミットされます。
  4. トランザクションとクライアント・アプリケーションの関連付けは、アプリケーションがTobj::TransactionCurrent::commitメソッドまたはTobj::TransactionCurrent::rollbackメソッドを呼び出したときに解除されます。次のC++の例は、クラスに登録している生徒のオペレーションをカプセル化するためにトランザクションを使用する場合を示しています。

C++の例

//Begin the transaction
transaction_current_oref->begin();
try {
//Perform the operation inside the transaction
   pointer_Registar_ref->register_for_courses(student_id, course_number_list);
    ...
//If operation executes with no errors, commit the transaction:
     CORBA::Boolean report_heuristics = CORBA_TRUE;
     transaction_current_ref->commit(report_heuristics);
}
catch (CORBA::Exception &) {
//If the operation has problems executing, rollback the
//transaction. Then throw the original exception again.
//If the rollback fails, ignore the exception and throw the
//original exception again.
try {
     transaction_current_ref->rollback();
}
catch (CORBA::Exception &) {
            TP::userlog("rollback failed");

throw;
}

  先頭に戻る       前  次