我正在尝试创建一个OPS4J PAX配置DataSource预挂钩,以通过Liquibase自动执行数据库结构完整性检查和更新。根据{{3}},我所要做的就是使用PreHook
注释标记@Component
实现,为其指定一个名称属性,并在DataSource配置中引用该属性,我已经完成了。 / p>
问题似乎是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>
<{1}}中的 Service-Component
标题也设置正确。
组件永远不会被实例化的原因是什么?或许它是,但我没有看到它?
答案 0 :(得分:0)
您是否安装了scr功能?默认情况下,它未安装,在这种情况下,DS组件将被静默忽略。
安装后,您可以使用scr:*命令检查组件的状态。