![]() ![]() ![]() ![]() ![]() ![]() ![]() |
ここでは、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ソフトウェアのトランザクションを使用すると、クライアント・アプリケーションはトランザクションを開始および終了し、トランザクションのステータスを取得できます。 Oracle Tuxedoソフトウェアでは、CORBAのオブジェクト・トランザクション・サービスで定義されたトランザクションを使いやすいように拡張して使用します。
トランザクションは、インタフェースで定義されます。 アプリケーション設計者は、Oracle Tuxedoクライアント/サーバー・アプリケーション内のどのインタフェースでトランザクションを処理するかを指定します。 実装構成ファイル(ICF)で、トランザクション・ポリシーがサーバー・アプリケーション用に定義されます。 一般に、使用可能なインタフェースのICFファイルは、アプリケーション設計者からクライアント・プログラムに提供されます。
トランザクションをクライアント・アプリケーションに追加するには、以下の手順を実行します。
これ以降は、Transactions Universityサンプル・アプリケーションのクライアント・アプリケーションの一部を使用して、これらの手順を説明します。Transactions Universityサンプル・アプリケーションの詳細は、Oracle Tuxedoオンライン・ドキュメントのTrans actionsサンプル・アプリケーションに関する項を参照してください。
Transactions Universityサンプル・アプリケーションは、Oracle Tuxedoソフトウェア・キットの次のディレクトリにあります。
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オブジェクトを返す方法を示します。 |
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());
TransactionCurrentオブジェクトには、クライアント・アプリケーションでトランザクションを管理できるようにするメソッドがあります。 これらのメソッドを使用すると、トランザクションを開始および終了して、現在のトランザクションに関する情報を取得できます。
表4-1では、TransactionCurrentオブジェクトのメソッドについて説明します。
トランザクションに関連付けられたタイムアウトを修正します。デフォルトのトランザクション・タイムアウト値は300秒です。
begin メソッドで明示的に開始するのではなく、トランザクションが自動的に開始した場合、タイムアウト値は、UBBCONFIG ファイルのTRANTIME パラメータで指定した値になります。TRANTIME パラメータの設定の詳細は、「トランザクションの管理」を参照してください。
|
|
Tobj::TransactionCurrent::begin
メソッドを使用してトランザクションを開始します。 このメソッドは値を返しません。Tobj::TransactionCurrent::commit
メソッドを使用すると、現在のトランザクションがコミットされます。 このメソッドは、トランザクションを終了して、オペレーションの処理を開始します。 トランザクションは、トランザクションのすべての参加リソースがコミットに同意した場合にのみコミットされます。 トランザクションとクライアント・アプリケーションの関連付けは、アプリケーションがTobj::TransactionCurrent::commit
メソッドまたはTobj::TransactionCurrent::rollback
メソッドを呼び出したときに解除されます。次の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;
}
![]() ![]() ![]() |