0

私は、circumflex-orm を play-2.0 scala アプリに統合しようとしています。要素を取得してdbに保存できる限り機能します。機能しないのは、キャッシュ処理 (トランザクション管理) です。

たとえば、オブジェクトのリストを取得し、変更し、db に保存すると問題なく動作します。しかし、同じリストを再度取得しても、オブジェクトは変更されませんでした。データベースで変更されたという意味では変更されませんでしたが、キャッシュはそれについて何も知りません。

私は circurmflex グループに質問を投稿しましたが、彼らは servletfilter でそれを行うと言いました (これは実際のコードです: (circurmflex -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の人 (thanks 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 を play に統合するための i blop 投稿も書きました

于 2012-04-23T19:54:21.193 に答える