BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   Tuxedo CORBA トランザクション   |   前へ   |   次へ   |   目次   |   索引

トランザクション・サービス

 

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

ここでは、BEA Tuxedo システムで トランザクション CORBA アプリケーションを作成するのに必要な情報を提供します。始める前に、トランザクションについてを読む必要があります。

 


トランザクション・サービスについて

BEA Tuxedo は、CORBA アプリケーションでのトランザクションをサポートするトランザクション・サービスを提供します。トランザクション・サービスは、OMG CORBA サービス Transaction Service Specification で記述されている CORBA サービス・トランザクション・サービスのインプリメンテーションを提供します。この仕様では、トランザクション機能を提供するオブジェクト・サービスのインターフェイスを定義しています。

 


機能と制限事項

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

ここでは、CORBA アプリケーションをサポートするトランザクション・サービスの機能と制限事項を説明します。

委譲型コミットによるライトウェイト・クライアント

ライトウェイト・クライアントは、不定期的に使用される単一ユーザの未管理デスクトップ・システム上で動作します。所有者は、使用しない場合にそれぞれのデスクトップ・システムをオフにすることができます。単一ユーザの未管理デスクトップ・システムでは、トランザクションの調整などのネットワーク機能の実行は要求できません。特に、未管理システムでは、サーバ・リソースを必要とするトランザクションの失敗に対して原子性、一貫性、独立性、持続性などの ACID 特性を保証する役割を果たすことはできません。BEA Tuxedo CORBA リモート・クライアントは、ライトウェイト・クライアントです。

トランザクション・サービスでは、ライトウェイト・クライアントは委譲型コミットを実行できます。つまり、サーバ・マシンで動作しているトランザクション・マネージャにトランザクションの調整が委譲されているときに、トランザクションを開始および終了できます。クライアント・アプリケーションは、ローカル・トランザクション・サーバを必要としません。CORBA クライアントが使用するリモート TransactionCurrent インプリメンテーションは、実際のトランザクションの調整をサーバ上のトランザクション・マネージャに委譲します。

INS を使用するサード・パーティ・クライアントのサポート

BEA Tuxedo リリース 8.0 以降では、CORBA インターオペラブル・ネーミング・サービス (INS) がサポートされます。したがって、CORBA のオブジェクト・トランザクション・サービス (OTS) をインプリメントしたクライアントは、BEA Tuxedo CORBA サーバと通信し、トランザクションを開始および終了できます。INS を使用すると、標準 OTS IDL ファイルをコンパイルし、使用可能なスタブ・ファイルを作成できるサード・パーティ・クライアント ORB は、BEA Tuxedo CORBA トランザクション・マネージャと対話できます。ただし、サード・パーティ ORB をリソース・マネージャとして使用できるようにするトランザクション調整インターフェイスがサポートされていないため、この対話処理は制限されます。BEA 提供のリソース・マネージャや XA 準拠のリソース・マネージャのみが、トランザクションの調整に参加できます。さらに、BEA 提供および XA 準拠のリソース・マネージャは、トランザクションの調整に対して CORBA の OTS ではなく XA プロトコルを使用する場合にのみ、トランザクションの調整に参加できます。

つまり、サード・パーティ・クライアント ORB を使用して、トランザクションを開始できます。また、クライアントは、トランザクションのロールバックまたはコミットを要求できますが、クライアント ORB は、CORBA の OTS を使用して 2 フェーズ・コミット・プロトコルの調整に参加することはできません。

マルチスレッド・トランザクション・クライアントのサポート

リリース 8.0 では、BEA Tuxedo CORBA は、トランザクション処理を行わないクライアントとトランザクション処理を行うクライアントに対してマルチスレッド・クライアントをサポートします。

トランザクションの伝達 (CORBA のみ)

CORBA アプリケーションの場合、OMG CORBA のトランザクション・サービス仕様で、クライアントがトランザクション・コンテキストの伝達を暗黙的にするか明示的にするかを選択できることが規定されています。BEA Tuxedo では、暗黙的な伝達を提供します。明示的な伝達はできる限り使用しないでください。

