【问题标题】:OSGI Component with unsatisfied references of satisfied services具有不满意服务引用的 OSGI 组件
【发布时间】:2017-10-25 12:01:06
【问题描述】:

我将 OSGI 与 Equinox 一起使用,并且在新组件依赖项上遇到问题。它有两个服务引用,都标记为“不满意”。

这将是一个简单的不满足引用问题,这不是因为有另一个组件使用了其中一个引用并且它得到了满足,另一个是系统上也满足的组件。

我尝试调试“AgentServiceImpl”类以确定这是否可能是它的激活问题,但由于它的引用不满足,甚至没有调用该类的方法。

不知道我在这个案例中做错了什么,任何解决此问题的建议或方法将不胜感激。

[更新]

我注意到我所依赖的服务在它的组件声明中有这样的配置:

policy = ConfigurationPolicy.REQUIRE, configurationPid = "com.rm.ums.ruleengine"

所以,如果我不定义它,它就不应该构建组件。但是,即使检索 ConfigurationAdmin 并设置此配置,组件仍然不会上升。并且控制台上并没有出现错误信息,这种情况下不应该显示错误或警告,让开发者知道发生这种情况并可以处理吗?

【问题讨论】:

  • 你有没有试过给不满足的模块一个较低的启动优先级?
  • 我的意思是捆绑起始级别
  • 我没有尝试以较低的启动优先级启动它(我们没有明确配置它),但是我尝试停止并再次启动这个包(在所有其他服务都可用之后) 并且它仍然将引用显示为“不满意”
  • 我在没有这个包的情况下启动了容器,在所有包启动后我手动部署了这个。仍然与打印屏幕上的结果相同

标签: java reference dependencies osgi equinox


【解决方案1】:

原来这是服务配置问题。

我试图注入的这个组件的策略是“REQUIRE”,这意味着除非你提供它的配置,否则它不会启动。我正在使用 ConfigurationAdmin 在另一个包上提供配置,但此配置被绑定到我的包而不是需要它的包。

一旦我配置不将配置绑定到我的包(或手动取消绑定),服务就会按预期启动。

如果日志上有一条警告消息说明发生了这种情况,这可能是可以避免的:(

【讨论】:

    猜你喜欢
    • 2013-10-27
    • 1970-01-01
    • 1970-01-01
    • 2015-01-25
    • 2018-12-25
    • 2014-04-23
    • 1970-01-01
    • 2010-10-02
    相关资源
    最近更新 更多