我正在开发一个基于 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
尽管。有人知道为什么吗?
最佳答案
我们遇到了类似的问题:
- 组件的activate方法抛出异常(见日志)
- 组件的 activate 方法没有返回(参见线程转储)
- activate 中的无限循环(或 JVM 增强递归)
- 死锁
如果您在 equinox 中并且没有安装将 LogEvents 转发到日志文件/控制台的 bundle ,请不要忘记检查配置目录,Equinox 在其中放置错误消息的日志文件。
关于java - 声明式服务组件满意和不满意,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27445070/