明示的なトランザクションの伝達を使用して渡されるトランザクション・コンテキストに関連付けられたオブジェクトは、暗黙的なトランザクション伝達 API と混在しないようにしください。ただし、明示的な伝達は、トランザクション・メソッドが処理可能な場合に対してはどのような制約も課しません。トランザクションをコミットする前にすべてのトランザクション・メソッドが完了するかどうかは保証できません。

トランザクションの整合性

チェックされたトランザクションの振る舞いでは、トランザクションに必要な、トランザクションに関与するすべてのオブジェクトがトランザクションに関する要求を完了するまで commit が成功しないようにすることでトランザクションの整合性を提供します。暗黙的なトランザクションの伝達を使用する場合、トランザクション・サービスは、チェックされたトランザクションの振る舞いを提供します。このトランザクションの振る舞いは、Open Group によって定義された要求/応答のプロセス間通信モデルで提供されたものと同じです。たとえば、CORBA アプリケーションの場合、トランザクション・サービスは、OMG CORBA のトランザクション・サービス仕様で記述されているとおり、reply チェック、commit チェック、resume チェックを実行します。

チェックされていないトランザクションの振る舞いは、トランザクションの整合性を提供するアプリケーションに完全に依存します。明示的な伝達を使用した場合、トランザクション・サービスではチェックされたトランザクションの振る舞いを提供しないため、トランザクションの整合性は保証されません。

トランザクションの終了

BEA Tuxedo CORBA では、トランザクションを作成したクライアントからのみトランザクションを終了できます。

注記 クライアントは、別のオブジェクトのサービスを要求するサーバ・オブジェクトとしても使用できます。

フラット・トランザクション

BEA Tuxedo CORBA ではフラット・トランザクション・モデルをインプリメントします。入れ子になったトランザクションはサポートされていません。

CORBA リモート・クライアントと BEA Tuxedo ドメインの相互運用性

BEA Tuxedo CORBA は、同じトランザクション内で、異なる BEA Tuxedo ドメインにあるサーバ・オブジェクトのメソッドを呼び出すリモート・クライアントをサポートします。

リモート CORBA クライアントでは、同じ BEA Tuxedo ドメインへの複数の接続がある場合、同じトランザクション内の別の接続上にあるサーバ・オブジェクトに対して呼び出しを実行できます。

ドメイン内およびドメイン間の相互運用性

BEA Tuxedo CORBA は、BEA Tuxedo ドメインでサーバ・オブジェクトのメソッドを呼び出すネイティブ・クライアントをサポートします。さらに、BEA Tuxedo は、同じ BEA Tuxedo ドメイン内の同じ、または異なるプロセスで、ほかのオブジェクトのメソッドを呼び出すサーバ・オブジェクトをサポートしています。

BEA Tuxedo アプリケーションでは、ファクトリ・ベース・ルーティングが複数のドメインにわたって正しくコンフィギュレーションされている限り、トランザクションは複数のドメインで使用できます。複数のドメインにわたるトランザクションをサポートするには、現在の (ローカル) ドメインで使用されるものの、別の (リモート) ドメインに存在するファクトリ・オブジェクトを識別するように factory_finder.ini ファイルをコンフィギュレーションする必要があります。詳細については、『BEA Tuxedo Domains コンポーネント』を参照してください。

ネットワークの相互運用性

クライアント・アプリケーションは、1 つのドメイン内にアクティブな Bootstrap オブジェクトと TransactionCurrent オブジェクトを 1 つだけ持つことができます。BEA Tuxedo CORBA では、リモート BEA Tuxedo ドメインとの間のトランザクションのエクスポートまたはインポートをサポートしていません。

ただし、トランザクションは、順次的に複数のドメインを含むことができます。たとえば、ドメイン A でアクティブなトランザクションを持つサーバは、それと同じトランザクション・コンテキスト内のドメイン B でサーバと通信できます。

トランザクション・サービスとトランザクション処理の関係

トランザクション・サービスは、以下のようにさまざまなトランザクション処理サーバ、インターフェイス、プロトコル、および標準に関連します。

プロセスの障害

トランザクション・サービスは、トランザクションのパーティシパントを監視し、障害や非アクティブの状態の有無をチェックします。BEA Tuxedo システムは、障害が発生した場合にアプリケーションの実行を維持するための管理ツールを提供します。BEA Tuxedo CORBA は、BEA Tuxedo トランザクション管理システムで構築されるので、アプリケーションの実行を維持するための BEA Tuxedo 機能を継承します。

