В моем текущем проекте я интегрировал JPA в автономное приложение OSGi.Для интеграции я использовал следующие спецификации OSGi:
- Платформа OSGi R7 (Equinox 3.13.0)
- JPA 2.2 (Eclipselink 2.7.1)
- JPA-контейнер
- Контейнер Apache Aries JPA 2.7.0
- Адаптер Apache Aries JPA Eclipselink 2.7.0
- Служба JDBC (PAX JDBC MariaDB 1.3.0)
Эта интеграция работает отлично.
Следующий шаг - интеграция Flyway.Сценарии переноса БД должны быть упакованы непосредственно в пакет сохраняемости.Теперь я хотел бы инициировать миграцию именно при создании DataSource, непосредственно перед регистрацией служб EntityManagerFactory и EntityManagerFactoryBuilder.В этот момент у меня должен быть доступ к загрузчику классов Persistence Bundle, и у меня должен быть инициализированный источник данных.Единственное решение, которое я нашел, - это рефакторинг JPA-контейнера Apache Areas и размещение вызова миграции Flyway в AriesEntityManagerFactoryBuilder.dataSourceReady.Триггер Flyway хранится в виде местоположений в свойствах JPA, например:
<property name="org.flywaydb.Locations" value="classpath:com/hrrm/budget/domain/account/migrations"/>
Это решение правильно расположено в идеальное время для вызова.Но это не подтверждается спецификацией сервиса OSGi JPA 1.1 и было реализовано в виде ловушки в контейнере Apache Aries JPA.
Есть ли еще более совершенное и подтверждающее спецификации решение для интеграции Flyway в мой проект?