我正在尝试将circumflex-orm集成到play-2.0 scala应用程序中。它可以工作,因为我可以检索并将元素保存到数据库中。 什么是行不通的缓存处理 - 事务管理。
例如,检索对象列表,更改一个,将其存储到db工作正常。 但是,如果我再次检索相同的列表,我的对象没有改变。 它的含义并没有改变,它确实在数据库中发生了变化,但缓存对此一无所知。
我确实在circurmflex小组发了一个问题,他们说他们用servletfilter做了这个(这是它的实际代码:(circumflex-orm transaction integration - 看一下主生命周期)。 这样的事就足够了:
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应用程序中。
先谢谢, 斯文
答案 0 :(得分: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整合到游戏中的文章:integrate circumflex-orm in play 2.0 - scala