Я пытаюсь создать предварительный хук DataSource конфигурации OPS4J PAX, чтобы автоматизировать проверку целостности структуры базы данных и обновления через Liquibase. В соответствии с этого урока все, что мне нужно сделать, это пометить реализацию PreHook
аннотацией @Component
, присвоив ей свойство name и ссылаться на это свойство в конфигурации DataSource, что я и сделал.
Проблема, похоже, в том, что компонент никогда не выбирается SCR.
@Component(property = "name=coredbmigrate")
public class LiquibaseMigrator implements PreHook {
public LiquibaseMigrator() {
System.out.println();
System.out.println("PREHOOK INITIALIZED");
System.out.println();
}
@Override
public void prepare(DataSource dataSource) throws SQLException {
System.out.println();
System.out.println("PREHOOK CALLED");
System.out.println();
}
}
Как вы можете видеть, я добавил основные выходные данные, чтобы указать, когда компонент устанавливается и вызывается, и ни один из них никогда не происходит.
Сгенерированный OSGI-INF/lv.cps.is.ledger.accounts.db.LiquibaseMigrator.xml
файл:
<?xml version="1.0" encoding="UTF-8"?>
<component name="lv.cps.is.ledger.accounts.db.LiquibaseMigrator">
<implementation class="lv.cps.is.ledger.accounts.db.LiquibaseMigrator"/>
<service>
<provide interface="org.ops4j.pax.jdbc.hook.PreHook"/>
</service>
<property name="name" type="String" value="coredbmigrate"/>
</component>
Service-Component
заголовок в MANIFEST.MF
также установлен правильно.
В чем может быть причина того, что компонент никогда не создается? А может это так, но я этого не вижу?