一般的な制限事項

トランザクション・サービスには、以下の制限があります。

 


CORBA アプリケーションのトランザクション・サービス

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

ここでは、インプリメンテーション固有のものとして CORBA のオブジェクト・トランザクション・サービスの一部を特に取り上げ、BEA Tuxedo がどのように OTS をインプリメントするかを説明します。また、トランザクションの開始、終了、中断、または再開、およびトランザクションに関する情報の取得に使用する OTS アプリケーション・プログラミング・インターフェイス (API) について説明します。

Bootstrap オブジェクトを使用した TransactionCurrent オブジェクトへの初期リファレンスの取得

TransactionCurrent オブジェクトを使用してトランザクション・サービス API およびトランザクション・サービス API の拡張 (後述) にアクセスするには、アプリケーションは、以下のオペレーションを完了する必要があります。

  1. Bootstrap オブジェクトを作成します。Bootstrap オブジェクト作成の詳細に ついては、『BEA Tuxedo CORBA プログラミング・リファレンス』の「イン プリメンテーション・コンフィギュレーション・ファイル (ICF)」を参照し てください。

  2. Bootstrap オブジェクトの resolve_initial_reference("TransactionCurrent") メソッドを呼び出 します。標準 CORBA オブジェクト・ポインタが返されます。この Bootstrap オブジェクト・メソッドの詳細については、『BEA Tuxedo CORBA プログラ 』を参照してください。

  3. アプリケーションは、トランザクション・サービス API のみを必要とする場 合、上記のステップ 2 で返されたオブジェクト・ポインタに対して org.omg.CosTransactions.Current.narrow() (Java の場合) または CosTransactionsCurrent::_narrow() (C++ の場合) を発行する必要があ ります。

    アプリケーションは、拡張を含むトランザクション・サービス API を必要とする場合、上記のステップ 2 で返されたオブジェクト・ポインタに対して com.beasys.Tobj.TransactionCurrent.narrow() (Java の場合) または Tobj::TransactionCurrent::_narrow() (C++ の場合) を発行する必要があります。

INS を使用した TransactionFactory オブジェクトへの初期リファレンスの取得

BEA Tuxedo では、サード・パーティ・クライアントによる CORBA インターオペラブル・ネーミング・サービス (INS) も使用して初期トランザクション・オブジェクト・リファレンスを取得することもできます。INS は、ORB::resolve_initial_references() オペレーションを使用します。

リスト 2-1 では、クライアント・アプリケーションが INS を使用して TransactionFactory オブジェクトを取得するしくみを示します。完全なコード例については、University Sample のクライアント・アプリケーションを参照してください。

リスト 2-1 INS を使用したクライアント・アプリケーションのコード例

// ORB からファクトリ・ファインダを取得
CORBA::Object_var v_fact_finder_oref =
orb->resolve_initial_references("FactoryFinder");

// ファクトリ・ファインダをナロー変換
Tobj::FactoryFinder_var v_fact_finder_ref =
Tobj::FactoryFinder::_narrow(v_fact_finder_oref.in());

// FactoryFinder から TransactionFactory を取得
CORBA::Object_var v_txn_fac_oref =
v_fact_finder_ref->find_one_factory_by_id(
"IDL:omg.org/CosTransactions/TransactionFactory:1.0");

// TransactionFactory オブジェクト・リファレンスをナロー変換
CosTransactions::TransactionFactory_var v_txn_fac_ref =
CosTransactions::TransactionFactory::_narrow(
v_txn_fac_oref.in());

ORB::resolve_initial_references() オペレーションの使い方については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「CORBA ブートストラップ処理のプログラミング・リファレンス」を参照してください。

CORBA トランザクション・サービス API

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

ここでは、BEA Tuxedo がトランザクション・サービスをサポートするためにインプリメントする CosTransactions モジュールの CORBA ベース・コンポーネントについて説明します。これらのコンポーネントの詳細については、「OMG CORBA Services Transaction Service Specification, Version 1.1」 (2000 年 5 ) を参照してください。

データ型

リスト 2-2 には、サポートされているデータ型が示されています。

リスト 2-2 トランザクション・サービスでサポートされているデータ型

