播放2.5.12 Java - 替换弃用的GlobalSettings.OnStart

时间:2017-03-17 17:50:07

标签: java jpa playframework playframework-2.0 transactional

我尝试从Play 2.3迁移到2.5但是我在更换GlobalSettings.OnStart方法时遇到了问题。 在扩展GlobalSettings的旧Global类中,在onStartMethod中,我正在初始化Global Config并从DB中读取基本内容。 我创建了一个新类,我将代码从onStart方法移动到文档中提到的这个构造函数。

https://www.playframework.com/documentation/2.5.x/GlobalSettings https://www.playframework.com/documentation/2.4.x/PluginsToModules

我正在从AbstractModule中执行eagerSingleton的绑定。该类已正确启动,但我一直收到错误:

  

GlobalBootstrapModule.configure:20 - Binding

     

OnStartConfig.:35 - Global ... on start

     

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

这是我的代码:

替换onStart的新类

public class OnStartConfig implements StartConfigInterface{

private final JPAApi jpaApi;

@Inject
public OnStartConfig(Application application, JPAApi jpa){
   this.jpaApi = jpa;
   Logger.debug("Global...on start");

   jpaApi.withTransaction( ()-> {
        GlobalConfiguration.aggregationCriteria = AggregationCriterion.getAll();
    });
}

我扩展的界面只是一个空的占位符。

用于绑定的AbstractModule:

public class GlobalBootstrapModule extends AbstractModule {

@Override
protected void configure() {

Logger.debug("Binding");
bind(StartConfigInterface.class).to(OnStartConfig.class).asEagerSingleton();

    }
}

我在application.conf文件中启用了该模块:

play {
   modules {
   enabled += modules.GlobalBootstrapModule
   }
}

我认为问题是由于缺少HttpContext。我在哪里可以从初始化期间获取它? 任何帮助都将非常感激

0 个答案:

没有答案