playframework-2.0 - 如何在 play 2.0 中使用 Squeryl 的 externalTransactionManagementAdapter?

标签 playframework-2.0 squeryl

有没有人成功地将 Squeryl 的 externalTransactionManagementAdapter 与 play framework 2.0 一起使用?:

    object Global extends GlobalSettings {
      override def onStart(app: Application) {

        SessionFactory.externalTransactionManagementAdapter = Some(() => 
            Some(new Session(
                DB.getDataSource().getConnection(), 
                dbAdapter)
            )
        )
    }

我无法让 Squeryl 将连接返回到池中。
它确实适用于 SessionFactory.concreteFactory ,但后来我必须使用事务块而不是 squeryl 参与 Play 的事务管理。

这个问题是我之前问题的一个更具体的变体:How to integrate the Scala Squeryl ORB with play 2.0 framework? .

最佳答案

这两天一直困扰着我,所以我喝了点咖啡,浪费了我生命中的一个小时,但我想向你展示我是如何让它工作的:

在您的 Global.scala把这个:

 override def onStart(app: Application) {
    SessionFactory.externalTransactionManagementAdapter = Some(() => {
    if(org.squeryl.Session.hasCurrentSession) {
      org.squeryl.Session.currentSessionOption.get
    }
    else {
      val s = new org.squeryl.Session(DB.getDataSource().getConnection(), new PostgreSqlAdapter){
        override def cleanup = {
          super.cleanup
          unbindFromCurrentThread
        }
      }
      s.bindToCurrentThread
      s
    }
    })
  }

然后你需要做一些清理,这样你的应用程序就不会出错(在同一个全局中):
  /**
   * cleans up Squeryl thread to each request
   */
  override def onRouteRequest(request: RequestHeader): Option[Handler] = {
    org.squeryl.Session.currentSessionOption.foreach(_.unbindFromCurrentThread)
    super.onRouteRequest(request)
  }

如果我发现任何警告等,我会更新此内容。清除覆盖由 http://lunajs.blogspot.ca/2011/06/squeryl-with-java-experiment.html 提供。

关于playframework-2.0 - 如何在 play 2.0 中使用 Squeryl 的 externalTransactionManagementAdapter?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9767601/

相关文章:

routes - `play dist` , `main.css` 返回 404

scala - 使用 Play2 scala 的 Heroku 内存泄漏

mysql - 我可以自动生成 Squeryl 数据对象来反射(reflect)现有的 MySql 模式吗?

json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?

json - 使用 scala play 将 Json 对象添加到 JSON 数组

java - 在 Intellij IDEA 13 中玩框架 2 运行单元测试

playframework-2.0 - 如何使用激活器调试Play应用程序?

postgresql - Squeryl 和 PostgreSQL 的自增

scala - 如何: Custom Field in Lift-Record-Squeryl

mysql - 如何在 MySQL 中为 Play 2 框架的 squeryl 中的 ManyToMany 关系设置中间表?