These are chat archives for scalikejdbc/ja

12th
Nov 2015
Toshiyuki Takahashi
@tototoshi
Nov 12 2015 15:48
なんか気づいてしまったかも。
Play2.4からPlayモジュールの初期化順序はDIのみになってるので、scalikejdbcのモジュールに依存してるけれどscalikejdbcモジュールをコンストラクタインジェクションしていないコントローラでは、そのコントローラが動作するより前にscalikejdbcのモジュールによるコネクションプールが初期化されることは保証されない?
// Play2.4だとconection pool is not yet initialized出るかも
class HogeController @Inject() () extends Controllers {
  db index = Action { 
    DB.localTx { implicit session =>

    }    
  }
}
起動時にしか起きないので気づかなかったですけど、DBプラグインを使うコントローラでは必ずscalikejdbc.PlayInitializerをinjectionするのが正しい使用方法ということになる?
コンストラクタで渡してるのに未使用で気持ち悪いですが。
// conection pool is not yet initialized 出なそう
class HogeController @Inject() (scalikejdbc: scalikejdbc.PlayInitializer) extends Controllers {
  db index = Action { 
    DB.localTx { implicit session =>

    }    
  }
}
本当はscalikejdbc.PlayInitializerに依存したなにかがセッションの管理とかもするのがあるべき形?
// scalikejdbc.DBApiはscalikejdbc.PlayInitializerに依存したオブジェクトで、
// これがインジェクションされていることはPlayInitializerによる
// コネクションプール初期化処理がすでに実行されていることを保証する
//
// DBApiはPlayのDBApiを実装したものというわけではない
class HogeController @Inject() (db: scalikejdbc.DBApi) extends Controllers {

  db index = Action { 
    db.localTx { implicit session =>

    }    
  }
}
あ... s/db index/def index/
Toshiyuki Takahashi
@tototoshi
Nov 12 2015 16:41
bind[T].toSelf.eagerly してればその心配いらないっぽい。
でもconnection pool is not yet initialized エラーは出ることあるんだよなあ。以上独り言でした。