Locked History Actions

Diff for "Play/AnormMultiple"

Differences between revisions 1 and 2
Deletions are marked like this. Additions are marked like this.
Line 9: Line 9:
{{{ {{{
Line 24: Line 24:

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を使い回したいと思われるので、それをキャッシュする仕組みが必要。
  • レスポンスが終了したらそれをクローズするか、あるいは再利用のための準備をする必要がある。