我试图实施“请求,基于”在剧中框架scalaquery会议。 我创建使用scalaquery,并试图将其存储在当前HTTP上下文会话,如下所示:
def withTransaction[A](bp: BodyParser[A])(f: Request[A] => Result): Action[A] = {
Action(bp) {
request =>
val context = Http.Context.current()
val session = createSession()
session.conn.setAutoCommit(false)
context.args.put("scalaquery.session", session)
try {
val result = f(request)
session.conn.commit()
result
}
catch {
case t: Throwable =>
session.conn.rollback()
throw t
}
finally {
session.close()
context.args.remove("scalaquery.session")
}
}
}
然后我用我的控制器就像我的行动:
withTransaction(parse.anyContent) {
Action {
//code that produces a result here
}
}
然而,它崩溃以下行的说法:
val context = Http.Context.current()
[RuntimeException: There is no HTTP Context available from here.]
那么,为什么是上下文不可用? 此代码是由框架直接调用,所以不宜上下文这段代码执行时设置? 还是我使用访问上下文走错了路?
编辑:“会话”的类型是org.scalaquery.session.Session的。 为什么我要设置它的HttpContext的原因是,这样的包裹动作可以访问它在的“http范围的”时尚,即每个请求分别存储他们的会话,还需要一个会话中的所有服务,可以在公共找到它范围是每次请求分离。