この章の内容は次のとおりです。
ユニバーサル接続プール(UCP)マネージャはUCPインスタンスを作成し維持します。新しいプールが作成されるたびに、プール・インスタンスがプール・マネージャに登録されます。この項では、次の項目について説明します。
アプリケーションは、接続プール・マネージャを使用してUCP JDBC接続プールを明示的に作成および管理します。アプリケーションでマネージャを使用するのは、接続プールの作成、起動、停止、破棄などのライフサイクルを完全に制御できるためです。また、マネージャを使用して、接続プール内の接続のリフレッシュ、リサイクル、パージなどの定期的なメンテナンスを実行します。最後に、管理ツールおよびコンソールの集中統合ポイントにできることから、接続プール・マネージャを使用します。
接続プール・マネージャは、oracle.ucp.admin
パッケージにあるUniversalConnectionPoolManager
インタフェースのインスタンスです。マネージャは、JVMごとに複数の接続プールを管理するために使用されるシングルトン・インスタンスです。このインタフェースは、接続プール・マネージャとやりとりするためのメソッドを備えています。UCP for JDBCには、接続プール・マネージャ・インスタンスの取得に使用される実装があります。次の例では、その実装を使用した接続プール・マネージャ・インスタンスの作成を示します。
UniversalConnectionPoolManager mgr = UniversalConnectionPoolManagerImpl. getUniversalConnectionPoolManager();
アプリケーションは、接続プール・マネージャを使用して接続プールのライフサイクルを明示的に制御します。マネージャは、接続プールの作成、起動、停止および破棄に使用されます。ライフサイクル・メソッドは、UniversalConnectionPoolManager
インタフェースの一部として含まれます。
ライフサイクルの状態について
接続プールのライフサイクルの状態は、接続プールに対して実行できるマネージャ操作に影響を与えます。プールのライフサイクルを明示的に制御するアプリケーションでは、プールが適切な状態にある場合にのみ、マネージャの操作が使用されるようにする必要があります。ライフサイクルの制約については、この項全体を通して説明します。
プールのライフサイクルの状態を次に示します。
起動中: 接続プールの起動メソッドがコールされ、起動中であることを示します。
実行中: 接続プールが起動され、接続の割当て準備ができていることを示します。
停止中: 接続プールが停止中であることを示します。
停止済: 接続プールが停止していることを示します。
失敗: 起動、停止または実行中に、接続プールで障害が発生したことを示します。
マネージャの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);
管理のためマネージャを使用してプールを作成する必要はありません。暗黙的に作成され(プール対応のデータソースの使用時に自動的に作成され)、プール名を使用して構成されたプールも、プール・マネージャによって自動的に登録および管理されます。暗黙的なプールの作成をお薦めします。
注意: 同じ名前の接続プールがすでに存在する場合、マネージャは例外をスローします。アプリケーションで接続プールを暗黙的に起動してから、createConnectionPool メソッドを使用して明示的に同じ名前のプールを作成しないでください。 |
マネージャのstartConnectionPool
メソッドで接続プールが起動されます。起動するプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。
次の例では、接続プールの起動を示します。
mgr.startConnectionPool("mgr_pool");
アプリケーションでは、常にマネージャのcreateConnectionPool
メソッドを使用して接続プールを作成してからプールを起動する必要があります。また、アプリケーションですでに起動されているプールを起動しようとした場合、つまりプールが停止済または失敗以外のステータスである場合は、ライフサイクルの状態例外が発生します。
マネージャのstopConnectionPool
メソッドで接続プールが停止されます。停止するプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。接続プールを停止すると、すべての使用可能な接続および流用された接続はクローズされます。
次の例では、接続プールの停止を示します。
mgr.stopConnectionPool("mgr_pool");
アプリケーションでは、マネージャを使用して暗黙的または明示的に起動された接続プールを停止できます。存在しないプールを停止しようとした場合、またはプールが起動済または起動中以外の状態である場合は、エラーが発生します。
アプリケーションでは、接続プール・マネージャを使用して接続プールでメンテナンスを実行します。メンテナンスには、接続プールのリフレッシュ、リサイクルおよびパージがあります。メンテナンス・メソッドは、UniversalConnectionPoolManager
インタフェースの一部として含まれます。
通常、メンテナンスは無効な接続を削除および置換し、有効な接続の高い可用性を確保するために実行します。一般に、無効な接続はデータベースへの接続に使用できませんが、プールで維持され続けます。このような接続はシステム・リソースを浪費し、プールの最大接続数制限に直接影響を及ぼします。最終的には、多すぎる無効な接続によってアプリケーション・パフォーマンスが悪化します。
注意: アプリケーションでは、プールから接続を流用する際に接続が有効かどうかをチェックできます。詳細は、「UCPでの接続の検証」を参照してください。アプリケーションでの無効な接続の数が常に多い場合、追加テストを実行して原因を特定する必要があります。 |
接続プールをリフレッシュすると、プール内のすべての接続が新しい接続に置き換えられます。現在流用されている接続には削除マークが付けられ、接続がプールに返された後にリフレッシュされます。マネージャのrefreshConnectionPool
メソッドで接続プールがリフレッシュされます。リフレッシュするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。
次の例では、接続プールのリフレッシュを示します。
mgr.refreshConnectionPool("mgr_pool");
接続プールをリサイクルすると、プール内の無効な接続のみが新しい接続に置き換えられ、流用された接続は置き換えられません。マネージャのrecycleConnectionPool
メソッドで接続プールがリサイクルされます。リサイクルするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。
Oracle以外のドライバを使用する場合は、setSQLForValidateConnection
プロパティを設定する必要があります。UCP for JDBCではこのプロパティを使用して、接続をリサイクルする前に接続が有効かどうかを判断します。setSQLForValidateConnection
プロパティの使用方法は、「UCPでの接続の検証」を参照してください。
次の例では、接続プールのリサイクルを示します。
mgr.recycleConnectionPool("mgr_pool");
接続プールをパージすると、すべての接続(使用可能な接続および流用された接続)が接続プールから削除され、接続プールを空の状態にします。後続の接続リクエストにより、新しい接続が作成されます。マネージャのpurgeConnectionPool
メソッドで接続プールがパージされます。パージするプールを特定するために、プール名がパラメータとして使用されます。プール名は、プール・プロパティとしてプール対応のデータソースで定義されます。
次の例では、接続プールのパージを示します。
mgr.purgeConnectionPool("mgr_pool");
注意: minPoolSize やinitialPoolSize などの接続プールのプロパティは、接続プールのパージ後に実行できないことがあります。 |
Java Management Extensions(JMX)はJavaテクノロジであり、アプリケーション、システム・オブジェクト、デバイス、サービス指向ネットワークおよびJava仮想マシン(JVM)の管理と監視のためのツールを提供します。このAPIでは、クラスを動的に作成し変更できます。そのため、このテクノロジを使用すると、作成、インストールおよび実装されたリソースを監視および管理できます。JMX APIにもリモート・アクセスが含まれているため、リモート管理プログラムがこれらの目的のために実行中のアプリケーションとやりとりすることができます。
JMXでは、指定されたリソースが、マネージドBean(MBean)と呼ばれる1つ以上のJavaオブジェクトによってインスツルメントされています。これらのMBeanは、管理エージェントとして機能するMBeanサーバーと呼ばれるコア管理オブジェクト・サーバーに登録され、Javaプログラミング言語に対応した多くのデバイスで実行できます。JMXエージェントは、MBeanが登録されるMBeanサーバーおよびMBeanを処理する一連のサービスから構成されます。
UniversalConnectionPoolManager.isJmxEnabled
メソッドがtrue
を返した場合にのみ、すべてのMBean属性および操作を使用できます。このフラグのデフォルト値はtrue
です。このデフォルト値は、UniversalConnectionPoolManager.setJmxEnabled
メソッドをコールすることによって変更できます。MBeanServerを使用できない場合、自動的にfalse
がjmxFlag
に設定されます。
関連項目: 『Oracle Universal Connection Pool for JDBC Java API Reference』 |
UCPには、プール管理サポートのために次の2つのMBeanがあります。
UniversalConnectionPoolManagerMBean
は、従来の接続プール・マネージャの機能がすべて含まれているマネージャMBeanです。UniversalConnectionPoolManagerMBean
は次の機能を提供します。
プールMBeanの登録および登録解除
プールの起動、停止、リフレッシュなどのプール管理操作
DMS統計の起動と停止
ロギング
UniversalConnectionPoolMBean
は、プールのプロパティおよびプールの統計情報の動的な構成に対応します。UniversalConnectionPoolMBean
は次の機能を提供します。
サイズ、タイムアウトなどのプールのプロパティの属性の構成
プールのリフレッシュ、リサイクルなどのプール管理操作
プールの統計情報およびライフサイクルの状態の監視