bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo CORBA トランザクション

 Previous Next Contents Index View as PDF  

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 オブジェクトのメソッドについて説明します。

表 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 パラメータの設定方法については、第 5章 「トランザクションの管理」を参照してください。

get_control

トランザクションを表すコントロール・オブジェクトを返します。

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

  1. クライアント・アプリケーションは、Tobj::TransactionCurrent::begin メソッドを使用してトランザクションを開始します。このメソッドは値を返しません。

  2. CORBA インターフェイスのオペレーションは、トランザクションのスコープ内で実行されます。これらのオペレーションの一部を呼び出して例外が発生した場合 (明示的に、または通信の失敗の結果として)、その例外がキャッチされ、トランザクションはロールバックされます。

  3. Tobj::TransactionCurrent::commit メソッドを使用すると、現在のトランザクションがコミットされます。このメソッドは、トランザクションを終了して、オペレーションの処理を開始します。トランザクションは、トランザクションのすべてのパーティシパントがコミットに同意した場合にのみコミットされます。

    トランザクションとクライアント・アプリケーションの関連付けは、アプリケーションが Tobj::TransactionCurrent::commit メソッドまたは Tobj::TransactionCurrent::rollback メソッドを呼び出したときに解除されます。次の C++、Java、Visual Basic 例は、クラスに登録している生徒のオペレーションをカプセル化するためにトランザクションを使用する場合を示しています。

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

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy