【问题标题】:integrate circumflex-orm in play 2.0 scala application with correct servlet filter使用正确的 servlet 过滤器在 play 2.0 scala 应用程序中集成circumflex-orm
【发布时间】:2012-04-22 16:48:35
【问题描述】:

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

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

我确实在 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 应用程序中。

提前致谢, 斯文

【问题讨论】:

  • this thread 我刚刚遇到一些人正在讨论一种在每次请求处理之前和之后执行某些东西的方法,这似乎正是您所寻找的。不幸的是,Play 2.0 中的 Plugin 特征只有 onStartonStop 方法似乎不够用。因此,欢迎来自 Play 2.0 开发者的任何输出。
  • 也有一个 GlobalSettings 类,但这两者都不会,因为那里也没有这样的方法,很遗憾。

标签: scala orm playframework-2.0 circumflex-orm


【解决方案1】:

结果比我想象的要容易,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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 2018-10-28
    • 1970-01-01
    • 2015-12-28
    • 1970-01-01
    • 2014-11-26
    相关资源
    最近更新 更多