Расширение CDI для пролета
Я попытался запустить пролет в моем приложении, прежде чем спящий режим подключится к моему JBoss AS 7.1. Я пробовал с аннотацией @javax.ejb.Startup
, но это выполняется. ПОСЛЕ Hibernate инициализируется и проверяется схема базы данных.
Итак, насколько я понимаю, мы можем использовать расширение CDI, которое подключается до того, как инициализируется Hibernate. Есть ли какая-то поддержка для этого в поле для пролета? А если нет, то кто-нибудь пытался это сделать раньше?
Ответы
Ответ 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 и их порядка. Это на немецком языке, к сожалению.