すがブロ

sugamasaoのhatenablogだよ

DBコネクションプール(1)

DBコネクションをプーリングするには? っていうのは以前(id:seiunsky:20060704:1152031362)ちょっと書いた。
で、今日は実際のところどうなっているのか調べてみた。
一般的には(Javaの場合)サーブレットコンテナ*1などにDBCP(DBコネクションプーリング)の機能が搭載されたりしているらしいので、コネクションの使いまわしに関してはコンテナの設定などになるようだ。
というわけで、実際にどうすれば良いのか試してみた。
……ただ、コネクションプールされているのかどうかの調べ方が良くわからない。デバッグモードで実行してみるとオブジェクトのウォッチ画面でそれっぽい文字列を見ることはできるんだけど……。
というわけで、あってるかどうかわからないけどDBCPを実現する手順。
まず、環境は以下を想定する

  • JDK5
  • Tomcat5.0x*2
  • Eclipse3.1+TomcatPlugin
  • MySQL4.1x
  • MySQLJDBCドライバ(mysql-connector-java-3.1.13.zipを使用)

すごい中途半端な組み合わせだけど、我慢してくれ。会社のPCはソフトウェアの追加にも申請がいるんで、申請しない範囲での組み合わせるとあんな感じになってしまうんだ。
で、必要な手順は以下の通り

  • CATALINA_HOME/common/libにMySQLドライバの設置(TomcatがDB接続を行うため)
  • CATALINA_HOME/conf/Catalina/localhost(ホスト名)/xx.xmlにデータソースの記述を行う(CATALINA_HOME/conf/server.xmlに追記する形でも良い)*3
  • プロジェクトのWEB-INF/web.xmlに記述(2006/07/14追記)
  • DB接続用Javaプログラム(当たり前)

で、実際にこれらのファイルがどういう流れになるのかと言うと……。
Javaプログラムから外部ファイルへアクセスするためのContextでファイル(web.xml)に対象のデータを読みにいく。
さらに、そこの値を参考にTomcat配下のXMLファイルへ読みにいく。こうすることで初めてTomcatの管理するDBCPを扱うデータソースオブジェクトを扱えるようにする。
……このような流れになるはずである。正直な話、自分にも詳しい流れは良くわからないので勘違いして解釈している部分もあるかもしれない。
ま、とにもかくにも大雑把な流れなどはこれでわかったと思う。
実際のコーディングやXMLの書き方については次回。

*1:TomcatやJBOSS

*2:DBCPの機能は4.1以降で組み込まれるようになったらしい

*3:個人的にはプロジェクト毎に設定を変えたいのでCatalina/以下のXMLファイルに記述することが多い