2015-03-31 159 views
1

重新绑定/重新启动包更新:依赖于另外一个

我会想知道是否有可能迫使所有有参考其他OSGi服务解除绑定到它,因为那时重新绑定的依赖关系。

例如

我有ABC所有OSGi服务,有服务依赖于X。然后X改变一些东西,并希望绑定到它的所有其他服务执行解除绑定然后绑定。这没有X被停止或重新加载或更改其他服务的代码。

这是可能的标准OSGi

回答

2

您似乎混淆了服务依赖和包(类型)依赖关系。

对于服务依赖关系,当服务未注册并且注册替换服务时,存在已发布的服务事件。服务的客户可以做出反应,这就是声明式服务,Blueprint和ServiceTracker都能提供的帮助。

对于程序包依赖关系,如果更新了导出程序包的程序包,则导入该程序包的所有依赖程序包都会连接到该程序包的旧版本。这些依赖包可以刷新,这会导致它们停止,将新的类加载器连接到更新后的包,然后重新启动。见https://osgi.org/javadoc/r5/core/org/osgi/framework/wiring/FrameworkWiring.html#refreshBundles%28java.util.Collection,%20org.osgi.framework.FrameworkListener...%29

+0

你说得对,我把OSGi服务依赖和bundle依赖混在一起。但是在服务的情况下,问题保持不变。我该如何强制依赖于X OSGi Service的所有依赖关系在不更改其他组件的情况下解除绑定并再次绑定 – 2015-04-01 08:44:06

+1

您不能强制它们解除绑定。他们需要编写来处理服务动态并对服务事件做出响应。这就是您在使用服务时使用声明式服务,Blueprint或ServiceTracker的原因。 – 2015-04-01 16:09:46

相关问题