Jakarta Commons DBCPを使ってみよう。

[概要]
汎用コネクションプーリングライブラリである、
Jakarta Commonsの、DBCPを使ってみます。

[必須環境]
XMLパーサがデフォルトで入っているので、J2SDK1.4が望ましいです。
まあ、Crimson辺りを拾ってくれば、解決する問題ですが...
Xercesを使う場合は、org.xml.sax.driverに「org.apache.xerces.parsers.SAXParser」を指定します。

Jakarta Commonsの、Collectionsと、Pool、DBCPが必要ですが、
2002/05/12時点で、DBCPにはリリース版が無く、Nightlyビルド版のみとなっています。

[実験内容]
DBCPを使用した場合と、使用しなかった場合で、
Accessデータベースにアクセスする時間を計測し、比較します。

[実験環境]
OS: WindowsXP Home Edition
CPU: Pentium4 1.8GHz
メモリ: 384MB (DIMM)
JDK: J2SDK1.4
Access: Access2000

[実験用ソースコード]
test.java
(docs/JOCLPoolingDriverExample.javaをカスタマイズしたもの。)
poolingDriverExample.jocl
(docs/poolingDriverExample.jocl.sampleをカスタマイズしたもの。)
db1.mdb
ODBCデータソースに、testという名前で登録して下さい。

[コンパイル]
javac -classpath commons-collections.jar;commons-dbcp.jar;commons-pool.jar test.java

[実行(プーリング無し)]
java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver -classpath commons-collections.jar;commons-dbcp.jar;commons-pool.jar;. test "jdbc:odbc:test" "select * from dual"

[実行(プーリング有り) - Crimson]
java -Dorg.xml.sax.driver=org.apache.crimson.parser.XMLReaderImpl -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver:org.apache.commons.dbcp.PoolingDriver -classpath commons-collections.jar;commons-dbcp.jar;commons-pool.jar;. test "jdbc:apache:commons:dbcp:/poolingDriverExample" "select * from dual"

[実行(プーリング有り) - Xerces]
java -Dorg.xml.sax.driver=org.apache.xerces.parsers.SAXParser -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver:org.apache.commons.dbcp.PoolingDriver -classpath commons-collections.jar;commons-dbcp.jar;commons-pool.jar;xerces.jar;. test "jdbc:apache:commons:dbcp:/poolingDriverExample" "select * from dual"

[実験結果]
100回SQL文実行時の、実行時間合計[ms]。(3回平均)

プーリング無しプーリング有り
6739568

というわけで、10倍以上の差が出る結果となりました。
Accessのように、ネイティブのJDBCドライバも無い環境には、うってつけと言えるでしょう。