接続プール
接続プールは、接続管理のオーバーヘッドを軽減し、 データ・アクセスの開発タスクを削減するのに役立ちます。
アプリケーションは、 バックエンド・ストア (データベースなど) にアクセスしようとするたびに、 リソースがそのデータ・ストアへの接続を作成、保守、および解除するように要求します。 このプロセスによってアプリケーション・リソース全体にかかる負荷を軽減するために、 Application Server では、 アプリケーション・サーバー上でアプリケーションが共有可能なバックエンド接続のプールを 管理者が設定できるようにしています。接続のプールは 複数のユーザー要求の間に接続オーバーヘッドを分散し、それによって、 将来の要求のためのアプリケーション・リソースを保護します。
Application Server は、接続のプールおよび接続再利用で JDBC 4.0 API をサポートしています。接続プールは、アプリケーション内での直接の JDBC 呼び出しに使用されるとともに、 データベースを使用するエンタープライズ Bean にも使用されます。
接続プールの利点
接続プールにより、接続を必要とするアプリケーション、 特に Web ベース・アプリケーションの応答時間を改善することができます。 ユーザーが Web 上でリソースに要求を行うと、そのリソースはデータ・ソースにアクセスします。 ユーザーはインターネット上のアプリケーションに対して頻繁に接続と切断を繰り返すため、 データ・アクセスへのアプリケーション要求のボリュームがかなり大きくなる場合があります。 その結果、データ・ストア・オーバーヘッドの合計が Web ベース・アプリケーションにとって急激に大きくなり、 パフォーマンスが低下します。接続プール機能を使用すると、 Web アプリケーションで、標準の結果の最大で 20 倍のパフォーマンス向上を実現できます。
接続プールを使用すると、データ・ソースは接続プールから既存の接続を探し出してそれを使用できるので、 ほとんどのユーザー要求では、新規接続を作成する場合のオーバーヘッドが発生することはありません。 要求が満たされ、応答がユーザーに戻されると、 リソースはその接続を接続プールに戻して再使用に備えます。 切断のオーバーヘッドは発生しません。個々のユーザー要求により、 わずかながら接続または切断の負荷がかかります。 初期リソースを使用してプールに接続を生成しておけば、 既存の接続が再使用されるので、 追加のオーバーヘッドはわずかですみます。
接続プールを使用する場合
接続プールは、以下の基準のいずれかを満たすアプリケーションで使用します。
- アプリケーションが、接続を使用するたびに接続を取得したり解放したりするオーバーヘッドを許容できない。
- Application Server において Java™ Transaction API (JTA) トランザクションを必要とする。
- 複数ユーザー間で同じトランザクションの接続を共有する必要がある。
- アプリケーション・サーバーでローカル・トランザクションを管理するために、 製品フィーチャーを利用する必要がある。
- アプリケーションが、所有する接続のプールを管理しない。
- アプリケーションが、接続を作成する場合の詳細 (データベース名、ユーザー名、パスワードなど) を管理しない。

接続をプールする方法
固有のデータ・ソースまたは接続ファクトリーを構成する場合は、固有の Java Naming and Directory Interface (JNDI) 名を指定する必要があります。この JNDI 名は、その構成情報とともに、接続プールを作成するために使用されます。 構成されるデータ・ソースまたは接続ファクトリーごとに、 個別の接続プールが存在します。
すべてのサーバーが、myDataSource を使用する 3 つのサーバー・クラスターを実行していて、かつ myDataSource の最大接続数の設定が 10 になっている場合、 最大で 30 個の接続 (3 つのサーバー x 10 個の接続) を生成できます。
クラスター内に 3 つの z/OS® コントローラーがあり、それぞれに myDataSource を使用する 3 つのサーバントが含まれています。myDataSource の各インスタンスごとに Application Server が作成する接続プールに対して、最大接続値 10 を設定することができます。 これによって、90 個 (9 つのサーバント x 10 接続) まで接続を生成できます。
バックエンド・リソースがサポートできる接続数に、 このような動作がどの程度影響を与えるかを検討してください。 詳しくは、トピック『接続プール設定』を参照してください。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- それぞれのエンティティー Bean トランザクションには、 トランザクション処理専用の、追加のデータベース接続が必要です。
- クローンを使用する場合、各クローンに対して 1 つのデータ・プールが存在します。
サポート対象の UNIX システムでは、各接続ごとに個別の DB2® プロセスが作成されます。これらのプロセスは、メモリーの少ないシステムのパフォーマンスに直ちに影響し、エラーの原因となります。
接続の共有を使用する際には、同じ接続プールから取得した接続しか共有できない点に注意することも重要です。