enum Status {

StatusActive,
StatusMarkedRollback,
StatusPrepared,
StatusCommitted,
StatusRolledBack,
StatusUnknown,
StatusNoTransaction,
StatusPreparing,
StatusCommitting,
StatusRollingBack
};
// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

例外

リスト 2-3 には、サポートされている IDL コードの例外が示されています。

リスト 2-3 トランザクション・サービスでサポートされている例外

// ヒューリスティックな例外
exception HeuristicMixed {};
exception HeuristicHazard {};

// その他のトランザクション固有の例外
exception SubtransactionsUnavailable {};
exception NoTransaction {};
exception InvalidControl {};
exception Unavailable {};

表 2-1 では、例外を説明します。

注記 これらの情報は、OMG から使用許可を得て、「OMG CORBA Services Transaction Service Specification, Version 1.1」 (2000 年 5 月)のものを利用しました。

表2-1 トランザクション・サービスでサポートされている例外

例外

説明

HeuristicMixed

ヒューリスティックな決定がなされたこと、関連する更新の一部がコミットされ、ほかはロールバックされたことを通知するために、要求に対してこの例外が発生します。

HeuristicHazard

ヒューリスティックな決定がなされたこと、関連するすべての更新の処理が不明であること、および処理が認識された更新について、すべてがコミットされたかロールバックされたことを通知するために、要求に対してこの例外が発生します。したがって、HeuristicMixed 例外は、HeuristicHazard 例外よりも優先されます。

SubtransactionsUnavailable

クライアントに既に関連するトランザクションがある場合、Current インターフェイスの begin メソッドに対して、この例外が発生します。

NoTransaction

クライアント・アプリケーションに関連付けられているトランザクションがない場合、Current インターフェイスの rollback および rollback_only メソッドに対して、この例外が発生します。

InvalidControl

パラメータが現在の実行環境で有効ではない場合、Current インターフェイスの resume メソッドに対して、この例外が発生します。

Unavailable

Control インターフェイスが要求されたオブジェクトを提供できない場合、Control インターフェイスの get_terminator メソッドと get_coordinator メソッドに対して、この例外が発生します。


 

Current インターフェイス

Current インターフェイスは、トランザクション・サービスのクライアントがスレッドとトランザクションの関連付けを明示的に管理できるようにするメソッドを定義します。また、Current インターフェイスは、ほとんどのアプリケーションでトランザクション・サービスを簡単に使用できるようにするメソッドも定義します。これらのメソッドは、トランザクションの開始、終了、中断、再開、および現在のトランザクションに関する情報の取得に使用できます。

CosTransactions モジュールは、Current インターフェイスを定義します (リスト 2-4 を参照)。

リスト 2-4 Current インターフェイスの IDL

// Current のトランザクション
interface Current : CORBA::Current {
void begin()
raises(SubtransactionsUnavailable);
void commit(in boolean report_heuristics)
raises(
NoTransaction,
HeuristicMixed,
HeuristicHazard
);
void rollback()
raises(NoTransaction);
void rollback_only()
raises(NoTransaction);
Status get_status();
string get_transaction_name();
void set_timeout(in unsigned long seconds);
Control get_control();
Control suspend();
void resume(in Control which)
raises(InvalidControl);

};

// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

表 2-2 では、Current トランザクション・メソッドについて説明します。

注記 これらの情報は、OMG から使用許可を得て、「OMG CORBA Services Transaction Service Specification, Version 1.1」 (2000 年 5 月)のものを利用しました。

表2-2 Current オブジェクトのトランザクション・メソッド

メソッド

説明

begin

新しいトランザクションを作成します。スレッドが新しいトランザクションに関連付けられるように、クライアント・アプリケーションのトランザクション・コンテキストが変更されます。クライアント・アプリケーションが既にトランザクションに関連付けられている場合は、SubtransactionsUnavailable 例外が発生します。トランザクション開始時にエラーが発生したためにクライアント・アプリケーションをトランザクション・モードに配置できない場合は、標準システム例外 INVALID_TRANSACTION が発生します。呼び出し時のコンテキストが無効な場合は、標準システム例外 BAD_INV_ORDER が発生します。

commit

クライアント・アプリケーションに関連付けられているトランザクションがない場合は、NoTransaction 例外が発生します。

