SCR(ServiceMix)没有获取OSGI组件?

时间:2018-04-27 15:10:02

标签: java osgi apache-karaf apache-servicemix

我正在尝试创建一个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标题也设置正确。

组件永远不会被实例化的原因是什么?或许它是,但我没有看到它?

1 个答案:

答案 0 :(得分:0)

您是否安装了scr功能?默认情况下,它未安装,在这种情况下,DS组件将被静默忽略。

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