Java EE 環境でのオブジェクト・プーリング
Java EE アプリケーション・サーバーは、メッセージ駆動型 Bean アプリケーション、Enterprise Java Beans およびサーブレットで使用できる接続プーリング機能を提供します。
WebSphere® Application Server は、パフォーマンスを向上させるために、 JMS プロバイダーへの接続のプールを維持します。 アプリケーションが JMS 接続を作成すると、アプリケーション・サーバーは、空き接続プールに接続が既に存在するかどうかを判別します。 既存の接続があれば、その接続がアプリケーションに戻されます。それ以外の場合は、新規接続が作成されます。
IBM® MQ メッセージング・プロバイダーを使用する場合、アウトバウンド・メッセージングを実行するアプリケーション (Enterprise Java Beans およびサーブレットなど)、およびメッセージ駆動型 Bean リスナー・ポート・コンポーネントは、これらの接続プールを使用できます。
IBM MQ メッセージング・プロバイダー・アクティベーション・スペックは、 IBM MQ リソース・アダプターによって提供される接続プール機能を使用します。 詳しくは、 WebSphere MQ リソース・アダプターのプロパティーの構成 を参照してください。
コネクション・プールの使用例では、アウトバウンド・メッセージングを実行するアプリケーションやリスナー・ポートがJMSコネクションを作成する際にどのようにフリー・プールを使用するかを説明します。
フリー・コネクション・プールのメンテナンス・スレッドでは、アプリケーションまたはリスナー・ポートがコネクションの処理を終了したときに、これらのコネクションがどうなるかを説明する。
プール・メンテナンスのスレッド例では、JMS接続が古くなるのを防ぐために、どのようにフリー接続プールがクリーニングされるかを説明しています。
WebSphere Application Server では、ファクトリーから作成できる接続の数に制限があります。これは、接続ファクトリーの 「最大接続数」 プロパティーで指定します。 このプロパティーのデフォルト値は 10 であり、これは、ファクトリーから一度に作成できる接続の数が最大 10 個であることを意味します。
各ファクトリーには、1 つの空き接続プールが関連付けられています。 アプリケーション・サーバーの始動時に、空き接続プールは空になっています。 ファクトリーの空きプールに存在可能な接続の最大数も、maximum connections プロパティーで指定されます。
WebSphere Application Serverでの接続プールの動作については、 JMS 接続の接続プールの構成を参照してください。 その他のアプリケーション・サーバーについては、該当するアプリケーション・サーバーの資料を参照してください。
接続プールの使用方法
すべての JMS 接続ファクトリーには接続プールが関連付けられており、接続プールには 0 個以上の JMS 接続が含まれています。 すべての JMS 接続には関連付けられた JMS セッション・プールがあり、すべての JMS セッション・プールには 0 個以上の JMS セッションが含まれます。

- connectionFactory.createConnection()
- ConnectionFactory.createConnection(String, String)
- QueueConnectionFactory.createQueueConnection()
- QueueConnectionFactory.createQueueConnection(String, String)
- TopicConnectionFactory.createTopicConnection()
- TopicConnectionFactory.createTopicConnection(String, String)
プール内に空き接続がなく、このファクトリーから作成される接続の数がファクトリーの maximum connections プロパティーに指定された制限にまだ達していない場合、接続マネージャーはアプリケーションが使用する新規接続を作成します。
ただし、アプリケーションが接続の作成を試み、このファクトリーから作成される接続の数がファクトリーの maximum connections プロパティーと既に等しくなっている場合、アプリケーションは接続が使用可能になる (空きプールに戻される) まで待機します。
アプリケーションが待機する時間は、接続プールの connection timeout プロパティーで指定され、デフォルト値は 180 秒になります。 180 秒の間に接続が空きプールに戻されると、接続マネージャーはそれをすぐに再度プールから取り出してアプリケーションに渡します。 ただし、タイムアウト期間を超過すると、ConnectionWaitTimeoutException がスローされます。
- Connection.close()
- QueueConnection.close()
- TopicConnection.close()
