Сервер 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");
}
}