利点
次の据え置き enlist の図を検討してください。
- 据え置き enlist を使用するアプリケーション・コンポーネントは、
グローバル・トランザクション内から getConnection メソッドを呼び出します。
- アプリケーション・コンポーネントは、この接続をすぐには使用しません。
- この接続を最初に使用するための呼び出しをアプリケーションが行うと、
トランザクション・マネージャーがその呼び出しをインターセプトします。
- トランザクション・マネージャーは、接続用の XA リソースを
登録し、XAResource.start メソッドを呼び出します。
- XA リソースに関連した接続マネージャーが、
データベースに呼び出しを送信します。
同じシナリオでも、アプリケーション・コンポーネントが
据え置き enlist を使用
しない 場合、
コンポーネント・コンテナーは、接続を即時にトランザクションに登録します。
これにより、アプリケーション・サーバーで、
そのトランザクションに関連したすべてのオーバーヘッドの追加のロードが、
無意味に発生します。
XA 接続の場合、このオーバーヘッドには、
リソース・マネージャーに対する 2 フェーズ・コミット (2PC) プロトコルが
含まれます。
据え置き enlist により、取得した接続が UOW のスコープで
使用されない場合のパフォーマンスが向上します。
この手法により、参加が発生する必要がある UOW までの
トランザクション参加のコストが節約されます。
使用するリソース・アダプターに
この機能があるかどうかを調べる必要がある場合は、
リソース・アダプターのプロバイダーに確認してください。
WebSphere Application Server のリレーショナル・リソース・アダプターは、
自動的に据え置き enlist をサポートします。
ご使用のコードへの据え置き enlist の取り込み
J2EE コネクター・アーキテクチャー (JCA) バージョン 1.5 仕様では、据え置き
enlist の手法を
遅延トランザクション enlist の最適化 と呼んでいます。
このサポートは、マーカー・インターフェース (LazyEnlistableManagedConnection) および接続マネージャーの新しいメソッド
(LazyEnlistableConnectionManager()) により実現されています。
package javax.resource.spi;
import javax.resource.ResourceException;
import javax.transaction.xa.Xid;
interface LazyEnlistableConnectionManager { // application server
void lazyEnlist(ManagedConnection) throws ResourceException;
}
interface LazyEnlistableManagedConnection { // resource adapter
}