在 Karaf 的 OSGI 中使用 @Activate 注释

use @Activate annotation in OSGI in Karaf

我正在尝试在我的全新包中添加一个函数,该函数在 Apache Karaf 容器启动时触发一次。

Bundle 中的主要 class 如下所示:

@Component(service = BrandNewBundle.class)
public class BrandNewBundle {

    ....
    @Activate
    protected void activate(ComponentContext myComponentContext) {
        LOG.info("Brand new bundle started.");
    }
}

在 karaf 控制台中,我看到包状态为 Active。但是在日志中,我没有看到我尝试记录的消息。

一些信息:

我已阅读 Apache Felix Service Component Runtime (SCR) 页面。与那里提到的不同,我的 OSGI-INF/....xml 是自动生成的。我不知道如何进一步调试。

综上所述,问题是,如何实际触发我的 activate 功能?

这可能是karaf中的一个经典问题。您需要安装 scr 功能。

feature:install scr

Component 注释也必须有一个 immediate=true。我添加了它,activate() 函数在 karaf 启动时被触发。

@Component(
    immediate=tue,
    service = BrandNewBundle.class
)