ナビゲーションをスキップ

WebLogic JTA プログラマーズ ガイド

  前 次 前/次ボタンと目次ボタンとの区切り線 目次  

サードパーティ トランザクション マネージャで管理されるトランザクションへの参加

WebLogic Server は、サードパーティ システム (外部トランザクション マネージャと呼ばれる) が調整する分散トランザクションに参加できます。WebLogic Server の処理は、外部トランザクションの処理の一部として行われます。外部トランザクション マネージャは、コミット処理の一部として WebLogic Server のトランザクション マネージャを駆動します。これは、WebLogic Server へのトランザクションの「インポート」と呼ばれます。

以下の節では、外部管理トランザクションのコンフィグレーションおよび外部管理トランザクションへの参加のプロセスについて説明します。

 


外部管理トランザクションへの参加の概要

WebLogic Server のトランザクション マネージャは、weblogic.transaction.InterposedTransactionManager インタフェースを通じて、javax.transaction.xa.XAResource 実装をエクスポーズします。外部トランザクション マネージャは、InterposedTransactionManager インタフェースにアクセスして、コミット処理時に WebLogic Server トランザクション マネージャの XAResource を調整することができます。

外部トランザクション マネージャのトランザクションを WebLogic Server のトランザクション マネージャにインポートする場合には、外部トランザクション マネージャに従属マネージャとして、WebLogic Server 介在トランザクション マネージャを登録する必要があります。その結果、WebLogic Server のトランザクション マネージャは、インポートされたトランザクションの調整役として WebLogic Server 内で機能します。

WebLogic Server では、トランザクションのインポートに関して、次の 2 つのコンフィグレーション方式がサポートされています。

実装の詳細および制限に関してはいくつかの違いがありますが、どちらのコンフィグレーションもトランザクションのインポートについての基本機能は同じです。

  1. WebLogic Server のトランザクション マネージャをルックアップし、サードパーティ システムでの必要に基づいて、XAResource として登録します。
  2. トランザクション処理時に適切なトランザクション参加者を登録および解放します。
  3. 準備メッセージを WebLogic Server のトランザクション マネージャに送信します。このトランザクション マネージャは、従属トランザクション マネージャとして機能し、WebLogic Server 内でトランザクション参加者の準備フェーズを調整します。
  4. コミットまたはロールバック メッセージを WebLogic Server のトランザクション マネージャに送信します。このトランザクション マネージャは、従属トランザクション マネージャとして機能し、WebLogic Server 内でトランザクション参加者の 2 フェーズ コミット プロセスの第 2 フェーズを調整します。
  5. 必要に応じて登録解除します。

 


クライアント介在トランザクション マネージャでのトランザクションのインポート

WebLogic Server でクライアント介在トランザクション マネージャを使用して、サードパーティのトランザクション マネージャが調整するトランザクションに対して 2 フェーズ コミット プロセスを駆動し、WebLogic Server 内に JMS リソースや JDBC リソースなどのトランザクション参加者を含めることができます。クライアント介在トランザクション マネージャは、javax.transaction.xa.XAResource インタフェースの実装です。クライアント介在トランザクション マネージャには、サードパーティ アプリケーションから直接アクセスします。通常は、サードパーティ アプリケーションのゲートウェイからアクセスします。サードパーティ システムのトランザクション マネージャは、準備メッセージおよびコミット メッセージをゲートウェイに送信し、ゲートウェイがそのメッセージを WebLogic Server トランザクション マネージャに伝播します。そして、WebLogic Server のトランザクション マネージャが従属トランザクション マネージャとして機能し、WebLogic Server 内でトランザクション参加者を調整します。図 9-1 に、2 つのトランザクション マネージャとクライアントサイド ゲートウェイとの間の対話を示します。

図 9-1 クライアントサイド ゲートウェイを使用した WebLogic Server へのトランザクションのインポート

クライアントサイド ゲートウェイを使用した WebLogic Server へのトランザクションのインポート


 

