【问题标题】:Scalatra shutting down system - "No Such Method Error"Scalatra 关闭系统 - “没有这样的方法错误”
【发布时间】:2013-09-05 18:39:09
【问题描述】:

我在 Scalatra 中有一些使用 Atmosphere 框架的代码,在发出 Web 请求后不断导致系统崩溃。控制台显示从服务器发送到客户端的数据,但紧接着总是出现以下错误:

Uncaught error from thread [default-akka.actor.default-dispatcher-11] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[default]
java.lang.NoSuchMethodError: akka.actor.ActorSystem.dispatcher()Lakka/dispatch/MessageDispatcher;
    at org.scalatra.atmosphere.package$.jucFuture2akkaFuture(package.scala:29)
    at org.scalatra.atmosphere.ScalatraBroadcaster.broadcast(ScalatraBroadcaster.scala:19)

我正在使用 dispatch 在 m 个 actor 中发出 Web 请求。但是当我使用喷雾时,我得到了同样的信息。

这是我提出网络请求的方式:

Http(Req(_.setUrl(fullUrl))) map {response =>

但错误发生在数据发送到客户端之后(您可以在堆栈跟踪中看到对“广播”的调用。所以我认为这不是网络请求。

My project build file:

 lazy val project = Project (
    "",
    file("."),
    settings = Defaults.defaultSettings ++ ScalatraPlugin.scalatraWithJRebel ++ scalateSettings ++ assemblySettings ++ Seq(
      organization := Organization,
      name := Name,
      version := Version,
      scalaVersion := ScalaVersion,
      resolvers += Classpaths.typesafeReleases,
      test in assembly := {},
      jarName in assembly := "",
      mergeStrategy in assembly <<= (mergeStrategy in assembly) { (old) =>
        {
          case PathList(xs) if xs.equals("about.html") => MergeStrategy.first
          case x => old(x)
        }
      },
      libraryDependencies ++= Seq(
        "org.scalatra" %% "scalatra" % ScalatraVersion,
        "org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
        "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
        "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
        "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container;compile",
        "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test;compile" artifacts (Artifact("javax.servlet", "jar", "jar")),
        "org.scalatra" %% "scalatra-atmosphere" % "2.2.1",
        "org.scalatra" %% "scalatra-json" % "2.2.1",
        "org.json4s"   %% "json4s-jackson" % "3.2.4",
        "org.eclipse.jetty" % "jetty-websocket" % "8.1.10.v20130312" % "container;compile",
        "org.scalatest" % "scalatest_2.10" % "2.0.M6-SNAP17",
        "com.typesafe.akka" % "akka-testkit_2.10" % "2.2.0",
        "joda-time" % "joda-time" % "2.3",
        "com.github.nscala-time" %% "nscala-time" % "0.6.0",
        "com.cloudphysics" % "jerkson_2.10" % "0.6.3",
          "net.databinder.dispatch" %% "dispatch-core" % "0.11.0"

我查看了 scalatra 的源代码,似乎是未来内部的代码正在爆炸。我正在使用以下可能相关的执行上下文:

implicit val ec: ExecutionContext = context.dispatcher

【问题讨论】:

    标签: scala akka atmosphere scalatra


    【解决方案1】:

    我要在这里猜测一下,说你正在拉入两个版本的 akka-actor jar。您明确引用 akka-testkit 将拉入 akka-actor 2.2.0 jar。我猜其他东西(可能是 scalatra 气氛)也在吸引 akka-actor 而不是 2.2.0 版本。你应该检查你的类路径,看看你是否确实有两个版本的 akka-actor

    【讨论】:

    • 绝对完美 :) 我非常专注于这个问题,我没有花时间退后一步看看类似的东西。
    猜你喜欢
    • 2021-05-20
    • 2018-12-14
    • 2017-10-02
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多