WebLogic J2EE コネクタ アーキテクチャ
![]() |
![]() |
![]() |
![]() |
以下の節では、BEA WebLogic J2EE コネクタ関連のさまざまな接続管理タスクについて説明します。
ra.xml デプロイメント記述子ファイルには、ManagedConnectionFactory インスタンスごとに 1 つのコンフィグレーション設定を宣言するための config-property 要素が入っています。通常、リソース アダプタ プロバイダは、これらのコンフィグレーション プロパティを設定します。ただし、コンフィグレーション プロパティが設定されていない場合、リソース アダプタのデプロイ担当者がプロパティの値を指定する必要があります。
WebLogic Server では、weblogic-ra.xml デプロイメント記述子ファイルの map-config-property 要素を使用してコンフィグレーション プロパティを設定できます。リソースのアダプタの一連のコンフィグレーション プロパティをコンフィグレーションするには、宣言するコンフィグレーション プロパティごとに map-config-property-name と map-config-property-value の組み合わせを指定します。
また、map-config-property 要素を使用すると、ra.xml デプロイメント記述子ファイルで指定した値をオーバーライドできます。WebLogic Server は、起動時に map-config-property の値を ra.xml ファイルの config-property の値と比較します。コンフィグレーション プロパティ名が一致した場合、WebLogic Server は対応するコンフィグレーション プロパティ名の map-config-property-value を使用します。
「J2EE コネクタ仕様バージョン 1.0、最終リリース」に記載されている接続管理要件に加えて、BEA WebLogic Server は、接続プールのサイズをコンフィグレーションして自動的に維持するオプション設定とサービスを提供します。
ManagedConnection の作成では、ManagedConnection が表すエンタープライズ情報システム (EIS) の複雑さに応じて大きなコストが発生します。そのため、WebLogic Server の起動時に接続プールに初期数の ManagedConnection を登録し、実行時には作成しないようにします。この設定は、weblogic-ra.xml 記述子ファイルの initial-capacity 要素を使用してコンフィグレーションします。この要素のデフォルト値は、1 ManagedConnection です。
「J2EE コネクタ仕様、バージョン 1.0、最終リリース」に記されているように、アプリケーション コンポーネントがリソース アダプタを使用して EIS との接続を要求すると、WebLogic Server はまず、接続プール内の既存で利用可能な ManagedConnection の中で要求されている接続タイプと一致するものがないか探します。しかし、一致するものが見つからない場合には、新規の ManagedConnection を作成して接続リクエストに応じます。
WebLogic Server の設定を使用すると、一致するものがない場合に ManagedConnection を自動的に追加作成できます。この機能により、時間の経過と共に増加する接続プールのサイズとサイズが増加するたびに低下するサーバのパフォーマンスを柔軟に制御できます。この設定は、weblogic-ra.xml 記述子ファイルの capacity-increment 要素を使用してコンフィグレーションします。デフォルト値は 1 ManagedConnection です。
WebLogic Server の起動時には開始セキュリティ プリンシパルまたはリクエスト コンテキスト情報が不明なので、initial-capacity でコンフィグレーションされている初期数の ManagedConnection は、デフォルト サブジェクトと null のクライアント リクエスト情報の入ったデフォルト セキュリティ コンテキストを使用して作成されます。
capacity-increment 要素でコンフィグレーションされている数の追加の ManagedConnection は、接続リクエストの既知の開始プリンシパルおよびクライアント リクエスト情報を使用して作成されます。
追加の ManagedConnection の作成中に接続が失敗した場合、connection-creation-retry-frequency-seconds を使用して接続を作成し直すよう、Weblogic Server をコンフィグレーションすることができます。デフォルトでは、この機能は無効です。
それらの要素については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
ManagedConnection の追加に伴い、それぞれの ManagedConnection が消費するメモリやディスク領域などのシステム リソースも増えていきます。エンタープライズ情報システム (EIS) によっては、この消費量がシステム全般のパフォーマンスに影響します。WebLogic Server では、ManagedConnection がシステム リソースに与える影響を制御するため、割り当て済み ManagedConnection の最大許容数の設定をコンフィグレーションできます。
この設定は、weblogic-ra.xml 記述子ファイルの max-capacity 要素を使用してコンフィグレーションします。接続リクエスト中に ManagedConnection を (capacity-increment が 2 以上の場合は複数) 新規作成する必要がある場合、WebLogic Server が最大許容数を超えて ManagedConnection を作成することはありません。この制限を超えて管理対象の接続の割り当てを要求すると、呼び出し側に ResourceAllocationException が返されます。
それらの要素については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
weblogic-ra.xml デプロイメント記述子ファイルの connection-reserve-timeout-seconds 要素には、予約済みの接続呼び出しを待つ時間を指定します。この時間を超えた場合、呼び出し側に例外が発生します。デフォルトでは、この要素の値は -1 です。このデフォルト値は、この要素が予約済みの接続を待たないように設定されていることを意味します。
予約済み接続の呼び出しが行われると、WebLogic Server は利用可能な接続のプールから接続を取得しようとします。利用可能な接続がない場合、WebLogic Server は capacity-increment 要素を使用して新しい接続を作成し、新しく作成した接続のプールから接続を取得しようとします。
接続の最大数に達しており、かつ利用可能な接続がない場合、WebLogic Server は呼び出しがタイムアウトするまで再試行します。highest-num-waiters 要素は、同時に接続を待機するクライアントの数を制御します。
weblogic-ra.xml デプロイメント記述子にも max-num-retries 要素があります。connection-reserve-timeout-seconds 要素と max-num-retries 要素の両方を設定した場合、先に終了したどちらかが予約呼び出しを終了します。
それらの要素については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
ManagedConnection の最大数を設定すると、処理能力を超えた数の ManagedConnection を割り当てることが原因でサーバが過負荷になることはありませんが、常に必要に応じてシステム リソースの量を効率的に制御するわけではありません。WebLogic Server では、リソース アダプタの接続プール内の ManagedConnection の動作状況をモニタするサービスを利用できます。使用量が減少し、そのレベルで一定期間とどまっている場合、接続プールのサイズは継続的な接続リクエストを十分満たせるだけの量にまで縮小されます。
このシステム リソース使用量サービスはデフォルトで有効です。ただし、weblogic-ra.xml 記述子ファイルの shrinking-enabled 要素を false に設定すると、このサービスを無効にできます。weblogic-ra.xml 記述子ファイルの shrink-frequency-seconds 要素を使用すると、接続プール管理によって未使用の管理対象接続を再利用しようとする間隔 (秒単位) を指定できます。この要素のデフォルト値は、900 秒です。
それらの要素については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
接続リークは、接続終了後に接続を閉じないエンタープライズ JavaBeans (EJB) など、問題のあるアプリケーション コンポーネントから発生します。「J2EE コネクタ仕様、バージョン 1.0、最終リリース」に記載されているように、EIS 接続を終了すると、アプリケーション コンポーネントは接続解除リクエストを送信します。この時点で、WebLogic Server は必要なクリーンアップを実行し、接続を将来の接続リクエストで使用できるようにする必要があります。ただし、アプリケーション コンポーネントが接続解除に失敗した場合、接続プールが利用可能な接続を使い果たすため、将来の接続リクエストが失敗することがあります。
WebLogic Server はこのシナリオを防止する 2 つのメカニズムを提供します。
WebLogic Server は Java 仮想マシン (JVM) のガベージ コレクタ メカニズムを活用して自動的に接続リークを検出します。アプリケーション コンポーネントが終了し、アプリケーション コンポーネントが使用する接続が間接参照されるようになると、ガベージ コレクタにより接続オブジェクトの finalize() メソッドが呼び出されます。
ガベージ コレクタが finalize() メソッドを呼び出すときに、アプリケーション コンポーネントが接続を閉じていないと WebLogic Server が判断すると、サーバはリソース アダプタの ManagedConnection.cleanup() メソッドを呼び出し、自動的に接続を閉じます。WebLogic Server はアプリケーション コンポーネント接続の正常なクローズ時に CONNECTION_CLOSED イベントを受け取った場合と同じように動作します。
ガベージ コレクタの動作は予測できず、実際にはまったく呼び出されないこともあるため、WebLogic Server では接続の非アクティブ状態を検出する方法が用意されています。この方法は、weblogic-ra.xml デプロイメント記述子の inactive-connection-timeout-seconds 要素でコンフィグレーションします。この要素には、接続ハンドルが非アクティブ状態を保つことができる時間 (秒単位) を指定します。この要素はアプリケーションが接続の使用を完了後に接続を閉じなかった時にリークを防ぎます。非アクティブな接続は、検出後に直ちに終了されます。
WebLogic Server は、接続オブジェクトの使用状況をモニタします。接続オブジェクトは、非アクティブでないかどうか定期的にテストされます。非アクティブな時間が inactive-connection-timeout-seconds 要素で指定された値を超えた場合、非アクティブな接続が直ちに終了されます。
接続オブジェクトに関連付けられている ManagedConnection が他にアクティブな接続オブジェクトを持っていない場合、WebLogic Server は自動的に ManagedConnection を接続リクエストで使用できるようにします。
それらの要素については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
接続が要求されると、WebLogic Server は、接続オブジェクトをラップするプロキシ オブジェクトを (リソース アダプタを介して) クライアントに返します。WebLogic Server はこのプロキシを使用して、J2EE コネクタ アーキテクチャの WebLogic Server 実装を使用しているアプリケーションを支援する機能を提供します。その内容は次のとおりです。
接続リクエストで返された接続オブジェクトが Connection クラスとしてキャストされた場合、ClassCastException が発生することがあります。この例外は、以下のいずれかの原因で発生します。
WebLogic Server は、リソース アダプタが原因の ClassCastException を検出しようとします。このキャストの失敗をサーバが検出した場合、サーバはプロキシ ラッパー機能をオフにし、接続リクエストで接続オブジェクトをラップしないまま返して続行します。サーバは、プロキシ ラッパーがオフになったことを示す警告メッセージをログに記録します。
この状況が発生すると、接続リーク検出機能と XAResource の遅いリスト化機能もオフになります。しかし、この状況は現在、Administration Console のモニタ機能で検出されません。
WebLogic Server は、コンテナ管理によるセキュリティを使用するクライアントとして動作することで、ClassCastException を検出しようとします。そのためには、セキュリティ資格を定義してリソース アダプタをデプロイする必要があります。
クライアントがキャストを実行し、ClassCastException を受け取った場合は、カスタム (クライアント) コードを次の例のように変更します。
クライアントが接続オブジェクトを MyConnection にキャストするものとします。
J2EE コネクタ アーキテクチャの BEA WebLogic Server 実装には、WebLogic Server Console に検出されたリークを表示するモニタ機能、およびリークを起こしているアプリケーションを突き止めるためにスタックをルックアップするメソッドがあります。Console の [削除] ボタンを使用すると、リークが発見された接続を動的に閉じることができます。接続を削除するオプションは指定のアイドル時間を超えており、削除しても安全な接続のみに使用できます (言い換えると、その接続はトランザクションに使用されていないということです)。
weblogic-ra.xml ファイルの connection-profiling-enabled 要素は、各接続の割り当て先のコール スタックを接続プールに格納するか否かを指定します。要素値を true に設定すると、この情報を Console を通じてアクティブ接続上で表示できます。また、リーク接続とアイドル接続のスタックを表示でき、接続を閉じないコンポーネントのデバッグもできます。
Console を使用してモニタ ツールを呼び出す方法は 2 つあります。
Console の [接続リーク プロファイル] カラムで、リークされた接続に関するプロファイル情報を照会できます。このカラムと [検出されたリーク接続] カラムを混同しないでください。後者のカラムには、リークされた接続数だけが表示されます。
これら 2 つのカラムの大きな相違は、[接続リーク プロファイル] カラムが weblogic-ra.xml ファイルの connection-profiling-enabled 設定を用いて制御される点です。デフォルトでは、この設定は false であるため、通常、[接続リーク プロファイル] カラムはゼロ (無効) となります。ただし、[検出されたリーク接続] カラムは常に有効化され、リークされた接続の数が常に表示されます。
Console を使用してリークされた接続を照会する方法は 2 つあります。
Console の [接続アイドル プロファイル] カラムで、アイドル接続に関するプロファイル情報を照会できます。このカラムはアイドル接続の数を表示するだけの [検出されたアイドル接続] カラムと混同しないようにしてください。
これら 2 つのカラムの大きな相違は、[接続アイドル プロファイル] カラムが weblogic-ra.xml ファイルの connection-profiling-enabled 設定を使用して制御される点です。デフォルトでは、この設定は false であるため、通常、[接続アイドル プロファイル] カラムはゼロ (無効) となります。ただし、[検出されたアイドル接続] カラムは常に有効化され、アイドル接続の数が常に表示されます。
Console を使用してアイドル接続を照会する方法は 2 つあります。
「J2EE コネクタ仕様、バージョン 1.0、最終リリース」では、アプリケーション サーバの要件の 1 つとして、ManagedConnectionFactory.set/getLogWriter を使用してエラー ロギングおよびトレース機能をリソース アダプタに提供することが記載されています。
weblogic-ra.xml ファイル記述子ファイルでは、WebLogic Server にデプロイされたリソース アダプタでロギングとトレースのコンフィグレーションが可能な 2 つの要素がサポートされます。以下の要素がこれにあたります。
詳細については、「weblogic-ra.xml デプロイメント記述子の要素」を参照してください。
![]() ![]() |
![]() |
![]() |