呼び出し時のコンテキストが無効な場合は、標準システム例外 BAD_INV_ORDER が発生します。

システムでトランザクションのロールバックを決定すると、標準例外 TRANSACTION_ROLLEDBACK が発生し、スレッドのトランザクション・コンテキストが NULL に設定されます。

ヒューリスティックな決定がなされたこと、関連する更新の一部がコミットされ、ほかはロールバックされたことを通知するために、HeuristicMixed 例外が発生します。ヒューリスティックな決定がなされたこと、関連するすべての更新の処理が不明であること、および処理が認識された更新について、すべてがコミットされたかロールバックされたことを通知するために、HeuristicHazard 例外が発生します。HeuristicMixed 例外は、HeuristicHazard 例外よりも優先されます。ヒューリスティックな例外が発生するか、オペレーションが正常に完了した場合、スレッドのトランザクション例外コンテキストは NULL に設定されます。

オペレーションが正常に完了した場合、スレッドのトランザクション・コンテキストは NULL に設定されます。

rollback

クライアント・アプリケーションに関連付けられているトランザクションがない場合は、NoTransaction 例外が発生します。

呼び出し時のコンテキストが無効な場合は、標準システム例外 BAD_INV_ORDER が発生します。

オペレーションが正常に完了した場合、スレッドのトランザクション・コンテキストは NULL に設定されます。

rollback_only

クライアント・アプリケーションに関連付けられているトランザクションがない場合は、NoTransaction 例外が発生します。それ以外の場合、トランザクションの可能な結果のみがロールバックされるように、クライアント・アプリケーションに関連付けられているトランザクションが変更されます。

get_status

クライアント・アプリケーションに関連付けられているトランザクションがない場合は、StatusNoTransaction 値が返されます。それ以外の場合、このメソッドは、クライアント・アプリケーションに関連付けられているトランザクションのステータスを返します。

get_transaction_name

クライアント・アプリケーションに関連付けられているトランザクションがない場合は、空の文字列が返されます。それ以外の場合、このメソッドは、トランザクションを説明する出力可能な文字列 (特に、Open Group で指定されている XID) を返します。返された文字列は、デバッグ時のサポートを目的としています。

set_timeout

このメソッドは、タイムアウト値に影響を与えるターゲット・オブジェクトに関連付けられている状態変数を変更します。タイムアウト値は、その後の begin メソッドの呼び出しによって作成されるトランザクションに関連付けられています。

トランザクション・タイムアウトの初期値は 300 秒です。0 より大きい引数値を付けて set_timeout() を呼び出すと、新しいタイムアウト値が指定されます。引数 0 を付けて set_timeout() を呼び出すと、タイムアウト値がデフォルトの 300 秒に戻ります。

set_timeout() を呼び出すと、その後の begin の呼び出しで作成されたトランザクションは、指定した作成後の秒数が経過するまでに完了しなかった場合にロールバックの対象になります。

注記 トランザクション・タイムアウトの初期値は 300 秒です。begin メソッドを使用せずに、AUTOTRAN を介してトランザクションを開始した場合、タイムアウト値は、BEA Tuxedo コンフィギュレーション・ファイルの TRANTIME パラメータで指定した値です。詳細については、トランザクションの管理を参照してください。

get_control

クライアントがトランザクションに関連付けられていない場合は、NULL オブジェクト・リファレンスが返されます。それ以外の場合、クライアント・アプリケーションに関連付けられているトランザクション・コンテキストを表す Control オブジェクトが返されます。このオブジェクトは、このコンテキストを再確立するために resume メソッドに提供できます。

suspend

クライアント・アプリケーションがトランザクションに関連付けられていない場合は、NULL オブジェクト・リファレンスが返されます。

関連付けられているトランザクションが、可能なトランザクションの結果のみをロールバックする状態にある場合、標準システム例外 TRANSACTION_ROLLEDBACK が発生し、クライアント・アプリケーションに関連付けられるトランザクションはなくなります。

呼び出し時のコンテキストが無効な場合は、標準システム例外 BAD_INV_ORDER が発生します。トランザクションに関する呼び出し元の状態は変化しません。

