Tomcat JDBC Connection Pool

Tomcat7最新版ではデータソースのタイプが2種類提供されている。

  • Apache Commons DBCP
    • 以前から使用されていたデータソース
  • Tomcat JDBC Connection Pool
    • Apache Tomcat 7 (7.0.65) - The Tomcat JDBC Connection Pool
    • マルチコアに対応
    • 高パフォーマンス
    • シンプルな実装(DBCPのクラス数は60以上、こちらのコア部分は8)
    • interceptorを挟める、独自intercepterも作成可能
    • JMXとの連携強化
    • XA connectionサポート
    • etc...

DBCPとの切替

特に指定をしなければDBCPが使用される。Tomcat JDBCを使用する場合は、JNDI設定のResourceタグにfactory属性を追加する。

<Resource ・・・(略)
    factory="org.apache.tomcat.jdbc.pool.DataSourceFactory"
/>

属性名などはほとんど変わっていないので、特殊な設定をしていない限りfactoryを追加するだけでOK。

JDBCドライバの配置場所

こちら
Tomcat 7の新機能で何ができるようになるのか?(番外編):Commons DBCPを超えるTomcat JDBC Poolとは (1/2) - @IT
にはTomcat共通のlibに置かないとダメ、と書いてあるが、Tomcatのドキュメントにはそういう記載は見当たらなかった。
試しに共通libにドライバを入れずに、webアプリの方のWEB-INF/libに置いてみたが動くみたい。
Resourceの記述場所によって違う? ドライバ(DB)によって違う? 実はTomcat JDBCで動いていない?
深追いする時間は無いので動いた状態だけメモ。

  • Tomcat 8.0.28
  • PostgreSQL9.4
  • ドライバ(9.4-1205-jdbc41)をmavenの依存に入れて取ってきているだけ
  • Resource設定はwebアプリ内にMETA-INF/context.xmlを作って設定
  • JPA(persistence.xml)のnon-jta-data-sourceで名称設定