当所有引用都满足时,为什么我的Karaf OSGI包标记为UNSATISFIED?

时间:2012-09-05 17:40:16

标签: java osgi apache-felix apache-karaf

尽管所有参考文献都得到满足,但卡拉夫仍然表示我的捆绑是不安全的。

我使用以下三个组件 - 来自scr的相关控制台输出:list:

[20  ] [UNSATISFIED     ] com.barchart.news.modules.mysql.MySQLIndex
[16  ] [ACTIVE          ] com.barchart.news.server.pipeline.StoryPipeline
[14  ] [ACTIVE          ] com.barchart.news.server.common.SharedExecutorProvider

组件16和14提供以下服务(来自service:list的输出):

service:list com.barchart.news.server.pipeline.PipelineService
[com.barchart.news.server.common.ModuleStatus, com.barchart.news.server.pipeline.PipelineService]
-------------------------------------------------------------------------------------------------
 component.name = com.barchart.news.server.pipeline.StoryPipeline
 component.id = 16
 service.id = 348
Provided by : 
 barchart-news-server (102)

service:list com.barchart.news.server.common.SharedExecutorService 
[com.barchart.news.server.common.ModuleStatus, com.barchart.news.server.common.SharedExecutorService]
-----------------------------------------------------------------------------------------------------
 component.name = com.barchart.news.server.common.SharedExecutorProvider
 component.id = 14
 service.id = 346
Provided by : 
 barchart-news-server (102)
Used by: 
 barchart-news-server (102)

在这两者都属于的barchart-news-server包中,引用被满足并按预期绑定(来自scr:details的输出):

scr:details com.barchart.news.server.pipeline.StoryPipeline
Component Details
  Name                : com.barchart.news.server.pipeline.StoryPipeline
  State               : ACTIVE
References
  Reference           : com.barchart.news.server.common.SharedExecutorService/*
    State             : satisfied
    Multiple          : single
    Optional          : mandatory
    Policy            : static
    Service Reference : Bound Service ID 346 (com.barchart.news.server.common.SharedExecutorProvider)

但是,在依赖于这些服务的第二个包(#20)的组件中,尽管Karaf将引用标记为“满意”,但它不会绑定它们并激活组件:

scr:com.barchart.news.modules.mysql.MySQLIndex的详细信息:

Component Details
  Name                : com.barchart.news.modules.mysql.MySQLIndex
  State               : UNSATISFIED
References
  Reference           : com.barchart.news.server.common.SharedExecutorService/*
    State             : satisfied
    Multiple          : single
    Optional          : mandatory
    Policy            : static
    Service Reference : No Services bound
  Reference           : com.barchart.news.server.pipeline.PipelineService/*
    State             : satisfied
    Multiple          : single
    Optional          : mandatory
    Policy            : static
    Service Reference : No Services bound

什么阻止MySQLIndex包被激活?

1 个答案:

答案 0 :(得分:2)

如果我正确阅读,那么您的问题不是一个不满意的捆绑,而是一个不满意的服务。如果到目前为止,SCR已经获得了您的服务,那么您的捆绑包必须已经处于活动状态。

使用声明式服务,当configuration-policy=require的服务缺少配置时,我看到了类似的行为。另一种可能性是activate - 方法引发了异常。