それ以外の場合、クライアント・アプリケーションに関連付けられているトランザクション・コンテキストを表すオブジェクトが返されます。同じクライアントは、このコンテキストを再確立するために、このオブジェクトを resume メソッドに提供できます。さらに、クライアント・アプリケーションに関連付けられるトランザクションはなくなります。

注記 「The Common Object Request Broker: Architecture and Specification, Revision 2.4」にあるとおり、標準システム例外 TRANSACTION_ROLLEDBACK は、要求に関連付けられているトランザクションが既にロールバックされているか、ロールバックとしてマークされていることを示します。したがって、トランザクションの代わりに実行される処理は無効になるので、要求されたメソッドが実行できなかったか、実行されなかったことを示します。

resume

クライアントに既に関連付けられているトランザクションが、可能なトランザクションの結果のみをロールバックする状態にある場合、標準システム例外 TRANSACTION_ROLLEDBACK が発生し、クライアント・アプリケーションに関連付けられるトランザクションはなくなります。

呼び出し時のコンテキストが無効な場合は、標準システム例外 BAD_INV_ORDER が発生します。

呼び出し元が、1 つまたは複数のリソース・マネージャとグローバル・トランザクション外の作業に関与しているため、システムがグローバル・トランザクションを再開できない場合、標準システム例外 INVALID_TRANSACTION が発生します。

パラメータが NULL オブジェクト・リファレンスの場合、クライアント・アプリケーションに関連付けられるトランザクションはなくなります。現在の実行環境でパラメータが有効な場合、クライアント・アプリケーションは、(以前のトランザクションに代わって) そのトランザクションに関連付けられます。それ以外の場合、InvalidControl 例外が発生します。

注記 標準システム例外 TRANSACTION_ROLLEDBACK の定義については、suspendを参照してください。


 

Control インターフェイス

Control インターフェイスを使用すると、プログラムがトランザクション・コンテキストを明示的に管理および伝達できるようになります。Control インターフェイスをサポートするオブジェクトは、特定のトランザクションに暗黙的に関連付けられます。

リスト 2-5 では、CosTransactions モジュールで定義されている Control インターフェイスを示します。

リスト 2-5 Control インターフェイス

interface Control {
Terminator get_terminator()
raises(Unavailable);
Coordinator get_coordinator()
raises(Unavailable);
};

// この情報は、「OMG Transaction Service Specification,
//
Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

Control インターフェイスは、suspend メソッドおよび resume メソッドでのみ使用します。

Terminator インターフェイス

Terminator インターフェイスは、トランザクションをコミットまたはロールバックするオペレーションをサポートします。通常、これらのオペレーションは、トランザクションの開始元によって使用されます。トランザクション・サービスのインプリメンテーションは、Terminator の使用範囲を制限できます。最低で、単一スレッド内で使用できます。

リスト 2-6 では、Terminator インターフェイスを示します。

リスト 2-6 Terminator インターフェイス

interface Terminator {
void commit(in boolean report_heuristics)
raises(
HeuristicMixed,
HeuristicHazard
);
void rollback();
};

// この情報は、「OMG Transaction Service Specification,
//
Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

表 2-3 では、Terminator インターフェイスのメソッドを示します。

表2-3 Termination インターフェイスのメソッド

メソッド

説明

commit

トランザクションが rollback only としてマークされておらず、トランザクションのすべてのパーティシパントがコミットに同意した場合、トランザクションはコミットされ、オペレーションは正常に終了します。それ以外の場合、トランザクションはロールバックされ (下記の rollback メソッドを参照)、標準例外 TRANSACTION_ROLLEDBACK が発生します。

report_heuristics パラメータが true の場合、トランザクション・サービスは、HeuristicMixed 例外と HeuristicHazard 例外を使用して、矛盾している (またはその可能性がある) 結果を通知します。トランザクション・サービスのインプリメンテーションでは、オプションの CORBA ノーティフィケーション・サービスを使用すると、ヒューリスティックな決定をレポートできます。

コミットまたはロールバックされていないトランザクションのサブトランザクションがある場合、または完了していないトランザクションに関連付けられている (あるいはその可能性がある) アクティビティがある場合、commit オペレーションはトランザクションをロールバックできます。このようなエラー・チェックの性質と程度は、インプリメンテーションによって異なります。最上位トランザクションがコミットされると、回復可能なオブジェクトに対する、このトランザクションの範囲内の変更は確定され、他のトランザクションまたはクライアントでも認識可能なものになります。サブトランザクションがコミットされた場合は、リソースで適用された独立性の程度に応じて、ほかの関連するトランザクションでも変更が認識可能になります。

