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:* 命令检查组件的状态。
我正在尝试创建一个 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:* 命令检查组件的状态。