Scala 默认AkkaSupport Servlet示例不';行不通

Scala 默认AkkaSupport Servlet示例不';行不通,scala,akka,scalatra,Scala,Akka,Scalatra,如果我有一个直接取自Scalatra文档页面上示例的servlet: package me.myself.andi import _root_.akka.dispatch._ import org.scalatra.akka.AkkaSupport import org.scalatra.ScalatraServlet class MyAppServlet extends ScalatraServlet with AkkaSupport { get("/"){ Future {

如果我有一个直接取自Scalatra文档页面上示例的servlet:

package me.myself.andi

import _root_.akka.dispatch._
import org.scalatra.akka.AkkaSupport
import org.scalatra.ScalatraServlet

class MyAppServlet extends ScalatraServlet with AkkaSupport {
  get("/"){
    Future {
      // Add other logic here

      <html><body>Hello Akka</body></html>
    }
  }
}
但收到另一个错误
类型不匹配;找到:org.scalatra.ActionResult必需:
akka.dispatch.ExecutionContext
。不熟悉阿克卡,这是怎么回事

libraryDependencies ++= Seq(
  "org.scalatra" % "scalatra" % "2.2.0-SNAPSHOT",
  "org.scalatra" % "scalatra-scalate" % "2.2.0-SNAPSHOT",
  "org.scalatra" % "scalatra-specs2" % "2.2.0-SNAPSHOT" % "test",
  "org.scalatra" % "scalatra-akka" % "2.2.0-SNAPSHOT",
  "com.typesafe.akka" % "akka" % "2.0.4",
  "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
  "eu.infomas" % "annotation-detector" % "3.0.0",
  "org.atmosphere" % "atmosphere-runtime" % "1.1.0-SNAPSHOT",
  "org.eclipse.jetty" % "jetty-websocket" % "8.1.4.v20120524",
  "org.eclipse.jetty" % "jetty-webapp" % "8.1.7.v20120910" % "container",
  "org.eclipse.jetty" % "test-jetty-servlet" % "8.1.5.v20120716" % "test",
  "org.eclipse.jetty" % "jetty-websocket" % "8.1.7.v20120910" % "container",
  "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar"))
)

编译器错误很明显。导入
akka.actor.ActorSystem
并将
val system=ActorSystem(“MySystem”)
添加到类中,它应该可以工作

编辑:

system
应该是一个隐式值,因此它必须是
implicit val system=ActorSystem(“MySystem”)
,然后不要手动传入系统。所以总的来说是

class MyAppServlet extends ScalatraServlet with AkkaSupport {
  implicit val system = ActorSystem("MySystem")
  get("/"){
    Future { // and also Future {
      // Add other logic here

      <html><body>Hello Akka</body></html>
    }
  }
}
类MyAppServlet使用AkkaSupport扩展ScalatrServlet{
隐式val系统=ActorSystem(“MySystem”)
获取(“/”){
未来{//也是未来{
//在此添加其他逻辑
你好,阿卡
}
}
}

只需添加一点:您必须小心,因为scalatra使用线程局部变量作为参数,您必须首先将它们绑定到处理程序中的局部变量,因为
未来的
将在不同的线程上执行,因此变量将不存在。
class MyAppServlet extends ScalatraServlet with AkkaSupport {
  implicit val system = ActorSystem("MySystem")
  get("/"){
    Future { // and also Future {
      // Add other logic here

      <html><body>Hello Akka</body></html>
    }
  }
}