rollback

トランザクションをロールバックします。

トランザクションがロールバックされると、回復可能なオブジェクトに対する、このトランザクションの範囲内の変更 (下位トランザクションによる変更も含む) がロールバックされます。トランザクションでロックされたすべてのリソースは、リソースで適用された独立性の程度に応じて、ほかの関連するトランザクションで使用可能になります。


 

TransactionalObject インターフェイス

BEA Tuxedo リリース 8.0 以降では、CosTransactions::TransactionalObject は、トランザクションに関与することを示すオブジェクトによって使用されなくなりました。インターフェイスが TransactionalObject から継承され、ICF が異なるトランザクション方針を示している場合、警告が発行されます。TransactionalObject は、ほかの目的には使用されません。オブジェクトをトランザクションに関与させるために設定する必要があるトランザクション方針については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「インプリメンテーション・コンフィギュレーション・ファイル (ICF)」を参照してください。

CosTransactions モジュールは、TransactionalObject インターフェイスを定義します (リスト 2-7 を参照)。このインターフェイスで定義されるメソッドはありません。単にマーカとして使用されます。

リスト 2-7 TransactionalObject インターフェイス

interface TransactionalObject {
};

// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

TransactionFactory インターフェイス

TransactionFactory インターフェイスは、トランザクションの開始元がトランザクションを開始できるようにするためのものです。このインターフェイスは、最上位トランザクションの新しい表現を作成する、作成と再作成の 2 つのオペレーションを定義します。TransactionFactory は、ORB インターフェイスの resolve_initial_reference() オペレーションではなく、ライフ・サイクル・サービスの FactoryFinder インターフェイスを使用して検索します。

リスト 2-8 では、TransactionFactory インターフェイスを示します。

注記 TransactionFactory インターフェイスの Control recreate メソッドはサポートされていません。

リスト 2-8 TransactionFactory インターフェイス

interface TransactionFactory {
Control create(in unsigned long time_out);
Control recreate(in PropagationContext ctx);
};

// この情報は、「OMG Transaction Service Specification,
//
Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用

表 2-4 では、TransactionFactory インターフェイスのメソッドを示します。

表2-4 TransactionFactory インターフェイスのメソッド

メソッド

説明

create

新しい最上位トランザクションを作成し、Control オブジェクトを返します。Control オブジェクトは、新しいトランザクションのパーティシパントを管理するのに使用できます。トランザクション・サービスのインプリメンテーションは、Control オブジェクトの機能を制限し、他の実行環境に送信し、そこで使用できるようにすることができます。最低で、クライアント・アプリケーションで使用できます。

パラメータが 0 以外の値 n の場合、新しいトランザクションは、n 秒が経過するまでに完了しなかったときにロールバックの対象になります。パラメータが 0 の場合、アプリケーション指定のタイムアウトは設定されません。

recreate

サポートされていません。


 

その他の CORBA のオブジェクト・トランザクション・サービス・インターフェイス

その他の CORBA のオブジェクト・トランザクション・サービス・インターフェイスはサポートされていません。前述の Current インターフェイスは、Bootstrap オブジェクトから取得した場合にのみサポートされます。前述の Control インターフェイスは、Current オブジェクトの get_control メソッドおよび suspend メソッドで取得した場合にのみサポートされます。

CORBA トランザクション・サービス API の拡張

ここでは、前述の CORBA のオブジェクト・トランザクション・サービス API の特定の拡張について説明します。ここで説明する API を使用すると、アプリケーションは、Open Group リソース・マネージャをオープンまたはクローズできるようになります。

以下の API は、2 フェーズ・コミット・プロトコルを Open Group の XA インターフェイスで制御できるようにすることで、リソース・マネージャが簡単に分散トランザクションに関与できるようにします。

以下の定義とインターフェイスは、Tobj モジュールで定義されます。

例外

以下の例外がサポートされています。

exception RMfailed {};

要求により、リソース・マネージャのオープンまたはクローズに失敗したことを通知するために例外が発生します。

TransactionCurrent インターフェイス

