Java Play 2.5.x-没有绑定到此线程的EntityManager

Java Play 2.5.x-没有绑定到此线程的EntityManager,java,jpa,playframework-2.0,akka,Java,Jpa,Playframework 2.0,Akka,我正在从Play 2.3.x迁移到2.5.x,我在从akka演员访问DB时遇到了一个问题。在应用程序启动期间,我将调度程序作为单例注入,并从中创建访问数据库的调度 参与者在构造函数中接收JPAAPI以访问DB,但每次尝试访问DB时,我都会收到下面的错误 有人能解决这个问题吗 我还应该注入HTTP上下文吗?我该怎么做 2017-03-23 11:46:16.990+0000-仪表板监视器接收:73-检查状态 java.lang.RuntimeException:JPA事务失败 atplay.db.

我正在从Play 2.3.x迁移到2.5.x,我在从akka演员访问DB时遇到了一个问题。在应用程序启动期间,我将调度程序作为单例注入,并从中创建访问数据库的调度

参与者在构造函数中接收JPAAPI以访问DB,但每次尝试访问DB时,我都会收到下面的错误

有人能解决这个问题吗

我还应该注入HTTP上下文吗?我该怎么做

2017-03-23 11:46:16.990+0000-仪表板监视器接收:73-检查状态

java.lang.RuntimeException:JPA事务失败

atplay.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:198) 位于actors.DashboardMonitor.onReceive(DashboardMonitor.java:77) 在akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:165) 在akka.actor.actor$class.aroundReceive(actor.scala:484) 在akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95) 在akka.actor.ActorCell.receiveMessage(ActorCell.scala:526) 在akka.actor.ActorCell.invoke(ActorCell.scala:495) 在akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) 在akka.dispatch.Mailbox.run(Mailbox.scala:224) 在akka.dispatch.Mailbox.exec(Mailbox.scala:234) 位于scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) 位于scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) 位于scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) 在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)中

原因:java.lang.RuntimeException:没有绑定到此线程的EntityManager。尝试在JPAApi.withTransaction中包装此调用,或确保在此线程上设置了HTTP上下文

at play.db.jpa.JPAEntityManagerContext.em(JPAEntityManagerContext.java:36) at play.db.jpa.jpa.em(jpa.java:75) 位于models.Probe.getAllProbes(Probe.java:270) 在utils.utils.updatePlatformStatus(utils.java:524) 在actors.DashboardMonitor.lambda$onReceive$0(DashboardMonitor.java:78) atplay.db.jpa.DefaultJPAApi.lambda$和事务$2(DefaultJPAApi.java:194) atplay.db.jpa.DefaultJPAApi.lambda$和事务$3(DefaultJPAApi.java:211) atplay.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:152) atplay.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:210) atplay.db.jpa.DefaultJPAApi.withTransaction(DefaultJPAApi.java:193) ... 还有13个

这是我使用的代码:

@Singleton
public class DashboardMonitor extends UntypedActor {


    private final JPAApi jpaApi;

    @Inject
    public DashboardMonitor(JPAApi jpaApi) {

        this.jpaApi = jpaApi;

    }

    @Override
    public void onReceive(Object message) throws Exception {

        // check message type
        if (message.equals("updateStatus")) {

            try {

                jpaApi.withTransaction(() -> {
                    Utils.updatePlatformStatus();
                });


            }catch (Exception e){
                e.printStackTrace();
            }

        }

    }
}
调度程序:

@Singleton
public class DashboardScheduler {

    // Start aggregate session for aggregate probe
    private Cancellable updateStatusSchedule = null;

    @Inject
    public DashboardScheduler(ApplicationLifecycle lifeCycle, ActorSystem system, @Named("dashboard-monitor") ActorRef dashboardActor) {

        startUpdateStatus(system, dashboardActor);
        initStopHook(lifeCycle);

    }

    /**
     * Start probesTimedOutScheduler
     */
    private void startUpdateStatus(ActorSystem system, ActorRef dashboardActor) {

        if (updateStatusSchedule == null || updateStatusSchedule.isCancelled()) {

            updateStatusSchedule = system.scheduler().schedule(
                    Duration.create(10, TimeUnit.SECONDS),
                    Duration.create((GlobalConfiguration.probeUpdateInterval), TimeUnit.SECONDS),
                    dashboardActor,
                    "updateStatus",
                    system.dispatcher(),
                    null);

        }

    }

}
注入模块:

public class GlobalBootstrapModule extends AbstractModule implements    AkkaGuiceSupport {

    @Override
    protected void configure() {

        bindActor(DashboardMonitor.class, "dashboard-monitor");
        bind(DashboardScheduler.class).asEagerSingleton();

    }
}
你看到这个了吗?您的应用程序上似乎没有注入实体管理器。您看到了吗?您的应用程序上似乎没有注入实体管理器。