Przedłużacz CDI do Flyway
Próbowałem uruchomić flyway w mojej aplikacji, zanim hibernate podłączy się do mojego Jbossa jako 7.1. Próbowałem z adnotacją @javax.ejb.Startup
, ale to jest wykonywane po zainicjowaniu Hibernate i sprawdzeniu schematu bazy danych.
O ile dobrze rozumiem, możemy użyć rozszerzenia CDI, które hookuje przed zainicjowaniem Hibernate. Czy jest jakieś wsparcie dla tego z pudełka na flyway? A jeśli nie, czy ktoś próbował to zrobić wcześniej?
2 answers
Ok w końcu dowiedziałem się jak to zrobić: musiałem użyć API integracji Hibernate. To jest cały kod, który musiałem napisać:
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
}
}
Jeśli ktoś jest zainteresowany więcej szczegółów, stworzyłem projekt github, który pokazuje, że: https://github.com/dobermai/Hibernate-Flyway-Integration
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 21:43:10
CDI definiuje swój własny cykl życia, który jest wykonywany podczas uruchamiania / zatrzymywania aplikacji. (Nie powinieneś już o tym wiedzieć: to {[4] } jest dobrym miejscem, aby dowiedzieć się o podstawowym mechanizmie.)
Problem - według mojej najlepszej wiedzy-polega na tym, że proces inicjalizacji Hibernate nie jest bezpośrednio powiązany z uruchomieniem CDI. Oznacza to, że nie jestem pewien, czy bezpiecznie jest polegać na relacji między "zdarzeniami" Hibernate & CDI. Nie ma to jak CDI-Event HibernateInitialized
.
Powiedziawszy to, spróbowałbym:) powinieneś zaimplementować proste rozszerzenie, które hokuje się w BeforeBeanDiscovery
, czyli tak wcześnie, jak się da.
Ta prezentacja online zawiera przegląd różnych wydarzeń CDI i ich kolejności. Jest po niemiecku, niestety.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-06-19 04:09:43