2015-03-31 163 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

相關問題