2012-08-02 50 views
0

今天我使用了OSGi掛鉤,特別是FindHookEventListenerHook服務。我想嘗試代理服務。 EventListenerHook工作正常,我的服務代理。但我意識到,FindHook事件would'nt被稱爲如果服務將通過註釋相關setXXX@Reference(BND風格)獲得服務實現的參考。也許這不是註釋的問題,而是一般的DS。Service.FindHook事件並未通過向組件添加服務引用而調用

這是相當糟糕,卑詩省有註冊一個沒有代理和一個代理的兩個服務。我只想從代理人那裏獲得參考。一般情況下,沒有DS,你可以通過調用BundleContext.getServiceReference(java.lang.Class<S> clazz)和事件FindHook.find將被調用,在那裏你可以決定你想返回ServiceReference引用。

什麼樣的過程會時,我使用的方法一樣DS(對我來說:BND註釋@Reference)被執行?正如我在上節所描述的那樣:我想確定應該引用哪些服務。

回答

0

感謝您的答案,但我發現我自己的解決方案。經過數小時的調試,我發現如果違反了我的代碼條件,並且沒有發生任何特殊情況。 OK。

0

這實際上是DS實施的一個問題。它取決於DS impl如何代表組件包管理服務訪問,因爲它是定位服務的DS實現包。如果DS實現使用組件包的BundleContext來查找服務,那麼您應該能夠影響組件包可見的服務。

+0

OK。你的意思是它有什麼需要做什麼樣的框架我使用?來回例如我正在使用Apache Felix。 – 2012-08-02 12:31:01

+0

不是OSGi框架,而是Declarative Services的實現(您也可能從Apache Felix項目中獲得)。 – 2012-08-03 15:41:23

0

當框架具有兩個服務,將既滿足請求之間作出決定時,它首先選擇一個具有較高服務級別。在註冊服務時,可以將該排名設置爲屬性。因此,在註冊代理時,確保它具有比競爭服務更高的服務等級。

相關問題