在 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
。但是在日志中,我没有看到我尝试记录的消息。
一些信息:
- 这是一个 Maven 构建
osgi.cmpn
和 slf4j-api
是我在 pom.xml
中的依赖项,到目前为止没有其他依赖项。
- 此
中没有 bnd.bnd
文件
我已阅读 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
)
我正在尝试在我的全新包中添加一个函数,该函数在 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
。但是在日志中,我没有看到我尝试记录的消息。
一些信息:
- 这是一个 Maven 构建
osgi.cmpn
和slf4j-api
是我在pom.xml
中的依赖项,到目前为止没有其他依赖项。- 此 中没有
bnd.bnd
文件
我已阅读 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
)