3

我尝试在 Tomcat 7 上使用 akka 在 Scala 中部署一个简单的应用程序。

在第一个版本中,演员系统和主要演员是直接从 Scala 对象启动的。

在第二个版本中,我创建了一个初始化器(扩展 ServletContextListener),以便在部署战争时启动参与者系统和参与者。

在这两种情况下,我都会得到一个 java.lang.LinkageError ,如下所示:

java.lang.LinkageError: loader constraint violation: when resolving method "akka.actor.Props$.apply(Lscala/reflect/ClassManifest;)Lakka/actor/Props;" the class loader (instance of org/apache/catalina/loader/WebappClassLoader) of the current class, com/my-app/Transfert$, and the class loader (instance of org/apache/catalina/loader/StandardClassLoader) for resolved class, akka/actor/Props$, have different Class objects for the type scala/reflect/ClassManifest used in the signature
  com.my-app.Transfert$.<init>(Transfert.scala:14)
  com.my-app.Transfert$.<clinit>(Transfert.scala)
  com.my-app.Transfert.getState(Transfert.scala)
  org.apache.jsp.transfert_jsp._jspService(transfert_jsp.java:85)
  org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
  org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433)
  org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
  org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
  javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

我在谷歌和任何地方搜索,但我没有找到一个简单的例子来说明如何在 Tomcat 7 上部署 Scala/akka 应用程序?

我知道 akka 1.3 中有一个 akka.http 包,但我想使用 akka 2.0(至少)。似乎 akka.http 已经消失,取而代之的是使用 play-mini。但我宁愿不使用 play-mini 或 play。

有什么建议吗?有什么阅读建议吗?或者 ??

4

1 回答 1

0

我们在 Jetty 8 中运行了 Akka actor 2.1 - 它应该不会有太大的不同。

您似乎遇到了ClassLoader问题(我假设您使用的是 java 6 并且没有二进制兼容性问题)。

我可以建议你尝试从你的战争中删除scala-library.2.10.0.jarakka-actor_2.10-2.1.0.jar把它们放在 tomcat 7lib文件夹中吗?

于 2013-02-13T15:08:58.367 回答