玩! @Before、traits 和 Squeryl 抛出关闭连接的问题?

Posted

技术标签:

【中文标题】玩! @Before、traits 和 Squeryl 抛出关闭连接的问题?【英文标题】:Play! issue with @Before, traits, and Squeryl throwing closed connections? 【发布时间】:2012-03-02 00:21:18 【问题描述】:

更新问题经过进一步调试后,我更新了这个问题,以更准确地解决实际问题。

我定义了一个特征来进行基本的安全检查,但每次我想运行数据库查询时都会引发 Cannot operate on a closed connection!!! 错误。

代码如下:

trait SecureAPI 
  self:Controller =>

  @Before
  def checkKey(key:String)
    models.Account.getByKey(key) match 
      case account:Account  =>  
        renderArgs += "account" -> accountId
        Continue
      
      case _  =>  Forbidden("Key is not authorized.")
    

getByKey 引发数据库错误。在我的控制器中,我将Squeryl 添加为特征,但我如何将其应用于另一个特征以便我可以继续运行查询?还是我只是没有正确处理这个问题?谢谢。

【问题讨论】:

【参考方案1】:

我更深入地阅读了不同的读物,并将这篇文章归功于这里:http://www.alvarocarrasco.com/2010/12/i-have-settled-on-new-platform-for.html

我不得不使用 Squeryl 将会话绑定到当前线程。所以为了使上面的代码工作,我必须添加SessionFactory

@Before
def checkKey(key:String)
  SessionFactory.newSession.bindToCurrentThread // added this here
  models.Account....

现在一切都在查询,只需要解决一些错误。如果我发现更多警告,我会更新答案。

【讨论】:

以上是关于玩! @Before、traits 和 Squeryl 抛出关闭连接的问题?的主要内容,如果未能解决你的问题,请参考以下文章

php - Trait

scala中trait学习笔记

php中trait

scala 抽象类和trait的区别

PHP之Trait特性

PHP之Trait详解