我正在开发一个基于OSGI的系统,它使用声明性服务来定义组件。但是,从Eclipse运行时,我的一个组件未初始化。当我使用简单的控制台命令调查问题时,我得到以下输出(带有一些小的混淆):
osgi> component 51
Component[
name = com.e.location.view
activate = activate
deactivate = deactivate
modified =
configuration-policy = optional
factory = null
autoenable = true
immediate = false
implementation = com.e.location.view.LocationViewContribution
state = Unsatisfied
properties =
serviceFactory = false
serviceInterface = [com.e.model.ViewContribution]
references = {
Reference[name = SpecificationProvider, interface = com.e.SpecificationProvider, policy = static, cardinality = 1..1, target = null, bind = setSpecificationProvider, unbind = null]
}
located in bundle = com.e.location.view_1.0.0.SNAPSHOT [107]
]
Dynamic information :
The component is satisfied
All component references are satisfied
Component configurations :
Configuration properties:
component.name = com.e.location.view
component.id = 55
objectClass = String[com.e.model.ViewContribution]
Instances:
因此组件具有state = Unsatisfied
,但动态信息表明组件已满足,其组件引用也得到满足。
有人可以解释一下吗?为什么我的组件没有初始化?
更新:显然,为组件设置immedate="true"
可修复初始化问题。 osgi命令仍然有state = Unsatisfied
。有谁知道为什么?
答案 0 :(得分:3)
我们遇到类似的问题:
如果你在equinox并且没有安装将LogEvents转发到日志文件/控制台的软件包,请不要忘记检查配置目录,其中equinox将日志文件放入错误消息中。
答案 1 :(得分:0)
请记住,组件的构造函数不能包含参数。
此外,使用enabled="true" immediate="true"
标记中的<scr:component>
属性强制启用。