1 月 13

Tomcat6でコネクションプール(コネクションプーリング、Connection pooling)を使うことにしました。

動作環境
Windows XP Pro
eclipse 3.3.0 (Eclipse Java EE IDE for Web Developers)
Tomcat 6.0 (インストーラ:apache-tomcat-6.0.20.exe)
MySQL 5.0.77 (VmWare Linux上にインストール NAT接続)

構築方法
1.META-INF配下に、context.xmlを作成する。

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/struts2" docBase="struts2"
        debug="5" reloadable="true" crossContext="true">
        <Resource
                name="jdbc/TestDB"
                auth="Container"
                type="javax.sql.DataSource"
                username="dbuser"
                password="dbpass"
                driverClassName="com.mysql.jdbc.Driver"
                url="jdbc:mysql://192.168.169.128:3306/dbname?autoReconnect=true"
                maxActive="20"
                maxWait="5000"
                maxIdle="20"
        />
</Context>

/struts2は、http://localhost:8080/struts2 というコンテキストで使用することを意味します。

2. MySQLのサイトからJDBCドライバを入手する。
入手したドライバ:mysql-connector-java-5.1.10.tar.gz
gzを展開すると、mysql-connector-java-5.1.10-bin.jarというライブラリが入っているので、このjarファイルを
${TOMCAT_HOME}/lib配下にコピーする。

3.ソースコードにLookupするコードを記述する

package test;

public class Test {

	private DataSource testDs;

	public String getDataSource() {
		try {
			InitialContext initCtx = new InitialContext();
			Context envCtx = (Context) initCtx.lookup("java:comp/env");
			testDs = (DataSource) envCtx.lookup("jdbc/TestDB");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "hello";
	}
}

struts2で@Resourceアノテーションを使用すると、DataSourceがlookupできない(なぜ?)ため、
上記のようにContextから取得しています・・が、DataSourceはstaticで1回取得するだけなんでContext取得で十分ですね Q44
動作としても、一般的なコネクションプールの動作と同じで使える目処が立ちました。