Tuxedo CORBA トランザクション

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

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 オブジェクトの概要については、『Tuxedo CORBA クライアント アプリケーションの開発方法』の「クライアント アプリケーションの開発概念」を参照してください。

 


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

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

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

 


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

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

以下の節では、Transactions University サンプル アプリケーションにあるクライアント アプリケーションの一部を使用して、この手順を説明します。Transactions University サンプル アプリケーションの詳細については、Oracle Tuxedo オンライン マニュアルの「Transactions サンプル アプリケーション」を参照してください。

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

 


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

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

注意 : サード パーティのクライアント ORB を使用している場合、CORBA Interoperable Naming Service (INS) の CORBA::ORB::resolve_initial_references オペレーションを使用して、Oracle Tuxedo ドメインの FactoryFinder オブジェクトへのオブジェクト参照を取得します。INS を使用してトランザクション クライアントの初期オブジェクト参照を取得する方法の詳細については、『Tuxedo 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
可能なアクションのみがロールバックされるようにトランザクションをマークします。通常、このメソッドは、サーバ アプリケーションでのみ使用されます。
suspend
現在のトランザクションの参加を一時停止します。このメソッドは、トランザクションを示すオブジェクトを返し、クライアント アプリケーションが後でトランザクションを再開できるようにします。
resume
指定したトランザクションの参加を再開します。
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++ の例

// トランザクションを開始
transaction_current_oref->begin();
try {
// トランザクション内でオペレーションを実行
pointer_Registar_ref->register_for_courses(student_id, course_number_list);
...
// オペレーションがエラーなしで実行された場合は、トランザクションをコミット
CORBA::Boolean report_heuristics = CORBA_TRUE;
transaction_current_ref->commit(report_heuristics);
}
catch (CORBA::Exception &) {
// オペレーションで実行エラーが発生した場合は、トランザクションをロールバック
// 次に元の例外を再び送出する
// ロールバックが失敗した場合、例外を無視し、
// 元の例外を再び送出する
try {
transaction_current_ref->rollback();
}
catch (CORBA::Exception &) {
TP::userlog("rollback failed");

throw;
}

  ページの先頭       前  次