Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 播放2.0尝试从已关闭的池中获取连接_Java_Playframework 2.0_Akka_Ebean - Fatal编程技术网

Java 播放2.0尝试从已关闭的池中获取连接

Java 播放2.0尝试从已关闭的池中获取连接,java,playframework-2.0,akka,ebean,Java,Playframework 2.0,Akka,Ebean,我有AKKA演员在Play 2应用程序中运行。有一个从数据库检索的POJO对象列表,并以消息的形式传递给参与者。当参与者开始处理这些对象时,它将抛出此异常。我猜它试图从数据库中读取数据是因为ebean的延迟加载。在测试用例中运行时会发生这种情况。我还没有在正常的应用程序环境中进行测试 试图从已关闭的池中获取连接 at com.avaje.ebeaninternal.server.transaction.TransactionManager.createQueryTransaction(Trans

我有AKKA演员在Play 2应用程序中运行。有一个从数据库检索的POJO对象列表,并以消息的形式传递给参与者。当参与者开始处理这些对象时,它将抛出此异常。我猜它试图从数据库中读取数据是因为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)

虽然我不确定这是否与你有关,但我会讲述我的故事。在运行我的测试用例时,没有使用actor,出现了相同的错误消息

首先请注意,在停止播放应用程序期间,其数据源将关闭

由于我的许多测试用例都需要在范围内运行
应用程序
,因此我在每个测试用例周围使用了
with Application
助手。我的例子中的问题是,我的DB access对象是一个单例对象(Scala
对象
),只初始化其
数据源一次。由于该对象从未在测试用例之间重新实例化,因此关闭的数据源仍然存在,从而导致上述错误


在我的案例中,解决方案是确保在测试用例之间重新创建数据源。

Akka将序列化参与者的状态。你需要应用程序的这一部分是有状态的吗?如果不是,那么最好使用演员以外的其他东西。你的意思是我不应该使用演员连接DB吗?如果你愿意,你肯定可以从演员那里连接DB。从stacktrace中可以看出,影响lazy属性的不是序列化,而是
MemberInfo.getType
方法中的某些内容。是吗?是的。但这是在测试用例env中。我不确定play 2.0测试中有什么不同。如果在EBean中强制加载,它是否正常工作?