OSGI 组件未被 SCR (ServiceMix) 拾取?

OSGI component not being picked up by SCR (ServiceMix)?

我正在尝试创建一个 OPS4J PAX 配置数据源 pre-hook 以通过 Liquibase 自动执行数据库结构完整性检查和更新。根据 this tutorial,我所要做的就是用 @Component 注释标记一个 PreHook 实现,为其命名 属性 并在数据源中引用 属性配置,我已经完成了。

问题似乎是组件从未被 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中的header也设置正确。

组件从未实例化的原因可能是什么?或者也许是,但我没看到?

你有安装scr功能吗?默认情况下不安装它,在这种情况下,DS 组件将被静默忽略。

安装完成后,您可以使用 scr:* 命令检查组件的状态。