図 9-2 には、外部トランザクション マネージャ、WebLogic Server クライアントサイド JTA オブジェクト、および WebLogic Server トランザクション マネージャの間の対話フローを示します。

図 9-2 クライアント介在トランザクション マネージャを使用したトランザクションのインポート手順を示した状態図

クライアント介在トランザクション マネージャを使用したトランザクションのインポート手順を示した状態図


 

クライアントサイド ゲートウェイを使用して WebLogic Server の介在トランザクション マネージャにアクセスするには、次の手順を行う必要があります。

クライアント介在トランザクション マネージャの取得

クライアントサイド ゲートウェイにおいて、WebLogic Server 介在トランザクション マネージャの XAResource を getClientInterposedTransactionManager メソッドで取得できます。次に例を示します。

import javax.naming.Context;
import weblogic.transaction.InterposedTransactionManager;
import weblogic.transaction.TxHelper;
Context initialCtx;
String serverName;
InterposedTransactionManager itm = TxHelper.getClientInterposedTransactionManager(initialCtx, serverName);

serverName パラメータは、外部トランザクションに対して介在トランザクション マネージャとして機能するサーバの名前です。外部トランザクション マネージャはクラッシュの回復処理を行う際に、同じ WebLogic Server のサーバに接続して、WebLogic Server にインポート済みの不明なトランザクションのリストを取得する必要があります。

weblogic.transaction.TxHelper クラスの詳細については、「WebLogic Server の Javadoc」を参照してください。

介在トランザクション マネージャからの XAResource の取得

介在トランザクション マネージャを取得したら、その介在トランザクション マネージャに関連付けられた XAResource オブジェクトを取得する必要があります。

import javax.transaction.xa.XAResource;
XAResource xar = itm.getXAResource();

クライアント介在トランザクション マネージャの制限

クライアントサイドのゲートウェイを使用してトランザクションをインポートする際は、次の制限に注意してください。

 


サーバ介在トランザクション マネージャでのトランザクションのインポート

WebLogic Server でサーバ介在トランザクション マネージャを使用して、サードパーティのトランザクション マネージャが調整するトランザクションに対して 2 フェーズ コミット プロセスを駆動し、WebLogic Server 内に JMS リソースや JDBC リソースなどのトランザクション参加者を含めることができます。サーバ介在トランザクション マネージャは、javax.transaction.xa.XAResource インタフェースの実装です。WebLogic Server にサーバサイドのゲートウェイを作成して、サードパーティ システムからそのゲートウェイにアクセスして、サーバ介在トランザクション マネージャにアクセスします。サードパーティ システムのトランザクション マネージャは、準備メッセージおよびコミット メッセージをサーバサイド ゲートウェイに送信し、そのゲートウェイがメッセージを WebLogic Server トランザクション マネージャに伝播します。そして、WebLogic Server のトランザクション マネージャが従属トランザクション マネージャとして機能し、WebLogic Server 内でトランザクション参加者を調整します。図 9-3 に、2 つのトランザクション マネージャとサーバサイド ゲートウェイとの間の対話を示します。

図 9-3 サーバサイド ゲートウェイを使用した WebLogic Server へのトランザクションのインポート

サーバサイド ゲートウェイを使用した WebLogic Server へのトランザクションのインポート


 

サーバサイド ゲートウェイを使用して WebLogic Server の介在トランザクション マネージャにアクセスするには、次の手順を行う必要があります。

サーバ介在トランザクション マネージャの取得

サーバサイド ゲートウェイにおいて、介在トランザクション マネージャの XAResource を次のようにして取得できます。

import javax.naming.Context;
import weblogic.transaction.InterposedTransactionManager;
import weblogic.transaction.TxHelper;
InterposedTransactionManager itm = TxHelper.getServerInterposedTransactionManager();

weblogic.transaction.TxHelper クラスの詳細については、「WebLogic Server の Javadoc」を参照してください。

介在トランザクション マネージャを取得したら、XAResource を取得する必要があります。「介在トランザクション マネージャからの XAResource の取得」を参照してください。

