7.1 UCPマネージャの使用の概要

ユニバーサル接続プール(UCP)マネージャはUCPインスタンスを作成し維持します。新しいプールが作成されるたびに、プール・インスタンスがプール・マネージャに登録されます。この項の内容は次のとおりです。

7.1.1 接続プール・マネージャについて

アプリケーションは、接続プール・マネージャを使用してUCP JDBC接続プールを明示的に作成および管理します。アプリケーションでマネージャを使用するのは、接続プールの作成、起動、停止、破棄などのライフ・サイクルを完全に制御できるためです。また、マネージャを使用して、接続プール内の接続のリフレッシュ、リサイクル、パージなどの定期的なメンテナンスを実行します。最後に、管理ツールおよびコンソールの集中統合ポイントにできることから、接続プール・マネージャを使用します。

7.1.2 UCPの接続プール・マネージャの作成

接続プール・マネージャは、oracle.ucp.adminパッケージにあるUniversalConnectionPoolManagerインタフェースのインスタンスです。マネージャは、JVMごとに複数の接続プールを管理するために使用されるシングルトン・インスタンスです。このインタフェースは、接続プール・マネージャとやりとりするためのメソッドを備えています。UCPには、接続プール・マネージャ・インスタンスの取得に使用される実装があります。次の例では、その実装を使用した接続プール・マネージャ・インスタンスの作成を示します。

UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl.
getUniversalConnectionPoolManager();

7.1.3 接続のライフ・サイクル状態

アプリケーションは、接続プール・マネージャを使用して接続プールのライフ・サイクルを明示的に制御します。マネージャは、接続プールの作成、起動、停止および破棄に使用されます。ライフ・サイクル・メソッドは、UniversalConnectionPoolManagerインタフェースの一部として含まれます。

ライフ・サイクルの状態について

接続プールのライフ・サイクルの状態は、接続プールに対して実行できるマネージャ操作に影響を与えます。プールのライフ・サイクルを明示的に制御するアプリケーションでは、プールが適切な状態にある場合にのみ、マネージャの操作が使用されるようにする必要があります。ライフ・サイクルの制約については、この項全体を通して説明します。

プールのライフ・サイクルの状態を次に示します。

  • 起動中: 接続プールの起動メソッドがコールされ、起動中であることを示します。

  • 実行中: 接続プールが起動され、接続の割当て準備ができていることを示します。

  • 停止中: 接続プールが停止中であることを示します。

  • 停止済: 接続プールが停止していることを示します。

  • 失敗: 起動、停止または実行中に、接続プールで障害が発生したことを示します。

7.1.3.1 接続プールの作成

接続マネージャのCreateConnectionPoolメソッドは、接続プールを作成および登録します。マネージャは、接続プール・アダプタを使用してプールを作成し、プール対応のデータソースを利用してプール・プロパティを構成します。アプリケーションで接続プールを暗黙的に起動してから、createConnectionPoolメソッドを使用して明示的に同じ名前のプールを作成しないでください。

次の例では、マネージャを使用した接続プール・インスタンスの作成を示します。

UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl.
getUniversalConnectionPoolManager();

PoolDataSource  pds = PoolDataSourceFactory.getPoolDataSource();
pds.setConnectionPoolName("mgr_pool");
pds.setConnectionFactoryClassName("oracle.jdbc.pool.OracleDataSource");
pds.setURL("jdbc:oracle:thin:@//localhost:1521/XE");
pds.setUser("<user>");
pds.setPassword("<password>");

mgr.createConnectionPool((UniversalConnectionPoolAdapter)pds);

管理のためマネージャを使用してプールを作成する必要はありません。暗黙的に作成され(プール対応のデータソースの使用時に自動的に作成され)、プール名を使用して構成されたプールも、プール・マネージャによって自動的に登録および管理されます。暗黙的なプールの作成をお薦めします。

プール命名規則

接続プール名は、構成の一部として定義する必要があります。プール名は、マネージャとやりとりする場合に特定のプールを参照する方法を提供します。接続プール名は一意である必要があり、複数の接続プールで使用することはできません。同じ名前の接続プールがすでに存在する場合、マネージャはpool already exists例外をスローします。

JBossとの互換性

