bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > Tuxedo CORBA トランザクション > トランザクション・サービス |
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 機能を継承します。
一般的な制限事項
トランザクション・サービスには、以下の制限があります。
その結果、ロールバックされたトランザクションに関与していた (または、参加していた) オブジェクトは、BEA Tuxedo によってクリアされた状態を少し後で取得します。したがって、BEA Tuxedo がこれらのオブジェクトの状態をクリアするまで、他のクライアントは、これらのオブジェクトを別のトランザクションに関与させることはできません。この状態はごく短い時間しか存在しないため、通常は製品アプリケーションで問題になることはありません。この状態に対する簡単な対策は、短時間 (通常は 1 秒) の遅延の後で適切なオペレーションを試してみることです。
一方向のメソッド呼び出しのため、エラーまたは例外はクライアントに返されません。ただし、サーバ・オブジェクトのメソッドは実行されず、適切なエラー・メッセージがログに書き込まれます。クライアントは、トランザクションのコンテキスト内で、IGNORE トランザクション方針を持つサーバ・オブジェクトに対する一方向のメソッド呼び出しを実行できます。この場合、サーバ・オブジェクトのメソッドは実行されますが、トランザクションのコンテキスト内ではありません。トランザクション方針の詳細については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「インプリメンテーション・コンフィギュレーション・ファイル (ICF)」を参照してください。
CORBA アプリケーションのトランザクション・サービス
ここでは、以下の内容について説明します。
ここでは、インプリメンテーション固有のものとして CORBA のオブジェクト・トランザクション・サービスの一部を特に取り上げ、BEA Tuxedo がどのように OTS をインプリメントするかを説明します。また、トランザクションの開始、終了、中断、または再開、およびトランザクションに関する情報の取得に使用する OTS アプリケーション・プログラミング・インターフェイス (API) について説明します。
Bootstrap オブジェクトを使用した TransactionCurrent オブジェクトへの初期リファレンスの取得
TransactionCurrent オブジェクトを使用してトランザクション・サービス API およびトランザクション・サービス API の拡張 (後述) にアクセスするには、アプリケーションは、以下のオペレーションを完了する必要があります。
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 月)のものを利用しました。
Current インターフェイス Current インターフェイスは、トランザクション・サービスのクライアントがスレッドとトランザクションの関連付けを明示的に管理できるようにするメソッドを定義します。また、Current インターフェイスは、ほとんどのアプリケーションでトランザクション・サービスを簡単に使用できるようにするメソッドも定義します。これらのメソッドは、トランザクションの開始、終了、中断、再開、および現在のトランザクションに関する情報の取得に使用できます。 CosTransactions モジュールは、Current インターフェイスを定義します (リスト2-4 を参照)。 コード リスト 2-4 Current インターフェイスの IDL 表 2-2 では、Current トランザクション・メソッドについて説明します。 注記 これらの情報は、OMG から使用許可を得て、「OMG CORBA Services Transaction Service Specification, Version 1.1」 (2000 年 5 月)のものを利用しました。
// 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 の使用許可を得て
// 使用
Control インターフェイス Control インターフェイスを使用すると、プログラムがトランザクション・コンテキストを明示的に管理および伝達できるようになります。Control インターフェイスをサポートするオブジェクトは、特定のトランザクションに暗黙的に関連付けられます。 リスト2-5 では、CosTransactions モジュールで定義されている Control インターフェイスを示します。 コード リスト 2-5 Control インターフェイス Control インターフェイスは、suspend メソッドおよび resume メソッドでのみ使用します。 Terminator インターフェイス Terminator インターフェイスは、トランザクションをコミットまたはロールバックするオペレーションをサポートします。通常、これらのオペレーションは、トランザクションの開始元によって使用されます。トランザクション・サービスのインプリメンテーションは、Terminator の使用範囲を制限できます。最低で、単一スレッド内で使用できます。 リスト2-6 では、Terminator インターフェイスを示します。 コード リスト 2-6 Terminator インターフェイス 表 2-3 では、Terminator インターフェイスのメソッドを示します。
interface Control {
Terminator get_terminator()
raises(Unavailable);
Coordinator get_coordinator()
raises(Unavailable);
};// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用interface Terminator {
void commit(in boolean report_heuristics)
raises(
HeuristicMixed,
HeuristicHazard
);
void rollback();
};// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用
TransactionalObject インターフェイス BEA Tuxedo リリース 8.0 以降では、CosTransactions::TransactionalObject は、トランザクションに関与することを示すオブジェクトによって使用されなくなりました。インターフェイスが TransactionalObject から継承され、ICF が異なるトランザクション方針を示している場合、警告が発行されます。TransactionalObject は、ほかの目的には使用されません。オブジェクトをトランザクションに関与させるために設定する必要があるトランザクション方針については、『BEA Tuxedo CORBA プログラミング・リファレンス』の「インプリメンテーション・コンフィギュレーション・ファイル (ICF)」を参照してください。 CosTransactions モジュールは、TransactionalObject インターフェイスを定義します (リスト2-7 を参照)。このインターフェイスで定義されるメソッドはありません。単にマーカとして使用されます。 コード リスト 2-7 TransactionalObject インターフェイス TransactionFactory インターフェイス TransactionFactory インターフェイスは、トランザクションの開始元がトランザクションを開始できるようにするためのものです。このインターフェイスは、最上位トランザクションの新しい表現を作成する、作成と再作成の 2 つのオペレーションを定義します。TransactionFactory は、ORB インターフェイスの resolve_initial_reference() オペレーションではなく、ライフ・サイクル・サービスの FactoryFinder インターフェイスを使用して検索します。 リスト2-8 では、TransactionFactory インターフェイスを示します。 注記 TransactionFactory インターフェイスの Control recreate メソッドはサポートされていません。 コード リスト 2-8 TransactionFactory インターフェイス 表 2-4 では、TransactionFactory インターフェイスのメソッドを示します。
interface TransactionalObject {
};// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用interface TransactionFactory {
Control create(in unsigned long time_out);
Control recreate(in PropagationContext ctx);
};// この情報は、「OMG Transaction Service Specification,
// Version 1.1」 (2000 年 5 月) から。OMG の使用許可を得て
// 使用
その他の CORBA のオブジェクト・トランザクション・サービス・インターフェイス その他の CORBA のオブジェクト・トランザクション・サービス・インターフェイスはサポートされていません。前述の Current インターフェイスは、Bootstrap オブジェクトから取得した場合にのみサポートされます。前述の Control インターフェイスは、Current オブジェクトの get_control メソッドおよび suspend メソッドで取得した場合にのみサポートされます。 CORBA トランザクション・サービス API の拡張 ここでは、前述の CORBA のオブジェクト・トランザクション・サービス API の特定の拡張について説明します。ここで説明する API を使用すると、アプリケーションは、Open Group リソース・マネージャをオープンまたはクローズできるようになります。 以下の API は、2 フェーズ・コミット・プロトコルを Open Group の XA インターフェイスで制御できるようにすることで、リソース・マネージャが簡単に分散トランザクションに関与できるようにします。 以下の定義とインターフェイスは、Tobj モジュールで定義されます。 Exception 以下の例外がサポートされています。 exception RMfailed {}; 要求により、リソース・マネージャのオープンまたはクローズに失敗したことを通知するために例外が発生します。 TransactionCurrent インターフェイス このインターフェイスは、CosTransactions モジュールの Current インターフェイスのすべてのメソッドをサポートしています。これについては、『BEA Tuxedo CORBA プログラミング・リファレンス』の「CORBA ブートストラップ処理のプログラミング・リファレンス」で説明しています。さらに、このインターフェイスは、リソース・マネージャをオープンまたはクローズする API をサポートします。 リスト2-9 では、Tobj モジュールで定義されている TransactionCurrent インターフェイスを示します。 コード リスト 2-9 TransactionCurrent インターフェイス Interface TransactionCurrent: CosTransactions::Current { 表 2-5 では、リソース・マネージャ固有の API を説明しています。これらの API の詳細については、『BEA Tuxedo CORBA プログラミング・リファレンス』を参照してください。
void open_xa_rm()
raises(RMfailed);
void close_xa_rm()
raises(Rmfailed);
}
BEA Tuxedo CORBA アプリケーションのトランザクションの使用に関する注意事項
BEA Tuxedo CORBA クライアント/サーバ・アプリケーションにトランザクションを統合する場合は、以下のガイドライン考慮してください。
Java
org.omg.CORBA.OBJ_ADAPTER
C++
CORBA::OBJ_ADAPTER
トランザクション内にあるクライアントが、現在別のトランザクション内にあるオブジェクトに対してオペレーションを呼び出そうとすると、以下のエラー・メッセージが発行されます。
Java
org.omg.CORBA.INVALID_TRANSACTION
C++
CORBA::INVALID_TRANSACTION
トランザクション外でオブジェクトが呼び出された場合、データの読み取りに対するトランザクションのスコープにオーバーヘッドは生じません。この方法で、トランザクション内でオブジェクトが呼び出されるかどうかに関係なく、オブジェクトのすべての書き込みオペレーションは、トランザクションに関与する形で処理されます。
UserTransaction API
ここでは、以下の内容について説明します。
UserTransaction メソッド
表 2-6 では、UserTransaction オブジェクトのメソッドについて説明します。
UserTransaction メソッドがスローする例外
表 2-7 では、UserTransaction オブジェクトのメソッドがスローする例外について説明します。
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |