2011-10-07 5 views
12

JNDIレベルまたはWebアプリケーションレベルで接続プールを作成する方が理にかなっていますか?例えば、私はthusly単純にはjavax.sql.DataSourceで作成することができます。その後、接続プールまたはデータソース?どちらをJNDIに入れますか?

<Context antiJARLocking="true"> 
    <Resource name="jdbc/myDataSource" 
    auth="Container" 
    type="javax.sql.DataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    url="jdbc:mysql://localhost/myDataSource" user="user" password="password" /> 
</Context> 

とthusly春のプールを設定する:

<bean id="myDataSource" class="com.mchange.v2.c3p0.DataSources" 
    factory-method="pooledDataSource"> 
    <constructor-arg> 
    <jee:jndi-lookup jndi-name="java:comp/env/jdbc/myDataSource" /> 
    </constructor-arg> 
</bean> 

それとも、私はJNDI自体に直接プールを設定できます。

<Resource name="jdbc/myDataSource" 
    auth="Container" 
    factory="org.apache.naming.factory.BeanFactory" 
    type="com.mchange.v2.c3p0.ComboPooledDataSource" 
    driverClassName="com.mysql.jdbc.Driver" 
    jdbcUrl="jdbc:mysql://localhost/myDataSource" 
    user="user" password="password" 
    minPoolSize="3" 
    maxPoolSize="15" 
    maxIdleTime="5000" 
    idleConnectionTestPeriod="300" 
    acquireIncrement="3" /> 

残すこの春:

<jee:jndi-lookup id="myDataSource" jndi-name="java:comp/env/jdbc/myDataSource" /> 

どちらの場合でも、myDataSourceスプリングBeanはc3p0接続プーリングされたデータソースですが、どちらが優れていますか?私はJNDIでプールを持つのが最も理にかなっていると思っていますが、それに対しては、c3p0のlibをサーブレットコンテナレベルにプッシュしなければならないということです。しかし、それをJNDIに入れると、あなたのアプリケーションはまったくプールすることを心配する必要はありません。あなたはどう思いますか?

+0

それを実行してください(各アプリケーションは、それが自身のプールの使用を開始するときには、何が起こるかです)あなたが好きなように、もしできれば。可能であれば、確かに1か所にすべてがあることをお勧めします。 – EJP

答えて

23

あなたはそれがすでに:)プールされているように、JNDIから取得したデータソースを、プールする必要はありません

コンテナ・マネージャプールv.s.を持つ唯一の違い第1のケースでは、標準インターフェース(JBossコンソールなど)を使用してプール上の作業負荷を監視する能力があります。次に、アプリケーションサーバーの管理者は、必要に応じてプールサイズを増やす決定を管理します。また、アプリケーションを別のDBサーバーに切り替えることもできます(MySQLからOracleへの計画的な移行など)。欠点は、単体テスト用のJNDIテストデータソースを設定するのに少しだけ労力が必要であることです(here参照)。

2番目のケースでは、DBCPまたはc3p0に加えてJDBCドライバとアプリケーションをパッケージ化する必要があります。この場合、Tomcatで実行されているすべてのアプリケーションのすべてのプールに関する統計を収集するのは簡単ではありません。また、新しいJDBCドライバ(MySQL 4からMySQL 5への移行)は、すべてのアプリケーションで同時に実行することはできません。 .propertyファイルを使用していても、接続プロパティはアプリケーションに接続されています(したがって、プロジェクトの再構築と再デプロイが必要です)。おそらく、あなたはアプリケーション、1つのDB、管理オーバーヘッドを持たないので、すべてを必要としないかもしれません。このテーマに関する

その他のトピック:

+5

また、Tomcat JDBCプール(http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html)も考慮に入れる必要があります。 – rit

関連する問題