【发布时间】:2012-06-17 22:58:40
【问题描述】:
我有 AKKA 演员在 Play 2 应用程序中运行。有一个从数据库中检索到的 POJO 对象列表,并在消息中传递给参与者。当一个actor开始处理这些对象时,它会抛出这个异常。我猜它尝试从 DB 读取数据是因为延迟加载 ebean。在测试用例中运行时会发生这种情况。我没有在正常的应用环境中测试过。
尝试从已关闭的池中获取连接
at com.avaje.ebeaninternal.server.transaction.TransactionManager.createQueryTransaction(TransactionManager.java:356)
at com.avaje.ebeaninternal.server.core.DefaultServer.createQueryTransaction(DefaultServer.java:2021)
at com.avaje.ebeaninternal.server.core.OrmQueryRequest.initTransIfRequired(OrmQueryRequest.java:241)
at com.avaje.ebeaninternal.server.core.DefaultServer.findList(DefaultServer.java:1468)
at com.avaje.ebeaninternal.server.core.DefaultBeanLoader.loadBean(DefaultBeanLoader.java:360)
at com.avaje.ebeaninternal.server.core.DefaultServer.loadBean(DefaultServer.java:526)
at com.avaje.ebeaninternal.server.loadcontext.DLoadBeanContext.loadBean(DLoadBeanContext.java:143)
at com.avaje.ebean.bean.EntityBeanIntercept.loadBean(EntityBeanIntercept.java:548)
at com.avaje.ebean.bean.EntityBeanIntercept.preGetter(EntityBeanIntercept.java:638)
at models.MemberInfo._ebean_get_type(MemberInfo.java:4)
at models.MemberInfo.getType(MemberInfo.java:232)
at actors.MessageWorker.doSendToIOS(MessageWorker.java:161)
at actors.MessageWorker.onReceive(MessageWorker.java:97)
at akka.actor.UntypedActor$$anonfun$receive$1.apply(UntypedActor.scala:154)
at akka.actor.UntypedActor$$anonfun$receive$1.apply(UntypedActor.scala:153)
at akka.actor.Actor$class.apply(Actor.scala:311)
at akka.actor.UntypedActor.apply(UntypedActor.scala:93)
at akka.actor.ActorCell.invoke(ActorCell.scala:619)
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:196)
at akka.dispatch.Mailbox.run(Mailbox.scala:178)
at akka.dispatch.ForkJoinExecutorConfigurator$MailboxExecutionTask.exec(AbstractDispatcher.scala:505)
at akka.jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:259)
at akka.jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
at akka.jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1478)
at akka.jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
【问题讨论】:
-
Akka 将序列化 actor 的状态。你需要应用程序的这一部分是有状态的吗?如果没有,那么也许使用演员以外的东西会更好。
-
你的意思是我不应该使用actor连接数据库吗?
-
如果您愿意,您绝对可以从 Actor 连接到数据库。从您的堆栈跟踪来看,它不是序列化正在打击惰性属性,而是
MemberInfo.getType方法中的某些东西。对吗? -
是的。但这是在测试用例环境中。我不确定 play 2.0 测试有什么不同。
-
如果在 EBean 中强制进行预加载,它是否正常工作?
标签: java playframework-2.0 akka ebean