2012-02-16 6 views
2

Мы используем Akka 2.0 RC1 и получить исключение при создании ActorSystem с сообщением: akka.actor.LocalActorRefProvider и трассировки стека следующим образом:Akka ActorSystem вопрос создания

java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
java.security.AccessController.doPrivileged(AccessController.java:279) 
java.security.AccessController.doPrivileged(AccessController.java:520) 
java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
java.lang.ClassLoader.loadClass(ClassLoader.java:450) 
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
java.lang.ClassLoader.loadClass(ClassLoader.java:385) 
akka.actor.ReflectiveDynamicAccess.getClassFor(DynamicAccess.scala:94) 
akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:102) 
akka.actor.ActorSystemImpl.<init>(ActorSystem.scala:439) 
akka.actor.ActorSystem$.apply(ActorSystem.scala:41) 
akka.actor.ActorSystem$.apply(ActorSystem.scala:51) 
kozo.excel.impl.ConnectClient.<init>(ConnectClient.scala:26) 

Исключение происходит на этой линии:

system = ActorSystem("FunctionClient") 

Любые мысли или идеи? Мы подтвердили, что LocalActorRefProvider был в classpath.

+0

что является исключением, что вы получаете? Вы можете показать application.conf? – stew

+0

Нет приложения.conf для этого процесса. –

ответ

4

Это помогло бы, если бы ты положил фактическое сообщение об исключении в вашем вопросе, но я пойду на конечности здесь и предположить, что это сообщение об ошибке, как illustrated in this thread:

java.lang.ClassCastException: interface akka.actor.ActorRefProvider is 
not assignable from class akka.actor.LocalActorRefProvider 

Он прекрасно работает для я тоже, когда я запускаю его под консолью через sbt, как вы описываете. Однако, если я запустить его с помощью:

-classpath Скала

импорт и выполнить, я получаю ошибку я упомянул.

Причина:

Akka использует контекст загрузчик классов из потока, создавшего ActorSystem, и поскольку каждая линия находится на своем собственном загрузчике, вы будете иметь проблемы, если вы не используете что.

Предложение:

Каждая строка в РЕПЛ работает в отдельном потоке.
Если добавить -Yrepl-sync вариант, он должен работать нормально

+0

Я использую метод getStackTraceString исключения для извлечения stacktrace, и это включено выше. Также getMessage кажется близким, но не соответствует вашему. Мы связываем, чтобы зафиксировать ведение журнала в приложении, чтобы мне не пришлось использовать трюки getStackTraceString и т. Д. Где я могу передать параметр -Yrepl -sync? –

+0

@Roy: к вашей сессии scala (repl) или к вашей сессии sbt: http://stackoverflow.com/questions/7615318/how-to-make-sbt-console-use-yrepl-sync – VonC