Tomcatのコネクションプーリングを使う方法

まとまった情報が見つからなかったので。
Seasar2ではS2DBCPがコネクションプーリングの機能を提供していますが、
既にTomcatのコネクションプーリングを利用しているようなアプリケーションと共存する場合、
Seasar2を利用しているアプリケーション側で、Tomcatのコネクションプーリングを利用することも可能です。
 
変更は以外と簡単です。
 

  • まずは、$TOMCAT_HOME$/conf/server.xmlにコネクションプーリングの設定をします。

Contextの下にResourceを登録する例です(Tomcat4.1.x & Oracle

<Context path="/app" reloadable="false" docBase="app" workDir="app/work" debug="0">
	<Resource name="jdbc/MyDB" scope="Shareable" type="javax.sql.DataSource"/>
	<ResourceParams name="jdbc/MyDB">
		<parameter>
			<name>factory</name>
			<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
		</parameter>
		<parameter>
			<name>url</name>
			<value>jdbc:oracle:thin:@localhost:1521:orcl</value>
		</parameter>
		<parameter>
			<name>driverClassName</name>
			<value>oracle.jdbc.driver.OracleDriver</value>
		</parameter>
		<parameter>
			<name>username</name>
			<value>user</value>
		</parameter>
		<parameter>
			<name>password</name>
			<value>pass</value>
		</parameter>

		<parameter>
			<name>maxWait</name>
			<value>3000</value>
		</parameter>
		<parameter>
			<name>maxIdle</name>
			<value>5</value>
		</parameter>
		<parameter>
			<name>maxActive</name>
			<value>3</value>
		</parameter>
	</ResourceParams>
</Context>
  • 続いてはj2ee.diconを修正します。j2ee.diconで設定しているSeasar2のコネクションプーリング設定をコメントにします。
<!--  
<component name="connectionPool"
	class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl">
	<property name="timeout">600</property>
	<property name="maxPoolSize">10</property>
	<property name="allowLocalTx">true</property>
	<destroyMethod name="close"/>
</component>
<component name="dataSource"
	class="org.seasar.extension.dbcp.impl.DataSourceImpl"/>
-->
<component name="initialContext" class="javax.naming.InitialContext"/>
	<component name="dataSource"
   	class="org.seasar.extension.j2ee.JndiDataSource">
   	<arg>initialContext</arg>
   	<arg>"java:comp/env/jdbc/MyDB"</arg>
</component>