Oracle® Fusion Middleware Oracle WebLogic Server JTA プログラマーズ ガイド 11g リリース 1 (10.3.1) B55540-01 |
|
戻る |
次へ |
外部のサード パーティのシステムは、WebLogic Server トランザクション マネージャに javax.transaction.xa.XAResource
実装を登録することによって、WebLogic Server トランザクション マネージャが調整する分散トランザクションに参加できます。WebLogic Server トランザクション マネージャは、2 フェーズ コミット (2PC) プロトコルの一部として XAResource を駆動します。これを、「トランザクションのエクスポート」と言います。
サード パーティ トランザクション マネージャが XAResource
インタフェースを実装している場合、トランザクションをエクスポートすることによって、サード パーティ トランザクション マネージャと WebLogic Server トランザクション マネージャを統合できます。エクスポートしたトランザクションによって、サード パーティ トランザクション マネージャは、WebLogic Server トランザクション マネージャの従属トランザクション マネージャとして機能できます。
WebLogic Server も、サード パーティ システム (外部トランザクション マネージャとも呼ばれる) が調整する分散トランザクションに参加できます。WebLogic Server の処理は、外部トランザクションの処理の一部として行われます。サード パーティ トランザクション マネージャは、コミット処理の一部として WebLogic Server のトランザクション マネージャを駆動します。これは、トランザクションのインポートと呼ばれます。
トランザクションにおけるサード パーティ システムの調整 (トランザクションのエクスポート) の詳細については、以下の節で説明します。サード パーティ システムが調整するトランザクションへの参加 (トランザクションのインポート) の詳細については、「サード パーティ トランザクション マネージャで管理されるトランザクションへの参加」を参照してください。WebLogic Server IIOP、WebLogic Tuxedo Connector (WTC) ゲートウェイ、および Oracle Java Adapter for Mainframe (JAM) ゲートウェイの内部では、その章で説明されているのと同じメカニズムにより、WebLogic Server におけるトランザクションのインポートおよびエクスポートが行われます。
以下の節では、サード パーティ システムをコンフィグレーションして、WebLogic Server トランザクション マネージャが調整するトランザクションに参加する方法について説明します。
WebLogic Server トランザクション マネージャが調整する分散トランザクションに参加するには、サード パーティのシステムで javax.transaction.xa.XAResource
インタフェースを実装し、その XAResource
オブジェクトを WebLogic Server トランザクション マネージャに登録する必要があります。javax.transaction.xa.XAResource
インタフェースの実装に関する詳細については、以下の URL の Java Platform Enterprise Edition, v 5.0 API 仕様を参照してください。
http://java.sun.com/javaee/5/docs/api/javax/transaction/xa/XAResource.html
トランザクション処理時は、サード パーティ システムの XAResource
オブジェクトを適切な各トランザクション オブジェクトに登録する必要があります。
図 11-1 は、WebLogic Server トランザクション マネージャが調整するトランザクションにサード パーティ システムが参加するプロセスを示したものです。
XAResource オブジェクトをトランザクションに登録する際に使用する登録モードに応じて、WebLogic Server は、適切な時に XAResource オブジェクトを自動的に解放する場合があります。登録および解放の詳細については、「トランザクションにおける XAResource の登録と解放」を参照してください。XAResource オブジェクトを WebLogic Server トランザクション マネージャで登録する詳細については、「XAResource のトランザクションへの参加の登録」を参照してください。
WebLogic Server トランザクション マネージャが調整する分散トランザクションに参加するには、サード パーティのシステムで javax.transaction.xa.XAResource
インタフェースを実装し、その XAResource
オブジェクトを WebLogic Server トランザクション マネージャに登録する必要があります。以下の処理のために登録が必要となります。
XAResource
のトランザクション ブランチ修飾子の指定。ブランチ修飾子はリソース マネージャ インスタンスのトランザクション ブランチを識別し、リソース マネージャ (RM) インスタンスが参加するすべての分散トランザクションに使用されます。各トランザクション ブランチは分散トランザクションの処理の 1 単位を表し、他のブランチとは分離しています。各トランザクション ブランチは、2 フェーズ コミット (2PC) 処理時に、準備とコミットの呼び出しのセットを 1 つだけ受け取ります。WebLogic Server トランザクション マネージャは、トランザクション ブランチ修飾子としてリソース名を使用します。
リソース マネージャ インスタンスは XAResource.isSameRM
メソッドによって定義されます。同じリソース マネージャ インスタンスに属する XAResource インスタンスは、isSameRM
に対して true を返すことになります。トランザクション ブランチの混乱を避けるために、同じリソース マネージャ インスタンスを異なるリソース名 (異なるリソース ブランチ) で登録しないでください。
登録モードの指定。リソース マネージャ インスタンスが特定の分散トランザクションに参加するには、XAResource インスタンスを JTA javax.transaction.Transaction
オブジェクトに登録する必要があります。WebLogic Server のトランザクション マネージャでは、静的、動的、およびオブジェクト指向の 3 つの登録モードが用意されています。登録モードの詳細については、「トランザクションにおける XAResource の登録と解放」を参照してください。
WebLogic Server トランザクション マネージャがクラッシュの回復を行う必要がある場合の XAResource
のブートストラップ (JTA 仕様には、この処理を行うための標準 API は定義されていません。http://java.sun.com/products/jta/index.html
の「Java Transaction API 」を参照してください)。
Java Transaction API では、ブランチ修飾子の割り当てはトランザクション マネージャで行うことが推奨されます。ただし、適切に回復を行うには、正常な処理時とクラッシュ回復時の両方において、同じトランザクション ブランチ修飾子が提供される必要があります。トランザクション ブランチ修飾子が登録時に指定されるため、WebLogic Server トランザクション マネージャでの登録が、クラッシュの回復と正常なトランザクション処理をサポートするために必要となります。
回復時に、WebLogic Server トランザクション マネージャは以下のタスクを行います。
トランザクション マネージャのトランザクション ログ レコードと、記録されている分散トランザクションに参加した XA リソースのログ レコードの読み込み、および 2PC プロトコルの第 2 フェーズの続行と指定したブランチ修飾子の XA リソースのコミット。
XAResource.recover
を呼び出すことによる、XA リソースのすべての不明なトランザクションの解決。その後の、返された所属のトランザクション (Xid) のコミットまたはロールバック (返された Xid は、すでに特定のブランチ修飾子を持っている場合がある)。
注意 : ここで述べる登録はプロセスごとの処理です (トランザクションごとの登録および解放とは異なります)。 |
XAResource 実装を WebLogic Server トランザクション マネージャに登録しないと、予期しないトランザクション ブランチ動作を引き起こす可能性があります。XA リソースが WebLogic Server 分散トランザクションに登録される前にこの登録を行わないと、WebLogic Server トランザクション マネージャはリソース名 (ブランチ修飾子) として XAResource インスタンスのクラス名を使用します。これによって、望ましくないリソース名やトランザクション ブランチの衝突が発生する可能性があります。
各リソース マネージャ インスタンスが、自身を一度だけ WebLogic Server トランザクション マネージャに登録するようにしてください。各リソース マネージャ インスタンスは登録時にリソース名によって識別されるので、回復、コミット処理、および状態モニタ時にシステムに過大なオーバーヘッドが加わり、関連する内部データ構造によって使用されるメモリが増加し、内部マップの検索効率が低下します。したがって、スケーラビリティおよびパフォーマンスの理由から、異なるトランザクション ブランチで XAResource インスタンスをむやみに登録しないようにする必要があります。
JTA XAResource では明示的なトランザクション モデルが採用されています。このモデルでは、Xid が常に XAResource メソッドで明示的に渡され、1 つのリソース マネージャ インスタンスがすべてのトランザクションを処理します。これは、暗黙的なトランザクション モデルが採用されている CORBA OTS リソースと対照的です。このモデルでは、参加対象の各トランザクションに対して異なる OTS リソース インスタンスが存在します。XAResource を設計する際は、JTA モデルを使用する必要があります。
各外部リソース マネージャ インスタンスは、サーバの起動時に WebLogic Server トランザクション マネージャに XAResource インスタンスを登録する必要があります。WebLogic Server では、起動クラスを使用して、外部トランザクション マネージャを登録できます。
WebLogic Server トランザクション マネージャにリソース マネージャを登録する手順は次のとおりです。
JNDI または TxHelper
インタフェースを使用して、WebLogic Server トランザクション マネージャを取得します。
import javax.transaction.xa.XAResource; import weblogic.transaction.TransactionManager; import weblogic.transaction.TxHelper; InitialContext initCtx = ... ; // 初期コンテキストに初期化する TransactionManager tm = TxHelper.getTransactionManager();
または
TransactionManager tm = (TransactionManager)initCtx.lookup("weblogic.transaction.TransactionManager");
または
TransactionManager tm = (TransactionManager)initCtx.lookup("javax.transaction.TransactionManager");
WebLogic Server トランザクション マネージャに XA リソース インスタンスを登録します。
String name = ... ; // RM インスタンスの名前 XAResource res = ... ; // RM インスタンスの XAResource インスタンス tm.registerResource(name, res); // 標準の登録モードでリソースを登録する
または
tm.registerDynamicResource(name, res); // 動的登録モードでリソースを登録する
または
tm.registerStaticResource(name, res); // 静的登録モードでリソースを登録する
さまざまな登録モードの詳細については、「トランザクションにおける XAResource の登録と解放」を参照してください。XAResource の登録時に以降に使用される登録モードを指定しますが、その登録プロセスの間に実際にリソースを登録しているわけではありません。実際の登録は、(サーバ起動時ではなく) トランザクションで別の API を使用して行う必要があります。詳細については、「トランザクションにおける XAResource の登録と解放」を参照してください。
登録する各 XAResource インスタンスは、複数のトランザクションの回復およびコミット処理に並列的に使用されます。JTA 仕様バージョン 1.0.1B のセクション 3.4.6 で定義されているリソース共有を XAResource インスタンスがサポートしていることを確認してください。
注意 : 同じ XAResource の重複登録は無視されます。 |
リソースで新しいリクエストを受け付けなくなったら、WebLogic Server トランザクション マネージャから XAResource の登録を解除する必要があります。XAResource の登録を解除するには、次のメソッドを使用します。
tm.unregisterResource(name, res);
XAResource が分散トランザクションに参加するには、XAResource インスタンスをそのトランザクション オブジェクトに登録する必要があります。登録モードに応じて、異なる処理を実行する必要がある場合があります。WebLogic Server トランザクション マネージャでは、以下の登録モードがサポートされています。
XAResource はトランザクション オブジェクトに登録しますが、登録モードが決まるのは、リソースをトランザクションに登録する際ではなく、WebLogic Server トランザクション マネージャに XAResource を登録する際です。「XAResource のトランザクションへの参加の登録」を参照してください。
XAResource.start
および end
の呼び出しは、コストがかかる場合があります。WebLogic Server トランザクション マネージャでは、これらの呼び出しの数を最小化するために以下の最適化方法が提供されています。
遅延解放
WebLogic Server トランザクション マネージャは XAResource 実装が明示的な解放を行うかどうかに関わらず、XAResource が解放される以下のイベントが発生する直前までは、現在のトランザクションに登録されているすべての XAResource インスタンスの解放を常に遅延します。
呼び出しが正常に、または例外として呼び出し側に返される。
別のサーバが呼び出される。
重複登録の無視
WebLogic Server トランザクション マネージャは、すでに登録されている XAResource の明示的な登録をすべて無視します。これは、XAResource が明示的に解放され (前述のように WebLogic Server トランザクション マネージャによって遅延または無視され)、同じ呼び出しの間の中で続いて再登録されている場合に起こることがあります。
WebLogic Server トランザクション マネージャではデフォルトで、TMSUSPEND
フラグが指定された XAResource.end
を呼び出すことによって XAResource を解放します。TMSUSPEND
が指定された XAResource.end
が呼び出されると、カーソルが開いたままになるデータベース管理システムもあるので、可能な限り、TMSUCCESS
を指定した XAResource.end
を呼び出して XAResource を解放するようにしてください。これを行うには、javax.transaction.xa.XAResource
の代わりに getDelistFlag
メソッドが含まれる weblogic.transaction.XAResource
インタフェースを実装します。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.XAResource
」を参照してください。
標準的な登録モードでは、トランザクション オブジェクトに XAResource インスタンスを登録するのは一度だけです。また、同じトランザクションに同じブランチの XAResource インスタンスを 2 つ以上登録することもできます。WebLogic Server トランザクション マネージャでは、すべての XAResource インスタンスに対して適切な場合に XAResource.end
が呼び出されます (以下の説明を参照)。WebLogic Server トランザクション マネージャでは、トランザクションのコミット時に、各ブランチが準備とコミットの呼び出しのセットを 1 つだけ受け取ります。ただし、登録済みの特定の XAResource インスタンスの登録は無視されます。
標準的な登録では登録が簡素化されますが、特定のメソッド呼び出しの間の中でリソースが全くアクセスされない場合には、XAResource の不必要な登録および解放が生じる可能性もあります。
トランザクション オブジェクトに XAResource を登録するには、以下の手順に従います。
TransactionHelper
インタフェースを使用して現在のトランザクション オブジェクトを取得します。
import weblogic.transaction.Transaction; // javax.transaction.Transaction を拡張する import weblogic.transaction.TransactionHelper; Transaction tx = TransactionHelper.getTransaction();
トランザクション オブジェクトに XAResource インスタンスを登録します。
tx.enlistResource(res);
XAResource をトランザクションに登録すると、WebLogic Server トランザクション マネージャによって、以降のすべての解放 (「トランザクションにおける XAResource の登録と解放」を参照) および再登録が管理されます。標準的な登録モードでは、WebLogic Server トランザクション マネージャは、以下の場合に同じトランザクションで XAResource を再登録します。
リクエストが実行される前。
別のサーバから応答が受信された後 (WebLogic Server トランザクション マネージャは、別のサーバにリクエストを送信する前に XAResource を解放します)。
動的な登録モードでは、リソースの各アクセス前にトランザクション オブジェクトに XAResource インスタンスを登録する必要があります。この登録モードでは、各トランザクションに一度に登録できる XAResource インスタンスは、各トランザクション ブランチから 1 つのみです。WebLogic Server トランザクション マネージャは、最初のインスタンスが登録されてから解放されるまでの間、同じトランザクション ブランチの別の XAResource インスタンスの登録を無視します。
動的な登録では、XAResource インスタンスの登録と解放は最小限に抑えられます。
XAResource を登録する手順は、「標準的な登録」で説明した手順と同じです。
静的な登録モードでは、トランザクション オブジェクトに XAResource インスタンスを登録する必要はありません。XAResource は、以下のイベントの際に WebLogic Server トランザクション マネージャによって、すべてのトランザクションについて暗黙的に登録されます。
リクエストが実行される前。
別のサーバから応答が受信された後。
注意 : 静的な登録モードを使用する前に以下の点を考慮する必要があります。
静的な登録は、パフォーマンスのオーバーヘッドが大きく、障害分離が不十分な上、トランザクションの関連付けに関する要件が厳しいため、十分に検討した上で慎重に使用する必要があります。 |
コミット処理の間、WebLogic Server トランザクション マネージャは、2 フェーズ コミットを行うため、トランザクション マネージャに登録されている XAResource インスタンスか、トランザクションに現在登録されている XAResource インスタンスのいずれかを使用します。WebLogic Server トランザクション マネージャでは、各トランザクション ブランチが準備とコミットの呼び出しのセットを 1 つだけ受け取ります。JTA 仕様バージョン 1.0.1B のセクション 3.4.6 で定義されているように、さまざまなスレッドから同時に複数のトランザクションのコミット処理を行うために、どのような XAResource インスタンスも使用できるようにする必要があります。
WebLogic Server サーバが再起動されると、WebLogic Server トランザクション マネージャは自身のトランザクション ログ (正常に準備されたが、2PC 処理の第 2 コミット フェーズを終了していない可能性のあるトランザクションのログ記録) を読み込みます。WebLogic Server トランザクション マネージャは次に、これらのトランザクションの XAResource のコミットの再試行を続行します。「XAResource のトランザクションへの参加の登録」で説明したように、WebLogic Server トランザクション マネージャのリソース登録 API は、回復を目的とした XAResource インスタンスのブートストラップにも使用されます。サーバの再起動時に XAResource インスタンスが WebLogic Server トランザクション マネージャに登録されていることを確認する必要があります。WebLogic Server トランザクション マネージャは、有効な XAResource インスタンスが WebLogic Server トランザクション マネージャに登録されるまで、コミット呼び出しを毎分再試行します。
トランザクション コーディネータとして機能しているトランザクション マネージャがクラッシュすると、コーディネータのトランザクション ログにいくつかの不明なトランザクションが記録されないこともあります。したがって、コーディネータではサーバの再起動時に、リソース マネージャに対して XAResource.recover
を呼び出し、記録されなかった不明なトランザクションをロールバックする必要があります。コミットの再試行と同様に、WebLogic Server トランザクション マネージャは、有効な XAResource インスタンスが WebLogic Server トランザクション マネージャに登録されるまで、5 分間隔で XAResource.recover
を再試行します。
WebLogic Server トランザクション マネージャは、新しい XAResource が最初に WebLogic Server トランザクション マネージャに登録される際、トランザクション ログ レコードにそのチェックポイントを記録します。サーバの再起動時に、WebLogic Server トランザクション マネージャは、前にチェックポイントが記録され (トランザクション終了後にトランザクション ログ レコードから削除され) たすべてのリソースに対して XAResource.recover
を呼び出します。リソースがチェックポイント記録から削除されるのは、最後の PurgeResourceFromCheckpointIntervalSeconds
間隔 (デフォルトは 24 時間) にアクセスされていない場合のみです。したがって、リソース回復のオーバーヘッドを軽減するには、WebLogic Server トランザクション マネージャに登録されているリソース マネージャ インスタンスの数を最小限にする必要があります。
XAResource.recover
を実装する際は、以下に示す X/Open XA 仕様で説明されているようにフラグを使用する必要があります。
WebLogic Server トランザクション マネージャで、TMSTARTRSCAN
が指定された XAResource.recover
を呼び出すと、不明 Xid の最初のバッチがリソースによって返される。
WebLogic Server トランザクション マネージャでは次に、回復すべき Xid がこれ以上ないことを示す null または長さゼロの配列のいずれかがリソースによって返されるまで、TMNOFLAGS
が指定された XAResource.recover
の呼び出しを繰り返し行います。前の XAResource.recover(TMSTARTRSCAN)
呼び出しですべての Xid がリソースによってすでに返されている場合、ここで null または長さゼロの配列が返されるか、前の回復スキャンがすでに終了および削除されたことを示す XAER_PROTO
が送出されることもあります。XAResource.recover
実装の一般的な問題は、フラグが無視されることや、XAResource.recover(TMNOFLAGS)
に対して常に同じ Xid のセットが返されることです。これによって、WebLogic Server トランザクション マネージャの回復が無限ループに陥り、後の失敗が引き起こされます。
WebLogic Server トランザクション マネージャで TMENDRSCAN
フラグが指定された XAResource.recover
を呼び出すと、回復スキャンが終了する。追加の Xid がリソースによって返される場合があります。
問題のある XAResource に対してサーバ スレッドを失わないように、WebLogic Server JTA には内部リソース状態モニタのメカニズムがあります。リソースがアクティブであると見なされるのは、保留中のリクエストが存在しない場合、または XAResource の保留中のリクエストの結果が XAER_RMFAIL
ではない場合です。XAResource が 2 分以内にアクティブにならない場合、WebLogic Server トランザクション マネージャは XAResource を応答なしと宣言します。XAResource に対する新たなリクエストは拒否され、XAER_RMFAIL XAException
が送出されます。
2 分という間隔は、maxXACallMillis
JTAMBean 属性を介してコンフィグレーションできます。これは Administration Console ではエクスポーズされていません。maxXACallMillis
は、config.xml
ファイル内でコンフィグレーションできます。次に例を示します。
<Domain> ....<JTA MaxXACallMillis="240000" /> ....</Domain>
WebLogic Server トランザクション マネージャから通知を受信し、リソースが応答なしと宣言されようとしている際に、本当に応答なしかどうかを WebLogic Server トランザクション マネージャに通知するには、weblogic.transaction.XAResource
(javax.transaction.xa.XAResource
を拡張) を実装し、これをトランザクション マネージャに登録します。トランザクション マネージャは、XAResource が利用できないことを宣言しようとする際に、その detectUnavailable
メソッドを呼び出します。XAResource から true
が返されると、利用できないと宣言されることはありません。XAResource が本当に利用できない場合には、この機会にクリーンアップおよびトランザクション マネージャへの再登録を行うこともできます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.XAResource
」を参照してください。
WebLogic Server トランザクション マネージャに直接登録するほかに、Java EE コネクタ アーキテクチャのリソース アダプタ インタフェースを実装することもできます。リソース アダプタをデプロイする際、リソース マネージャの XAResource は、WebLogic Server Java EE コンテナによって WebLogic Server トランザクション マネージャに自動的に登録されます。
詳細については、『Oracle Fusion Middleware Oracle WebLogic Server リソース アダプタ プログラマーズ ガイド』を参照してください。
以下の節では、WebLogic Server トランザクション マネージャでのトランザクションのエクスポートとインポートのヒントについて説明します。
WebLogic Server トランザクション マネージャは、ゲートウェイなどのシステム アプリケーションで共有されるようにトランザクション ログをエクスポーズします。これによって、高速ロギングのために WebLogic Server トランザクション マネージャの一括 (バッチ) 処理のトランザクション ログ最適化をシステム アプリケーションで利用できます。トランザクション ログ記録は適時に解放することが重要となります (WebLogic Server トランザクション マネージャは、トランザクション ログ ファイル内のすべての記録が解放された場合にのみトランザクション ログ ファイルを削除します)。これを行わないと、トランザクション ログ ファイルが多数作成され、コミット済みのトランザクションの多くが再コミットされ、極端なケースでは、循環衝突やトランザクション ログ ファイルの上書きが発生する可能性があります。
WebLogic Server トランザクション マネージャは、トランザクション ログ機能インタフェース weblogic.transaction.TransactionLogger
をエクスポーズしています。これはサーバ上でのみ使用でき、以下の手順で取得できます。
サーバ トランザクション マネージャを取得します。
import weblogic.transaction.ServerTransactionManager; import weblogic.transaction.TxHelper; ServerTransactionManager stm = (ServerTransactionManager)TxHelper.getTransactionManager();
TransactionLogger
を取得します。
TransactionLogger tlog = stm.getTransactionLogger();
XAResource のログ記録は、トランザクション ログに記録されるために、weblogic.transaction.TransactionLoggable
インタフェースを実装する必要があります。weblogic.transaction.TransactionLogger
インタフェース、および TransactionLogger
インタフェースの用途に関する詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.TransactionLogger
」を参照してください。
WebLogic Server JTA トランザクション オブジェクトは、ローカルおよびグローバルのプロパティに関連付けられます。グローバル プロパティは、トランザクション伝播コンテキストでサーバ間を伝播され、トランザクション ログにログ記録の一部としても保存されます。トランザクションのグローバル プロパティにアクセスするには、以下の手順に従います。
トランザクション オブジェクトを取得します。
import weblogic.transaction.Transaction; import weblogic.transaction.TransactionHelper; Transaction tx = TransactionHelper.getTransaction(); // スレッドに関連付けられたトランザクションを取得する
または
Transaction tx = TxHelper.getTransaction(xid); // 特定の Xid を持つトランザクションを取得する
トランザクション オブジェクトのプロパティを取得または設定します。
tx.setProperty("foo", "fooValue"); tx.getProperty("bar");
詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.TxHelper
」を参照してください。
TxHelper.createXid(int formatId, byte[] gtrid, byte[] bqual)
メソッドを使用すると Xid を作成できます。作成した Xid は、たとえば、回復時に WebLogic Server トランザクション マネージャに返すことができます。
詳細については、『Oracle Fusion Middleware Oracle WebLogic Server API Reference』の「weblogic.transaction.TxHelper
」を参照してください。
このリリースでは、XA データ ソース コンフィグレーションのリソース登録名の動作が変更されました。以前のリリースでは、JTA の登録名はデータ ソースの名前のみでした。今後は、データ ソース名とドメインの組み合わせになります。
JTA に登録されたすべてのリソースには、対応する実行時 MBean が存在し、MBean を通じてそのリソースの XA 使用状況の統計が公開されます。今回の変更により、MBean の JMX ObjectName
が変わる (修飾される) ため、既存のアプリケーションでそのような実行時 MBean の JMX ルックアップを名前に基づいて実行している場合は、何らかの影響を受ける可能性があります。旧リリースでは、ドメイン mydomain
の mydatasource
という名前を持つデータ ソース コンフィグレーションの場合、JTA リソースの実行時 MBean は、次のようなオブジェクト名で登録されていました。
com.bea:ServerRuntime=myserver,Name=mydatasource,Type=TransactionResourceRuntime,JTARuntime=JTARuntime
このリリースでは、次のように修飾されたオブジェクト名が使用されます。
com.bea:ServerRuntime=myserver,Name=mydatasource_mydomain,Type=TransactionResourceRuntime,JTARuntime=JTARuntime
トランザクション ブランチ修飾子は、JTA リソース登録名からも派生します。そのため、アップグレード時に存在する XA データ ソースの保留トランザクション ブランチは、アップグレード後に回復できないことがあります。アップグレードは、データベース リソースに保留トランザクションが残っていない状態で実行することをお勧めします。保留データベース トランザクションが残っていると、場合によってはデータベース管理者がそれらを手動で解消することが必要になります。
このリリースでは、登録名の修飾を無効にするための次のようなシステム プロパティが新たに使用できるようになりました。
-Dweblogic.jdbc.qualifyRMName=false
XAResource の Xid にはブランチ修飾子があるのに、トランザクション マネージャのトランザクションにブランチ修飾子がないのはなぜか。
WebLogic Server JTA トランザクション オブジェクトはブランチ修飾子は持ちません (すなわち、TxHelper.getTransaction().getXid().getBranchQualifier()
は null になります)。ブランチ修飾子は個々のリソース マネージャに固有のため、WebLogic Server トランザクション マネージャは、XAResource メソッドに渡される Xid でのみブランチ修飾子を設定します。
TxHelper.getTransaction()
メソッドの使用目的は何か。
WebLogic Server JTA では、現在のスレッドに関連付けられたトランザクションを返すために、TxHelper.getTransaction()
API が提供されています。ただし、WebLogic Server JTA は、XAResource メソッドを呼び出す前にトランザクション コンテキストをサスペンドするので、トランザクションの識別に頼れるのは、現在のスレッドに関連付けられたトランザクションではなく、Xid 入力パラメータのみです。
接続ベースのリソース使用のシナリオについては、JTA 仕様 1.0.1B のセクション 4.1 を参照してください。トランザクション マネージャとリソース マネージャの間の JTA 対話について説明されています。JTA 仕様は http://java.sun.com/products/jta/
で参照できます。