gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:42:30 25 4
gpt4 key购买 nike

有没有人成功地将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com