0

我正在尝试将circumflex-orm 集成到 play-2.0 scala 应用程序中。只要我可以检索元素并将其保存到数据库中,它就可以工作。不起作用的是缓存处理 - 事务管理。

例如,检索对象列表,更改一个,将其存储到数据库中工作正常。但是,如果我再次检索相同的列表,我的对象并没有改变。它的含义没有变化,它确实在数据库中发生了变化,但是缓存对此一无所知。

我确实在 circurmflex 小组中发布了一个问题,他们说他们使用 servletfilter 来做到这一点(这是它的实际代码:(circumflex-orm 事务集成- 查看主生命周期)。这样的事情就足够了:

class CircumflexContextFilter extends ServletFilter {

  import ru.circumflex.core._

  def doFilter(req: ServletRequest, res: ServletResponse, chain: FilterChain) {
    Context.executeInNew { ctx =>
      chain.doFilter(req, res)
    }
  } 
}

但我不知道如何将其集成到 play 2.0 应用程序中。

提前致谢, 斯文

4

1 回答 1

2

结果比我想象的要容易,irc 的一个人(感谢 noelw)向我指出了这些文档:scala action composition通读 答案尽可能简单:

首先,像这样编写自己的动作类:

import play.api.mvc.Action
import play.api.mvc.Request
import play.api.mvc.Result
import ru.circumflex.core.Context

case class ScircumflexOrmActionWrapper[A](action: Action[A]) extends Action[A] {

  def apply(request: Request[A]): Result = {
    Context.executeInNew { ctx =>
      action(request)
    }
  }

  lazy val parser = action.parser
}

然后像这样调用你的动作:

def index = ScircumflexOrmActionWrapper { Action { 
  val taskDbObj = Task AS "taskDb"
  val tasks = SELECT(taskDbObj.*).FROM(taskDbObj).ORDER_BY(taskDbObj.createdAt DESC).list 
  Ok(html.task.index(tasks))
}}

就是这样。如果有人感兴趣,我还写了一篇关于将circumflex-orm 集成到游戏中的帖子:integrated circumflex-orm in play 2.0 - scala

于 2012-04-23T19:54:21.193 回答