Расширение CDI для пролета - программирование
Подтвердить что ты не робот

Расширение CDI для пролета

Я попытался запустить пролет в моем приложении, прежде чем спящий режим подключится к моему JBoss AS 7.1. Я пробовал с аннотацией @javax.ejb.Startup, но это выполняется. ПОСЛЕ Hibernate инициализируется и проверяется схема базы данных.

Итак, насколько я понимаю, мы можем использовать расширение CDI, которое подключается до того, как инициализируется Hibernate. Есть ли какая-то поддержка для этого в поле для пролета? А если нет, то кто-нибудь пытался это сделать раньше?

4b9b3361

Ответ 1

Хорошо, наконец, я узнал, как это сделать: мне пришлось использовать Hibernate Integration API. Это весь код, который я должен был написать:

public class FlywayIntegrator implements Integrator {

  @Override
  public void integrate(final Configuration configuration, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    final Flyway flyway = new Flyway();

    flyway.setDataSource(....);
    flyway.migrate();
  }

  @Override
  public void integrate(final MetadataImplementor metadataImplementor, final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    //no-op
  }

  @Override
  public void disintegrate(final SessionFactoryImplementor sessionFactoryImplementor, final SessionFactoryServiceRegistry sessionFactoryServiceRegistry) {
    //no-op
  }
}

Если кто-то интересуется более подробной информацией, я создал проект github, который показывает, что: https://github.com/dobermai/Hibernate-Flyway-Integration

Ответ 2

CDI определяет свой собственный жизненный цикл, который выполняется, когда приложения запускаются/останавливаются. (Разве вы не знаете об этом уже: Это - хорошее место, чтобы узнать об основном механизме.)

Проблема - насколько мне известно, заключается в том, что процесс инициализации Hibernate напрямую не связан с запуском CDI. Это означает, что я не уверен, насколько безопасно полагаться на связь между Hibernate и CDI "событиями". Несомненно, нет ничего похожего на CDI-событие HibernateInitialized.

Сказав это, я бы попробовал:) Вы должны реализовать простое расширение, которое подключается к BeforeBeanDiscovery, которое уже получено.

Эта онлайн-презентация дает обзор различных событий CDI и их порядка. Это на немецком языке, к сожалению.