bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA トランザクション > CORBA クライアント・アプリケーションのトランザクション |
Tuxedo CORBA トランザクション
|
CORBA クライアント・アプリケーションのトランザクション
ここでは、以下の内容について説明します。
ここでは、BEA Tuxedo CORBA ソフトウェアの CORBA C++、Java、および ActiveX クライアント・アプリケーションでトランザクションを使用する方法を説明します。始める前に、トランザクションについてを読む必要があります。
注記 BEA Tuxedo では、CORBA インターオペラブル・ネーミング・サービス (INS) ブートストラップ処理メカニズムも使用できます。INS の詳細については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「CORBA ブートストラップ処理のプログラミング・リファレンス」を参照してください。INS を使用する際の制限については、INS を使用するサード・パーティ・クライアントのサポートを参照してください。
作業クライアント・アプリケーションにトランザクションがインプリメントされるしくみの例については、BEA Tuxedo オンライン・マニュアルの「Transactions サンプル・アプリケーション
」を参照してください。TransactionCurrent オブジェクトの概要については、『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』の「クライアント・アプリケーションの開発概念」を参照してください。
BEA Tuxedo CORBA トランザクションの概要
クライアント・アプリケーションは、トランザクション処理を使用してデータの有効性、一貫性、永続性を保証します。BEA Tuxedo ソフトウェアのトランザクションを使用すると、クライアント・アプリケーションはトランザクションを開始および終了し、トランザクションのステータスを取得できます。BEA Tuxedo ソフトウェアでは、CORBA のオブジェクト・トランザクション・サービスで定義されたトランザクションを使いやすいように拡張して使用します。
トランザクションは、インターフェイスで定義されます。アプリケーション設計者は、BEA Tuxedo クライアント/サーバ・アプリケーション内のどのインターフェイスでトランザクションを処理するかを指定します。インプリメンテーション・コンフィギュレーションファイル (ICF) で、各インターフェイスのトランザクション方針がサーバ・アプリケーション用に定義されます。一般に、使用可能なインターフェイスの ICF ファイルは、アプリケーション設計者からクライアント・プログラマに提供されます。
トランザクションの開発プロセスの概要
トランザクションをクライアント・アプリケーションに追加するには、以下の手順を実行します。
以下の節では、Transactions University サンプル・アプリケーションにあるクライアント・アプリケーションの一部を使用して、この手順を説明します。Transactions University サンプル・アプリケーションの詳細については、BEA Tuxedo オンライン・マニュアルの「Transactions サンプル・アプリケーション
」を参照してください。Transactions University サンプル・アプリケーションは、BEA Tuxedo ソフトウェア・キットの次のディレクトリにあります。
ステップ 1: Bootstrap オブジェクトを使用して TransactionCurrent オブジェクトを取得する
BEA Tuxedo CORBA クライアント・ソフトウェアを使用している場合、Bootstrap オブジェクトを使用し、指定した BEA Tuxedo ドメインで TransactionCurrent オブジェクトへのオブジェクト・リファレンスを取得します。TransactionCurrent オブジェクトの詳細については、『BEA Tuxedo CORBA クライアント・アプリケーションの開発方法』の「CORBA クライアント・アプリケーションの開発概念」を参照してください。
注記 サード・パーティ・クライアント ORB を使用している場合、CORBA インターオペラブル・ネーミング・サービス (INS) の CORBA::ORB::resolve_initial_references オペレーションを使用して、BEA Tuxedo ドメインの FactoryFinder オブジェクトへのリファレンスを取得します。INS を使用してトランザクション・クライアントの初期オブジェクト・リファレンスを取得する方法の詳細については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「CORBA ブートストラップ処理のプログラミング・リファレンス」を参照してください。
次の C++、Java、Visual Basic の例は、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());
Java の例
org.omg.CORBA.Object transCurObj =
gBootstrapObjRef.resolve_initial_references(
“TransactionCurrent”);
org.omg.CosTransactions.Current gTransCur=
org.omg.CosTransactions.CurrentHelper.narrow(transCurObj);
Visual Basic の例
Set objTransactionCurrent =
objBootstrap.CreateObject(“Tobj.TransactionCurrent”)
ステップ 2: TransactionCurrent メソッドを使用する
TransactionCurrent オブジェクトには、クライアント・アプリケーションでトランザクションを管理できるようにするメソッドがあります。これらのメソッドを使用すると、トランザクションを開始および終了して、現在のトランザクションに関する情報を取得できます。
注記 または、CORBA Java クライアントは、UserTransaction オブジェクトを代わりに使用することもできます。
表 4-1 では、TransactionCurrent オブジェクトのメソッドについて説明します。
基本的なトランザクションは、以下のように動作します。
C++ の例
//トランザクションを開始
transaction_current_oref->begin();
try {
//Perform the operation inside the transaction
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;
}
Java の例
try{
gTransCur.begin();
//トランザクション内でオペレーションを実行
not_registered =
gRegistrarObjRef.register_for_courses(student_id,selected_course_numbers);
if (not_registered != null)
//オペレーションがエラーなしで実行された場合は、トランザクションをコミット
boolean report_heuristics = true;
gTransCur.commit(report_heuristics);
} else gTransCur.rollback();
} catch(org.omg.CosTransactions.NoTransaction nte) {
System.err.println(“NoTransaction: “ + nte);
System.exit(1);
} catch(org.omg.CosTransactions.SubtransactionsUnavailable e) {
System.err.println(“Subtransactions Unavailable: “ + e);
System.exit(1);
} catch(org.omg.CosTransactions.HeuristicHazard e) {
System.err.println(“HeuristicHazard: “ + e);
System.exit(1);
} catch(org.omg.CosTransactions.HeuristicMixed e) {
System.err.println(“HeuristicMixed: “ + e);
System.exit(1);
}
Visual Basic の例
' トランザクションを開始
'
objTransactionCurrent.begin
'
' コースの登録を試行
'
NotRegisteredList = objRegistrar.register_for_courses(mStudentID,
CourseList, exception)
'
If exception.EX_majorCode = NO_EXCEPTION then
' 要求が成功したら、トランザクションをコミット
'
Dim report_heuristics As Boolean
report_heuristics = True
objTransactionCurrent.commit report_heuristics
Else
' 要求が失敗したら、トランザクションをロールバック
'
objTransactionCurrent.rollback
MsgBox "Transaction Rolled Back"
End If
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |