2

Scalatraドキュメントページの例から直接サーブレットを取得した場合:

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>
    }
  }
}

エラーが発生しますclass MyAppServlet needs to be abstract, since method system in trait AkkaSupport of type => akka.actor.ActorSystem is not defined

次に、私は試しました:

package me.myself.andi

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

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

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

しかし、別のエラーを受け取りますtype mismatch; found : org.scalatra.ActionResult required: 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"))
)
4

1 に答える 1

3

コンパイラ エラーは非常に明確です。クラスにインポート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>
    }
  }
}
于 2012-11-29T19:55:52.893 に答える