2014-03-12 78 views
3

我有以下問題:OSGI:什麼是等待聲明式服務組件啓動的最佳方法?

1:一個OSGi包A(春分)被激活,並且所述活化劑解析XML文件
2:在XML文件中,當請求的聲明性服務,這是存在於另一束(B)
3:疊B尚未激活,所以束A的激活需要等待

我知道如何處理這純粹是在DS,但分析需要在被執行活化劑。此外,我不想與開始關卡和類似的東西混在一起。理想情況下,我希望能夠在需要時註冊捆綁包B提供的服務。

有沒有一種優雅的方式來實現這一目標?

感謝,

基斯

+0

AFAIK你可以註冊爲BundleListener,看看它何時被激活 –

+0

哦,並得到工作的激活..不好 –

+0

嗨尼爾斯,我知道激活問題,但目前我堅持這個問題,因爲的第三方圖書館(和類加載問題)。 – keesp

回答

2

OSGi服務本質上是動態,因此你永遠不應該依賴於服務的可用性。您需要通過ServiceTracker或更好的方式使用某種服務跟蹤,然後選擇純粹的DS解決方案,爲您完成所有艱苦的工作。

既然你指出你必須解析XML文件,我想你決定使用某種具有服務的外部配置來使用。我會建議重新考慮這種類型的架構。您需要編寫大量代碼,而通常可以通過使用配置管理和聲明式服務/藍圖的組合來實現相同的目標。

+0

那麼,設計上的改變確實是最好的解決方案。我現在解析XML文件兩次,一次(快速)確定需要加載哪些服務,之後我會偵聽註冊的服務。如果我需要的所有服務都可用,那麼我會更徹底地解析XML文件以安裝服務。稍微多一點工作,但要更簡潔一些。謝謝 – keesp

相關問題