尽管所有参考文献都得到满足,但卡拉夫仍然表示我的捆绑是不安全的。
我使用以下三个组件 - 来自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包被激活?
答案 0 :(得分:2)
如果我正确阅读,那么您的问题不是一个不满意的捆绑,而是一个不满意的服务。如果到目前为止,SCR已经获得了您的服务,那么您的捆绑包必须已经处于活动状态。
使用声明式服务,当configuration-policy=require
的服务缺少配置时,我看到了类似的行为。另一种可能性是activate
- 方法引发了异常。