Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java akka持久性与Play框架_Java_Playframework_Sbt_Akka_Akka Persistence - Fatal编程技术网

Java akka持久性与Play框架

Java akka持久性与Play框架,java,playframework,sbt,akka,akka-persistence,Java,Playframework,Sbt,Akka,Akka Persistence,我已经设置了一个项目,我想与它一起使用。我下载了akka persistence的JAR,并将其放在我的Play项目的lib文件夹中。akka持久性类是可以识别的,我可以编译和运行应用程序,但是一旦应用程序启动,它就会抛出NoClassDefFoundError异常,应用程序就会停止。我以前曾成功地使用过akka持久性,但没有使用Play框架项目。有什么提示吗 注意:我使用的是Play Framework 2.3.4,我相信它使用的是Akka 2.3.4,手动删除了Akka持久性模块。我在使用J

我已经设置了一个项目,我想与它一起使用。我下载了akka persistence的JAR,并将其放在我的Play项目的lib文件夹中。akka持久性类是可以识别的,我可以编译和运行应用程序,但是一旦应用程序启动,它就会抛出NoClassDefFoundError异常,应用程序就会停止。我以前曾成功地使用过akka持久性,但没有使用Play框架项目。有什么提示吗

注意:我使用的是Play Framework 2.3.4,我相信它使用的是Akka 2.3.4,手动删除了Akka持久性模块。我在使用Java,而不是Scala。akka持久性的jar是akka-persistence-experimental_2.11-2.3.4.jar。引发的异常和堆栈跟踪如下所示:

[info] play - Application started (Dev)
[info] play - Starting application default Akka system.
Uncaught error from thread [application-akka.persistence.dispatchers.default-plugin-dispatcher-7] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled for ActorSystem[application]
java.lang.NoClassDefFoundError: org/iq80/leveldb/DBFactory
    at akka.persistence.journal.leveldb.LeveldbJournal.<init>(LeveldbJournal.scala:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at akka.util.Reflect$.instantiate(Reflect.scala:45)
    at akka.actor.NoArgsReflectConstructor.produce(Props.scala:361)
    at akka.actor.Props.newActor(Props.scala:252)
    at akka.actor.ActorCell.newActor(ActorCell.scala:552)
    at akka.actor.ActorCell.create(ActorCell.scala:578)
    at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
    at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
    at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263)
    at akka.dispatch.Mailbox.run(Mailbox.scala:219)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.iq80.leveldb.DBFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 18 more
[ERROR] [12/16/2014 20:56:12.495] [application-akka.persistence.dispatchers.default-plugin-dispatcher-7] [ActorSystem(application)] Uncaught error from thread [application-akka.persistence.dispatchers.default-plugin-dispatcher-7] shutting down JVM since 'akka.jvm-exit-on-fatal-error' is enabled
java.lang.NoClassDefFoundError: org/iq80/leveldb/DBFactory
    at akka.persistence.journal.leveldb.LeveldbJournal.<init>(LeveldbJournal.scala:20)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
    at java.lang.Class.newInstance(Class.java:379)
    at akka.util.Reflect$.instantiate(Reflect.scala:45)
    at akka.actor.NoArgsReflectConstructor.produce(Props.scala:361)
    at akka.actor.Props.newActor(Props.scala:252)
    at akka.actor.ActorCell.newActor(ActorCell.scala:552)
    at akka.actor.ActorCell.create(ActorCell.scala:578)
    at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456)
    at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)
    at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:263)
    at akka.dispatch.Mailbox.run(Mailbox.scala:219)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.iq80.leveldb.DBFactory
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 18 more

我找到的当前解决方案是将这两个依赖项添加到build.sbt:

name := """project-name"""

version := "1.0-SNAPSHOT"

lazy val root = (project in file(".")).enablePlugins(PlayJava)

scalaVersion := "2.11.1"

libraryDependencies ++= Seq(
  "com.typesafe.akka" %% "akka-persistence-experimental" % "2.3.4",
  "org.iq80.leveldb" % "leveldb" % "0.7", // I added this
  "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8", // and this, because of the jar
  "org.scalatest" %% "scalatest" % "2.1.6" % "test",
  "com.amazonaws" % "aws-java-sdk-dynamodb" % "1.9.5"
)

libraryDependencies ++= Seq(
  javaJdbc,
  javaEbean,
  cache,
  javaWs
)
  "org.iq80.leveldb" % "leveldb" % "0.7"

  "org.fusesource.leveldbjni" % "leveldbjni-all" % "1.8"

尽管如此,我还是很高兴听到为什么这样的事情解决了这个问题,如果它在web上的某个地方有很好的文档记录。

这是因为您缺少akka持久性所依赖的其他瞬态依赖项。例如,默认情况下,它取决于:

org.fusesource.leveldbjni:leveldbjni all:1.7 org.iq80.leveldb:leveldb:0.5 protobuf:protobufjava:2.5.0 所有这些都有进一步的依赖性。您不应该手动下载/添加JAR,而应该在build.sbt中将akka持久性添加到libraryDependencies中,这将自动引入所有必需的依赖项

libraryDependencies += "com.typesafe.akka" %% "akka-persistence-experimental" % "2.3.4"

谢谢你的回答。我手动添加JAR的原因正是将其添加到build.sbt中不起作用,而其他依赖项在build.sbt中按预期工作。你说它不起作用是什么意思?你犯了什么样的错误?你需要确保没有任何打字错误。我甚至抄了你贴的那句话来试试。当我说它不起作用时,我的意思是:1我在build.sbt上写了依赖项。2 sbt更新了项目3我可以从build.sbt中的其他库访问其他类,但不能访问akka persistence中的类。我将在问题后面附加build.sbt。感谢您的帮助。请尝试从libraryDependencies中删除leveldb和leveldbjni,因为它们可能不是akka persistence所依赖的。这是一开始的情况,我发现不存在非类型PersistentActor,并且通常无法访问整个akka persistence内容。