JBossユーザーは、oracle.ucp.destroyOnReload JVMシステム・プロパティをtrueに設定して、JBoss固有のサイレント・リロード機能を使用できます。oracle.ucp.destroyOnReloadプロパティがtrueに設定されている場合、JBoss固有の動作では、同じ名前の新しいプール・インスタンスを作成する前に、古いプール・インスタンスを自動的に破棄します。このシステム・プロパティが設定されていないか、falseに設定されている場合、UCPはpool already exists例外をスローします。

7.1.3.2 接続プールの起動

マネージャのstartConnectionPoolメソッドで接続プールが起動されます。起動するプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。

次の例では、接続プールの起動を示します。

mgr.startConnectionPool("mgr_pool");

アプリケーションでは、常にマネージャのcreateConnectionPoolメソッドを使用して接続プールを作成してからプールを起動する必要があります。また、アプリケーションですでに起動されているプールを起動しようとした場合、つまりプールが停止済または失敗以外のステータスである場合は、ライフ・サイクルの状態例外が発生します。

7.1.3.3 接続プールの停止

マネージャのstopConnectionPoolメソッドで接続プールが停止されます。停止するプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。接続プールを停止すると、すべての使用可能な接続および流用された接続はクローズされます。

次の例では、接続プールの停止を示します。

mgr.stopConnectionPool("mgr_pool");

アプリケーションでは、マネージャを使用して暗黙的または明示的に起動された接続プールを停止できます。存在しないプールを停止しようとした場合、またはプールが起動済または起動中以外の状態である場合は、エラーが発生します。

7.1.3.4 接続プールの破棄

マネージャのdestroyConnectionPoolメソッドで接続プールは停止され、接続プール・マネージャから削除されます。破棄するプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。

次の例では、接続プールの破棄を示します。

mgr.destroyConnectionPool("mgr_pool");

アプリケーションでは、破棄された接続プールは起動できません。新しい接続プールを明示的に作成および起動する必要があります。

7.1.4 ユニバーサル接続プールのメンテナンス

アプリケーションでは、接続プール・マネージャを使用して接続プールでメンテナンスを実行します。メンテナンスには、接続プールのリフレッシュ、リサイクルおよびパージがあります。メンテナンス・メソッドは、UniversalConnectionPoolManagerインタフェースの一部として含まれます。

通常、メンテナンスは無効な接続を削除および置換し、有効な接続の高い可用性を確保するために実行します。一般に、無効な接続はデータベースへの接続に使用できませんが、プールで維持され続けます。このような接続はシステム・リソースを浪費し、プールの最大接続数制限に直接影響を及ぼします。最終的には、多すぎる無効な接続によってアプリケーション・パフォーマンスが悪化します。

注意:

アプリケーションでは、プールから接続を流用する際に接続が有効かどうかをチェックできます。アプリケーションでの無効な接続の数が常に多い場合、追加テストを実行して原因を特定する必要があります。

7.1.4.1 接続プールのリフレッシュ

接続プールをリフレッシュすると、プール内のすべての接続が新しい接続に置き換えられます。現在流用されている接続には削除マークが付けられ、接続がプールに返された後にリフレッシュされます。マネージャのrefreshConnectionPoolメソッドで接続プールがリフレッシュされます。リフレッシュするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。

次の例では、接続プールのリフレッシュを示します。

mgr.refreshConnectionPool("mgr_pool");

7.1.4.2 接続プールのリサイクル

接続プールをリサイクルすると、プール内の無効な接続のみが新しい接続に置き換えられ、流用された接続は置き換えられません。マネージャのrecycleConnectionPoolメソッドで接続プールがリサイクルされます。リサイクルするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。

Oracle以外のドライバを使用する場合は、setSQLForValidateConnectionプロパティを設定する必要があります。UCPではこのプロパティを使用して、接続をリサイクルする前に接続が有効かどうかを判断します。

次の例では、接続プールのリサイクルを示します。

mgr.recycleConnectionPool("mgr_pool");

7.1.4.3 接続プールのパージ

接続プールをパージすると、すべての接続(使用可能な接続および流用された接続)が接続プールから削除され、接続プールを空の状態にします。後続の接続リクエストにより、新しい接続が作成されます。マネージャのpurgeConnectionPoolメソッドで接続プールがパージされます。パージするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。

次の例では、接続プールのパージを示します。

mgr.purgeConnectionPool("mgr_pool");

注意:

minPoolSizeinitialPoolSizeなどの接続プールのプロパティは、接続プールのパージ後に実行できないことがあります。