Сервер Ebean по умолчанию является нулевым, когда модуль запуска называется [Play Framework]

Я использую Play Framework 2.5.10 с sbt-play-ebean 3.0.0.

Моя проблема
Мне нужно настроить актеров Akka для каждого объекта из одной из моих моделей при запуске приложения. Единственный официальный способ сделать это - зарегистрировать модуль запуска. Но иногда сервер Ebean по умолчанию еще не инициализируется при вызове модуля запуска.

Мое безобразное решение

Модуль запуска:

public class StartupModule extends AbstractModule implements AkkaGuiceSupport {

  @Override
  protected void configure() {
    bindActor(MainActor.class, "main-actor");
  }
}

Конструктор класса MainActor:

@Inject
public MainActor(ActorSystem system) {
  this.system = system;

  boolean ebeanReady = false;
  EbeanServer ebeanServer = null;

  do  {
    try {
      ebeanServer = Ebean.getDefaultServer();
    } catch (PersistenceException e) {
      Logger.error("Ebean not ready!");
    }

    if (ebeanServer != null) {
      ebeanReady = true;
      Logger.info("Ebean ready!");
      Ebean.runCacheWarming();
    }

  } while (!ebeanReady);

  for (Model model : Model.find.all()) {
     foo(model);
  }

}

Есть ли лучший способ сделать это без попыток перебора, пока сервер Ebean не будет инициализирован?

1 ответ

У меня была та же проблема, я решил это, связав Ebean Dynamic Evolutions с модулем:

public class StartupModule extends AbstractModule implements AkkaGuiceSupport 
{
    @Override
    protected void configure() {
         bind(DynamicEvolutions.class).to(EbeanDynamicEvolutions.class).asEagerSingleton();
         bindActor(MainActor.class, "main-actor");
    }
}
Другие вопросы по тегам