C3P0 を使用して接続をプールする Web アプリケーションがあります。C3P0 をデータ ソースとして JdbcTemplate に挿入します。ここでこれを行う方法を確認できます。
<bean id="dataSourceDev" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${databasedev.driver}" />
<property name="jdbcUrl" value="${databasedev.url}"/>
<property name="user" value="${databasedev.username}"/>
<property name="password" value="${databasedev.password}"/>
<property name="initialPoolSize" value="5" />
<property name="minPoolSize" value="5" />
<property name="maxPoolSize" value="1000" />
<property name="acquireIncrement" value="5" />
<property name="maxStatements" value="1000" />
<property name="maxStatementsPerConnection" value="1000"/>
<property name="maxIdleTime" value="10800"/> <!-- 3 hours -->
</bean>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<constructor-arg>
<ref bean="dataSourceDev" />
</constructor-arg>
</bean>
<bean id="someDaoBean" class="com.gedi.platform.dao.SomeDaoClass">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
<bean id="someResourceClass" class="com.gedi.platform.SomeResourceClass">
<property name="someDao" ref="someDaoBean" />
</bean>
Java EE Web アプリケーションであることがわかります。Jetty をアプリケーション サーバーとして使用します。私の質問は、Jetty が Bean をどのようにインスタンス化し、それが接続プーリングにどのように影響するかです。数十人のユーザーが異なる時間に Web サイトを使用している場合、これらのユーザーはすべて同じ接続プールに配置されますか? それとも、すべての HTTP クライアントが Resource、DAO、JdbcTemplate、および C3P0 の新しいインスタンスを作成する、クライアントごとに 1 つの接続プールしかないのでしょうか?
私は明確ですか?私が必要としているのは、すべての HTTP 要求に対して 1 つの接続プールを用意することです。これらの要求がボストンまたはニュージーランドの Web ブラウザーから送信されたものであるかどうかは関係ありません。このようにして、接続プールは最大の効果を発揮します。ただし、すべての HTTP クライアントに対して新しい接続プールがインスタンス化される場合、プーリングはあまり改善されません。
編集
重要な情報 - JAX-RS の Jersey 参照実装を使用して、RESTful インターフェースを生成します。したがって、サーブレットは、それらを処理する適切な Resource クラス/メソッドを見つける Jersey を介してリクエストをディスパッチします。Jersey はリクエストごとにこれらのクラスを再インスタンス化するのか、それとも常に 1 つのインスタンスを保持するのか疑問に思います。