このインターフェイスは、CosTransactions モジュールの Current インターフェイスのすべてのメソッドをサポートしています。これについては、『BEA Tuxedo CORBA プログラミング・リファレンス』の「CORBA ブートストラップ処理のプログラミング・リファレンス」で説明しています。さらに、このインターフェイスは、リソース・マネージャをオープンまたはクローズする API をサポートします。

リスト 2-9 では、Tobj モジュールで定義されている TransactionCurrent インターフェイスを示します。

リスト 2-9 TransactionCurrent インターフェイス

Interface TransactionCurrent: CosTransactions::Current {
void open_xa_rm()
raises(RMfailed);
void close_xa_rm()
raises(Rmfailed);
}

表 2-5 では、リソース・マネージャ固有の API を説明しています。これらの API の詳細については、『BEA Tuxedo CORBA プログラミング・リファレンス』を参照してください。

表2-5 Current インターフェイスのリソース・マネージャ API

メソッド

説明

open_xa_rm

このメソッドは、このプロセスがリンクされている Open Group のリソース・マネージャをオープンします。リソース・マネージャをオープンしているときに障害が発生すると、RMfailed 例外が発生します。

リモート・クライアントまたはネイティブ・クライアントでこのメソッドを呼び出そうとすると、標準システム例外 NO_IMPLEMENT が発生します。

close_xa_rm

このメソッドは、このプロセスがリンクされている Open Group のリソース・マネージャをクローズします。リソース・マネージャをクローズしているときに障害が発生すると、RMfailed 例外が発生します。関数呼び出し時のコンテキストが無効な場合 (呼び出し側がトランザクション・モードの場合など) は、標準システム例外 BAD_INV_ORDER が発生します。

リモート・クライアントまたはネイティブ・クライアントでこのメソッドを呼び出そうとすると、標準システム例外 NO_IMPLEMENT が発生します。

BEA Tuxedo CORBA アプリケーションのトランザクションの使用に関する注意事項

BEA Tuxedo CORBA クライアント/サーバ・アプリケーションにトランザクションを統合する場合は、以下のガイドライン考慮してください。

 


UserTransaction API

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

UserTransaction メソッド

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

表2-6 UserTransaction オブジェクトのメソッド

メソッド名

説明

begin

現在のスレッドでトランザクションを開始します。

commit

現在のスレッドに関連付けられているトランザクションをコミットします。

getStatus

トランザクション・ステータスを返します。現在のスレッドに関連付けられているトランザクションがない場合は、STATUS_NO_TRANSACTION を返します。

トランザクション・ステータスは、以下のいずれかの値です。

rollback

現在のスレッドに関連付けられているトランザクションをロールバックします。

setRollbackOnly

トランザクションの可能な結果のみがロールバックされるように、現在のスレッドに関連付けられているトランザクションをマークします。

setTransactionTimeout

begin メソッドで現在のスレッドが開始したトランザクションのタイムアウト値を指定します。アプリケーションが begin メソッドを呼び出していない場合、トランザクション・サービスは、トランザクション・タイムアウトのデフォルト値を使用します。

UserTransaction メソッドがスローする例外

表 2-7 では、UserTransaction オブジェクトのメソッドがスローする例外について説明します。

表2-7 UserTransaction メソッドがスローする例外

例外

説明

HeuristicMixedException

ヒューリスティックな決定がなされたこと、関連する更新の一部がコミットされ、ほかはロールバックされたことを通知するためにスローされます。

HeuristicRollbackException

ヒューリスティックな決定がなされたこと、関連する更新の一部がロールバックされたことを通知するためにスローされます。

NotSupportedException

入れ子になったトランザクションなど、要求されたオペレーションがサポートされていないときにスローされます。

RollbackException

トランザクションが rollback only としてマークされているか、トランザクションがコミットではなくロールバックされたときにスローされます。

IllegalStateException

現在のスレッドがトランザクションに関連付けられていない場合にスローされます。

SecurityException

スレッドによるトランザクションのコミットが認められないことを通知するためにスローされます。

SystemException

トランザクション・マネージャで予期しないエラーが発生し、以降のトランザクション・サービスを続行できなくなったことを示すために、トランザクション・マネージャによってスローされます。

 

back to top previous page next page