使用akka'创建新邮箱类型;s java api获取java.lang.VerifyError
我正在将Akka 2.2.3(使用其Java API)集成到Java/Groovy Spring项目中。一切进展顺利,但在创建自定义邮箱类型(基于有界优先级队列的邮箱)后,我遇到了一个错误:使用akka'创建新邮箱类型;s java api获取java.lang.VerifyError,java,groovy,akka,jvm-arguments,Java,Groovy,Akka,Jvm Arguments,我正在将Akka 2.2.3(使用其Java API)集成到Java/Groovy Spring项目中。一切进展顺利,但在创建自定义邮箱类型(基于有界优先级队列的邮箱)后,我遇到了一个错误: Caused by: java.lang.VerifyError: (class: com/test/pricing/transformer/spring/WorkerPriorityMailbox, method: <init> signature: (Lakka/actor/ActorSys
Caused by: java.lang.VerifyError: (class: com/test/pricing/transformer/spring/WorkerPriorityMailbox, method: <init> signature: (Lakka/actor/ActorSystem$Settings;Lcom/typesafe/config/Config;)V) Expecting to find object/array on stack
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2493)
at java.lang.Class.getConstructor0(Class.java:2803)
at java.lang.Class.getDeclaredConstructor(Class.java:2053)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$2.apply(DynamicAccess.scala:76)
at scala.util.Try$.apply(Try.scala:161)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:73)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:84)
at akka.actor.ReflectiveDynamicAccess$$anonfun$createInstanceFor$3.apply(DynamicAccess.scala:84)
at scala.util.Success.flatMap(Try.scala:200)
at akka.actor.ReflectiveDynamicAccess.createInstanceFor(DynamicAccess.scala:84)
at akka.dispatch.Mailboxes.lookupConfigurator(Mailboxes.scala:195)
at akka.dispatch.Mailboxes.lookup(Mailboxes.scala:78)
at akka.dispatch.Mailboxes.getMailboxType(Mailboxes.scala:154)
at akka.actor.LocalActorRefProvider.actorOf(ActorRefProvider.scala:718)
at akka.actor.dungeon.Children$class.makeChild(Children.scala:191)
at akka.actor.dungeon.Children$class.attachChild(Children.scala:40)
at akka.actor.ActorCell.attachChild(ActorCell.scala:338)
at akka.actor.ActorSystemImpl.actorOf(ActorSystem.scala:520)
at akka.actor.ActorRefFactory$actorOf.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
下面是创建参与者的代码:
system.actorOf(Props.create(new WorkerActorCreator(applicationContext, it.start, it.end)).withMailbox("priority-full-over-delta-mailboxtype"))
我认为这与编辑邮箱类型之前的工作无关,但以下是WorkerActorCreator的代码(它将spring注释应用于已创建的参与者):
类WorkerActorCreator实现akka.japi.Creator{
应用上下文应用上下文
漫长的开始
长端
公共WorkerActorCreator(ApplicationContext ac、长起点、长终点)
{
applicationContext=ac
this.start=开始
结束
}
@凌驾
WorkerActor create()引发异常{
println(“创建workerT”)
WorkerActor worker=新WorkerActor(开始、结束)
applicationContext.autowireCapableBeanFactory.autowireBean(工作者)
工人
}
}
知道我做错了什么吗
谢谢
编辑:当使用
-Xverify:none
运行应用程序时,它确实有效,但我不确定这是一个长期解决方案 哇,谢谢虚拟机的论点。至少是这样!
priority-full-over-delta-mailboxtype {
mailbox-type = "com.example.pricing.transformer.spring.WorkerPriorityMailbox"
mailbox-capacity = 1000
//Other dispatcher configuration goes here
}
system.actorOf(Props.create(new WorkerActorCreator(applicationContext, it.start, it.end)).withMailbox("priority-full-over-delta-mailboxtype"))
class WorkerActorCreator implements akka.japi.Creator<WorkerActor>{
ApplicationContext applicationContext
Long start
Long end
public WorkerActorCreator(ApplicationContext ac, Long start, Long end)
{
applicationContext = ac
this.start = start
this.end = end
}
@Override
WorkerActor create() throws Exception {
println("creating workerT")
WorkerActor worker = new WorkerActor(start, end)
applicationContext.autowireCapableBeanFactory.autowireBean(worker)
worker
}
}