Administration Console オンライン ヘルプ
[JDBC データ ソースに関する属性と Administration Console 画面のリファレンス]
データ ソースオブジェクトを使うと、JDBC アプリケーションで接続プールから DBMS 接続を取得できます。各データ ソース オブジェクトは、JNDI ツリーにバインドされ、接続プールまたはマルチプールを指します。アプリケーションでは、JNDI ツリー上でデータ ソースをルックアップし、その後そのデータ ソースからの接続を要求します。データ ソース オブジェクトは、グローバル トランザクションをサポートするように定義できます (JTA のサポートを有効化)。グローバル トランザクションのサポートは、アプリケーションで分散トランザクションを使用する場合に必要です。データ ソースおよびトランザクションが有効化されたデータ ソースの使い方の詳細は、「データ ソースでグローバル トランザクションを有効化すべき場合」を参照してください。
使用しているアプリケーションまたは環境が、以下の条件の 1 つにでも当てはまる場合は、データ ソースでグローバル トランザクションを有効にする必要があります (コンフィグレーションの際に [グローバル トランザクションを受け付ける] を選択)。これにより、config.xml
ファイルにトランザクション データ ソースが作成されます。
EJB アーキテクチャでは、データベース処理を行っている複数の EJB が単一のトランザクションの一部として呼び出されるのは、よくあることです。XA がない場合、これを行える唯一の方法は、すべてのトランザクション参加リソースでまったく同じデータベース接続を使用することです。WebLogic Server では、JTS ドライバとトランザクション データ ソースを使用して、これをバックグラウンドで行います。JDBC 接続を EJB 間で明示的に渡す必要はありません。
複数の EJB が 1 つのトランザクションに参加しており、かつ、データベース接続に XA JDBC ドライバを使用しない場合は、以下のオプションを使用してデータ ソースをコンフィグレーションします。
このようにコンフィグレーションすることによって、同じトランザクション内のすべてのデータベース作業で同じデータベース接続を内部的に使用することが JTS ドライバに強制されます。
XA を用いると (XA ドライバが必要となります)、複数の EJB がトランザクションの各部分用に別々のデータベース接続を利用できるようにするため、2 フェーズ コミットを用いた分散トランザクションに対して WebLogic Server 内のトランザクション データ ソースを使用できます。 XA の有無のいずれの場合でも、トランザクション データ ソース ([グローバル トランザクションを受け付ける] を選択したデータ ソース) を使うことをお勧めします。
注意: 同じ接続プールを指すトランザクション データ ソースを 2 つ作成しないでください。同じ接続プールを指す 2 つの異なるトランザクション データ ソースがトランザクションで使用されている場合、2 番目の接続を取得しようとすると XA_PROTO エラーが発生します。
データ ソースの詳細については、『WebLogic JDBC プログラマーズ ガイド』を参照してください。
注意: 以前のリリースでは、Administration Console でデータ ソースとトランザクション データ ソースは、異なるオブジェクトのタイプとして表示されていました。 このリリースでは、Administration Console でデータ ソースとトランザクション データ ソースは、[データ ソース] として表示されます。
JDBC 接続プールで分散トランザクションのサポートが必要なのに、DBMS で利用できる XA 対応のドライバがない場合は、データ ソースに対して [非 XA ドライバ用に 2 フェーズ コミットをエミュレート] オプションを選択できます。これにより、接続プールが参加しているトランザクションについて、データ ソースは 2 フェーズ コミットをエミュレートするようになります。このオプションは、[データ ソース|コンフィグレーション] タブの詳細オプションです。
[非 XA ドライバ用に 2 フェーズ コミットをエミュレート] が選択されている (EnableTwoPhaseCommit
が true
に設定されている) 場合、非 XA JDBC リソースは XAResource.prepare
() メソッド呼び出し中に常に XA_OK
を返します。リソースは、後続の XAResource.commit
() または XAResource.rollback
() の呼び出しに応答して、ローカル トランザクションをコミットまたはロールバックしようとします。リソースのコミットまたはロールバックが失敗した場合は、ヒューリスティックなエラーが発生します。ヒューリスティック エラーの結果、アプリケーション データは矛盾した状態のまま残される場合があります。
[非 XA ドライバ用に 2 フェーズ コミットをエミュレート] オプションが Console で選択されていない (EnableTwoPhaseCommit
が false
に設定されている) 場合、非 XA JDBC リソースにより、XAResource.prepare
() が失敗します。トランザクションに参加するリソースが 1 つだけの場合、1 フェーズの最適化が XAResource.prepare
() をバイパスし、トランザクションはほとんどのインスタンスで正常にコミットされます。
詳細については、分散トランザクション用 非 XA JDBC ドライバのコンフィグレーションを参照してください。
注意: [非 XA ドライバ用に 2 フェーズ コミットをエミュレート] オプションを使用していると、データの整合性が損なわれるおそれがあります。このオプションよりも、XA 対応の JDBC ドライバを使用することをお勧めします。このオプションを有効にする前に、必ず以下のリスクを考慮してください。
この非 XA JDBC ドライバのサポートを「JTS ドライバ」と呼ぶこともあります。WebLogic Server では WebLogic JTS ドライバを使用してこの機能をサポートしているためです。JTS ドライバの詳細については、『WebLogic JDBC プログラマーズ ガイド』の「WebLogic JTS ドライバの使い方」を参照してください。
WebLogic Server では非 XA JDBC リソースのグローバル トランザクションへの参加をサポートしていますが、このリソースを使用するためにアプリケーションを設計する際に考慮すべき制限事項があります。非 XA ドライバは XA/2PC に従わず、1 フェーズのコミットおよびロールバック処理のみをサポートするため、WebLogic Server は (JTS ドライバを介して)、トランザクション マネージャによって制御されるトランザクションにリソースが参加できるように、譲歩する必要があります。
[非 XA ドライバ用に 2 フェーズ コミットをエミュレート] オプションを使用する前に、以下の制限およびリスクを考慮してください。
非 XA リソースで 2 フェーズ コミットのエミュレートを選択する場合 (enableTwoPhaseCommit = true
)、非 XA リソースに対するトランザクションの準備フェーズは常に成功します。したがって、非 XA リソースは 2 フェーズ コミット (2PC) プロトコルに実際には参加していないため、失敗しやすくなります。準備フェーズ後に非 XA リソースでエラーが発生した場合、XA トランザクションの参加コンポーネントがトランザクションをコミットする一方で、非 XA リソースはトランザクションをロールバックする可能性があり、ヒューリスティックな終了とデータの矛盾を招きます。
データの整合性が失われるおそれがあるため、2 フェーズ コミットのエミュレートのオプションは、ヒューリスティックな状況に耐えられるアプリケーションでのみ使用してください。
非 XA ドライバはローカル データベースのトランザクションのみを操作するため、外部トランザクション マネージャに関して、トランザクションがデータベース内で保留中の状態にあるという概念はありません。非 XA リソースの XAResource.recover()
が呼び出されると、コミットまたはロールバックする必要のあるトランザクションが存在する場合でも、常に Xid (トランザクション ID) の空のセットが返されます。そのため、グローバル トランザクションで非 XA リソースを使用するアプリケーションは、システムの障害から回復してデータの整合性を維持することができません。
WebLogic Server は特定の JDBC 接続に関連付けられたデータベース ローカル トランザクションに依存して、非 XA リソースのグローバル トランザクションへの参加をサポートしているため、同じ JDBC データ ソースが、複数の WebLogic Server インスタンス上にグローバル トランザクション コンテキストを持つアプリケーションからアクセスされる場合、JTS ドライバは常に、トランザクション内のアプリケーションによって確立される最初の接続に JDBC の処理をルーティングします。たとえば、あるサーバでアプリケーションがトランザクションを開始して非 XA JDBC リソースにアクセスし、別のサーバに RMI (Remote Method Invocation) 呼び出しを行って、同じ基底の JDBC ドライバを使用するデータ ソースにアクセスすると、JTS ドライバは、そのリソースには別のサーバ上のトランザクションに関連付けられた接続があることを認識して、RMI のリダイレクトを最初のサーバの実際の接続に設定します。接続に対するすべての操作は、最初のサーバで確立された 1 つの接続上で行われます。この動作では、リモート接続を設定して RMI 呼び出しを物理的な接続に対して行うことに関するオーバーヘッドが生じるため、パフォーマンスが低下する可能性があります。
非 XA リソース (2 フェーズ コミットのエミュレートを選択) が WebLogic Server トランザクション マネージャに登録される場合は、XAResource インタフェースを実装するクラスの名前と共に登録されます。2 フェーズ コミットのエミュレートを選択したすべての非 XA リソースは XAResource インタフェースに対する JTS ドライバを使用するため、グローバル トランザクションに参加する (2 フェーズ コミットのエミュレートを選択した) すべての非 XA リソースは、同じ名前で登録されます。グローバル トランザクションで複数の非 XA リソースを使用する場合、名前の衝突やヒューリスティックな終了が起きる可能性があります。
[名前]—この JDBC データ ソースの名前を入力します。データ ソースを参照する際は、この名前が常にコンフィグレーション ファイル (config.xml
) および Administration Console で使用されます。
[JNDI 名]—この JDBC データ ソースのバインド先となる JNDI のパスを入力します。セミコロン (;) で区切って複数の名前を指定できます。
[グローバル トランザクションを受け付ける]—このチェック ボックスをオン (デフォルト) にすると、このデータ ソースを使用するグローバル トランザクションが有効化されます。このチェック ボックスを選択解除すると、データ ソースを使用するグローバル トランザクションは無効になります (無視されます)。ほとんどの場合、このオプションは選択したままにしておきます。データ ソースでグローバル トランザクションを有効化すべき場合を参照してください。
[非 XA ドライバ用に 2 フェーズ コミットをエミュレート]—このチェック ボックスをチェックすると、2 フェーズ コミットをエミュレートすることで、関連付けられた非 XA 接続プールからの接続をグローバル トランザクションで使用できるようになります。このオプションを選択する場合には注意が必要です。グローバル トランザクションで非 XA ドライバを使用する場合の制限とリスクを参照してください。
WebLogic Server 8.1 SP3 以降のリリースでは、複数の名前を使って JNDI ツリーにバインドするようにデータ ソースをコンフィグレーションできます。 1 つの JDBC 接続プールを指す複数のデータ ソースをコンフィグレーションする代わりに、複数の名前を持つデータ ソースを使用できます。 BEA では、1 つの JDBC 接続プールを指す複数のデータ ソースのコンフィグレーションはサポートされていません。
既存のデータ ソースに JNDI 名を追加するには、[JNDI 名] 属性に名前をセミコロンで区切って追加します。 変更を行った後にシステムを再起動するか、または変更を行う前にデータ ソースをアンデプロイし、変更を行った後に再デプロイする必要があります。 次の手順に従います。
新しいデータ ソースに複数の JNDI 名を指定するには、JDBC データ ソースの作成とコンフィグレーションの手順に従います。
name1;name2;name3
config.xml ファイル内のデータ ソースのコンフィグレーションは、次のように変更されます。
<JDBCTxDataSource
JNDIName="name1;name2;name3"
Name="My Data Source"
PoolName="demoXAPool"
Targets="examplesServer"
/>
注意: 新しいデータ ソースに対しては、新しい JNDI 名を指定する必要があります。新しいデータ ソースは、元のデータ ソースと同じ JNDI 名を使用できません。
[コンフィグレーション] タブの属性の詳細については、「属性」を参照してください。
アプリケーション スコープの JDBC 接続プールでは、JDBC データ ソース ファクトリに依存して、デフォルトの接続プールの値を提供します。アプリケーション スコープの接続プールを含むエンタープライズ アプリケーションをデプロイする前に、データ ソース ファクトリを作成する必要があります。アプリケーションの weblogic-application.xml
補足デプロイメント記述子は、Administration Console で指定したファクトリ名で、データ ソース ファクトリを参照する必要があります。
アプリケーション スコープの JDBC 接続プールの詳細については、アプリケーション スコープの JDBC データ ソースと JDBC 接続プールを参照してください。
リソース ファクトリの詳細については、『WebLogic エンタープライズ JavaBeans プログラマーズ ガイド』を参照してください。
アプリケーション スコープの JDBC データ ソースと JDBC 接続プールを参照してください。
WebLogic Server には、データ ソースのモニタ オプションはありません。しかし、接続プールおよびトランザクションのモニタは行えます。詳細については、以下の節を参照してください。