我有一个Apache Felix组件,其定义如下:
...
@Component(immediate=true)
@Service
public class myClass implements myClassInterface {
...
@Activate
public void activate(final Map<String, Object> properties) {
//Do activation stuff
}
...
}
通过阅读@Component
和@Activate
注释(http://felix.apache.org/documentation/subprojects/apache-felix-maven-scr-plugin/scr-annotations.html#component)上的Apache Felix文档,我了解到immediate=true
的{{1}}属性已被激活立即”。我的问题是我的@Component
方法似乎永远不会被调用。从我构建项目的那一刻起,我就开始使用调试器,直到我使用OSGi请求服务activate
,但似乎永远不会调用myClass
方法。
所以,我的问题有几个层次:
告诉我activate
属性导致组件“立即激活”并没有给我足够的信息。这是否意味着组件在构建项目后立即激活,在创建immediate=true
实例后立即激活,或者在OSGi包请求服务myClass
后立即激活?
2.尽管我使用了myClass
,是否有任何可能导致我的activate
方法无法被调用的内容?如果是这样,我该怎么做才能解决问题?
提前感谢您的帮助。如果我需要提供更多信息,请告诉我。
答案 0 :(得分:3)
Immediate = false表示只有在另一个组件请求时才激活该组件。 Immediate = true表示一旦所有强制引用都存在,它就会被激活。
因此,如果您的组件未激活,则可能不存在所需的服务。您可以使用gogo shell中的scr命令查看组件的状态。
另一件事是定义用于发布服务的接口。我不确定felix SCR注释,但如果类没有实现任何接口,则需要使用DS注释设置@Component(service = myClass.class)。
顺便说一下。您应该切换到标准DS注释。见http://enroute.osgi.org/doc/217-ds.html。 felix的现在已被弃用。