Rebind/restart 个依赖于另一个的捆绑包
Rebind/restart bundles which depend on other one
更新:
我想知道是否可以强制所有引用其他 OSGi
服务的依赖项解除绑定,然后重新绑定。
例如
我有 A
、B
、C
所有 OSGi
服务都依赖于 X
。然后 X
改变一些东西并希望绑定到它的所有其他服务执行解除绑定然后绑定。这没有 X
被停止或重新加载或更改其他服务的代码。
标准 OSGi
这可能吗?
您似乎混淆了服务依赖性和包(类型)依赖性。
对于服务依赖,当取消注册服务并注册替代服务时,会发布服务事件。服务的客户端可以做出反应,这正是声明式服务、蓝图和 ServiceTracker 的全部帮助。
对于包依赖项,如果导出包的包被更新,那么导入包的所有依赖包将保留连接到包的旧版本。可以刷新这些依赖包,这将导致它们停止,将新的 class 加载程序连接到更新的包,然后重新启动。参见 https://osgi.org/javadoc/r5/core/org/osgi/framework/wiring/FrameworkWiring.html#refreshBundles%28java.util.Collection,%20org.osgi.framework.FrameworkListener...%29。
更新:
我想知道是否可以强制所有引用其他 OSGi
服务的依赖项解除绑定,然后重新绑定。
例如
我有 A
、B
、C
所有 OSGi
服务都依赖于 X
。然后 X
改变一些东西并希望绑定到它的所有其他服务执行解除绑定然后绑定。这没有 X
被停止或重新加载或更改其他服务的代码。
标准 OSGi
这可能吗?
您似乎混淆了服务依赖性和包(类型)依赖性。
对于服务依赖,当取消注册服务并注册替代服务时,会发布服务事件。服务的客户端可以做出反应,这正是声明式服务、蓝图和 ServiceTracker 的全部帮助。
对于包依赖项,如果导出包的包被更新,那么导入包的所有依赖包将保留连接到包的旧版本。可以刷新这些依赖包,这将导致它们停止,将新的 class 加载程序连接到更新的包,然后重新启动。参见 https://osgi.org/javadoc/r5/core/org/osgi/framework/wiring/FrameworkWiring.html#refreshBundles%28java.util.Collection,%20org.osgi.framework.FrameworkListener...%29。