Ich versuche ein lauffähiges Jar über eine Befehlszeile auszuführen, in die mehrere akka-Prozesse eingebettet sind. Obwohl ich nicht der ursprüngliche Autor der Anwendung bin, weiß ich, dass der Code in einer Sonnenfinsternis ziemlich glücklich läuft. Wenn ich jedoch versuche, zu exportieren und dann als runnable Jar laufen, dann fällt es nach einer gewissen Zeit und das ist, wenn es beginnt, die Akka-Prozesse zu initiieren. Ich betreibe es mit Java 8Akka basierte Runnable Jar
java -jar something.jar {options}
Fehler:
at akka.actor.ActorInitializationException$.apply(Actor.scala:174)
at akka.actor.ActorCell.create(ActorCell.scala:607)
at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:461)
at akka.actor.ActorCell.systemInvoke(ActorCell.scala:483)
at akka.dispatch.Mailbox.processAllSystemMessages(Mailbox.scala:282)
at akka.dispatch.Mailbox.run(Mailbox.scala:223)
at akka.dispatch.Mailbox.exec(Mailbox.scala:234)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)
Caused by: akka.ConfigurationException: ActorSystem [akka://ClusterSystem] needs to have a 'ClusterActorRefProvider' enabled in the configuration, currently uses [akka.actor.LocalActorRefProvider]
at akka.cluster.Cluster.<init>(Cluster.scala:71)
at akka.cluster.Cluster$.createExtension(Cluster.scala:34)
at akka.cluster.Cluster$.createExtension(Cluster.scala:29)
at akka.actor.ActorSystemImpl.registerExtension(ActorSystem.scala:737)
at akka.actor.ExtensionId$class.apply(Extension.scala:79)
at akka.cluster.Cluster$.apply(Cluster.scala:29)
at akka.actor.ExtensionId$class.get(Extension.scala:91)
at akka.cluster.Cluster$.get(Cluster.scala:30)
at akka.cluster.Cluster.get(Cluster.scala)
at com.dynniq.its.csm.core.akka.Actor.preStart(Actor.java:93)
at akka.actor.Actor$class.aroundPreStart(Actor.scala:489)
at akka.actor.UntypedActor.aroundPreStart(UntypedActor.scala:95)
at akka.actor.ActorCell.create(ActorCell.scala:590)
@Override
public void preStart() {
**cluster = Cluster.get(getContext().system());**
cluster.subscribe(getSelf(), MemberUp.class);
preStartExtra();
}
aber wie ich sagen, es scheint in der Eclipse-Umgebung zu arbeiten. was mache ich falsch?
Vielen Dank im Voraus.
der Tat die Frage ist, wo 'akka.actor .provider' wird beim Ausführen von Eclipse festgelegt, und warum wird das nicht korrekt ausgeführt, wenn es aus einem Jar ausgeführt wird. Eine andere Sache, die ich mir vorstellen kann, ist, wenn Sie diesen Wert in 'reference.conf' anstelle von' application.conf' setzen: da 'reference.conf' aus dem Klassenpfad gelesen werden, ist ihre Reihenfolge möglicherweise nicht definiert, Sie also sollte keine überlappenden Einstellungen in 'reference.conf' enthalten und stattdessen Ihre Hauptanwendungskonfiguration in' application.conf' setzen. –