我尝试在Tomcat 7上使用akka在Scala中部署一个简单的应用程序。
在第一个版本中,actor系统和主actor直接从Scala对象启动。
在第二个版本中,我创建了一个初始化器(扩展ServletContextListener),以便在部署战争时启动actor系统和actor。
在这两种情况下,我都得到一个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。
有什么建议吗?任何阅读建议?或者?? ??
答案 0 :(得分:0)
我们在Jetty 8中运行Akka actor 2.1 - 它应该不会太差异。
您似乎面临ClassLoader
个问题(我假设您使用的是java 6并且没有二进制兼容性问题)。
我建议您尝试从战争中删除scala-library.2.10.0.jar
和akka-actor_2.10-2.1.0.jar
并将其放入tomcat 7 lib
文件夹中吗?