サーバ介在トランザクション マネージャの制限

サーバサイドのゲートウェイを使用してトランザクションをインポートする際は、次の制限に注意してください。

 


インポート済みトランザクションのトランザクション処理

外部トランザクションを WebLogic Server にインポートするには、外部トランザクション マネージャまたはゲートウェイで、次の操作を行います。

xar.start(foreignXid, TMNOFLAGS);

この操作によって、現在のスレッドとインポート済みトランザクションが関連付けられます。トランザクションとスレッドの関連付けが解除されるまで、他のサーバに対する以降のすべての呼び出しで、インポート済み WebLogic Server トランザクションが伝播されます。

注意 : WebLogic Server トランザクション マネージャでは、フラグが無視されます。外部 Xid が同じ WebLogic Server サーバにインポート済みの場合、WebLogic Server は現在のスレッドをインポート済みの WebLogic Server トランザクションに関連付けます。

インポート済みのトランザクションと現在のスレッドの関連付けを解除するには、外部トランザクション マネージャまたはゲートウェイで次の操作を行う必要があります。

xar.end(foreignXid, TMSUCCESS);

WebLogic Server のトランザクション マネージャがフラグを無視することに注意してください。

インポート済みトランザクションのトランザクション処理の制限

インポート済みのトランザクションに関して、次の処理の制限と動作に注意してください。

 


インポート済みトランザクションのコミット処理

外部トランザクション マネージャは、他の XAResource を駆動するように、2PC プロトコルにおいて介在トランザクション マネージャを駆動する必要があります。WebLogic Server JTA (EJB コンテナなど) に登録された beforeCompletion コールバックは、外部トランザクション マネージャが介在トランザクション マネージャの XAResource を準備する際に呼び出されることに注意してください。afterCompletion コールバックは、XAResource.commit または XAResource.rollback の間に呼び出されます。

WebLogic Server 介在トランザクション マネージャは、JTA 1.0.1b 仕様のセクション 3.4 で説明されている以下の XAResource 規約をサポートしています。

WebLogic Server トランザクション マネージャは、WebLogic Server のすべての参加者の準備が正常に行われると、インポート済みのトランザクションについて、prepare レコードを記録します。インポート済みのトランザクションについて WebLogic Server の参加者が 2 つ以上ある場合、トランザクション マネージャは XAResource.commit が 1 フェーズ コミットでも prepare レコードを記録します。

WebLogic Server トランザクション マネージャは、XAResource.commit または rollback についてヒューリスティックな出力がある場合、インポート済みトランザクションのヒューリスティックなレコードを記録します。このヒューリスティックなログ記録は、ヒューリスティックなログ ファイル (トランザクション ログ ファイルとは別) に格納されます。ヒューリスティックなログ ファイルの拡張子は、heur.tlog です。ヒューリスティック ログ ファイルの詳細については、Administration Console オンライン ヘルプの「ヒューリスティック ログ ファイル」を参照してください。

 


インポート済みトランザクションの回復

外部トランザクション マネージャのクラッシュの回復の間、外部トランザクション マネージャは、WebLogic Server 介在トランザクション マネージャの XAResource を再び取得し、これに対して recover を呼び出す必要があります。WebLogic Server 介在トランザクション マネージャは、準備されたトランザクションまたはヒューリスティックに終了したトランザクションのリストを返します。外部トランザクション マネージャでは、準備されたトランザクションをコミットまたはロールバックするか、ヒューリスティックに終了したトランザクションに対して forget を呼び出すかのいずれかの方法で、これらの不明なトランザクションを解決する必要があります。

 


JCA リソース アダプタ

JCA 仕様の現在のバージョンには、トランザクションのインポートに関する規定がありません。JCA 1.5 仕様には、トランザクションを J2EE コンテナにインポートするための API が含まれます。WebLogic Server JCA コンテナで JCA 1.5 仕様がサポートされると、リソース プロバイダでも JCA API を介してトランザクションをインポートできます。

 

フッタのナビゲーションのスキップ  ページの先頭 前 次