Revision 2 as of 2011-06-30 06:06:05

Clear message
Locked History Actions

Play/AnormMultiple

anormで複数DBへのアクセス

自前のjava.sql.Connection

play frameworkは、基本的にconf/application.confに記述されたデータベースに対して自動的なアクセスを提供するようだが、これでは「あらかじめ決められたただ一つのDB」へのアクセスしかできない。 playの将来バージョンでは、この記述が複数認められるようになる模様であるが、しかし実行時にDBを自由に切り替えるというわけにはいかないようだ。

しかし、Anorm.scalaのソースを読んでみるとわかるのだが、実はアプリ側で任意のjava.sql.Connectionを用意してやりさえすれば、そこにアクセスすることは簡単にできる。例えば、

val clients = SQL("select * from clients order by id")().map(row => .....

と記述すると、デフォルトのデータベースに対するアクセスになるが、これに自前のjava.sql.Connectionを指定することにより、

val clients = SQL("select * from clients order by id")(connection).map(row => .....

そのデータベースへのアクセスとなる。

自前のjava.sql.Connectionの管理

ただし、自前のjava.sql.Connectionを扱うためには、次の二点をクリアしなければならない。

  • 一つのリクエスト・レスポンスサイクルの中で、一つのConnectionを使い回したいと思われるので、それをキャッシュする仕組みが必要。
  • レスポンスが終了したらそれをクローズするか、あるいは再利用のための準備をする必要がある。