2015-12-01 89 views
0

我如何在osgi中至少需要一個特定api接口的實現?需要至少一個實現?

我比如有一個@Component YellowBlock它使用另一個組件(地圖在這種情況下):

@Component 
public class YellowBlock implements BlockProvider { 
@Reference 
public void setMap(Map map){ 

這在我的OSGi的組件從來沒有「上線」(不能由ServiceTracker的看到)容器,當沒有其他組件實現Map接口。例如,這一個:

@Component 
public class MapImpl implements Map{ 

如果我手動添加這一個黃容器組件「上線」的容器。

我的基數似乎是正確的:cardinality =「1..1」。我還發現了一些關於@reference註釋超時的討論,但是找不到那麼多。

回答

2

這個問題自己回答。

您問「我怎樣才能要求至少一個特定API接口的實現」,然後您的示例代碼就是這樣做的。

+0

乾杯尼爾,我期待的相關性錯誤或類似的錯誤,因爲現在一個外部用戶可以「忘記」,包括在OSGi容器和整個事情的Map實現似乎運行,但實際上它是不是由於缺少需求而運行。外部用戶不知道這是因爲沒有產生錯誤。是否有可能通知用戶缺少需求?因爲現在它默默無聞地讓用戶不知道發生了什麼,也無法知道如何解決它。另外,這樣的@reference要求似乎沒有得到解決。 –

+2

問題是,在運行的OSGi系統中,幾個組件處於非活動狀態是非常正常的。他們可能正在等待稍後提供的服務,或者暫時消失。或者他們可能沒有被配置爲運行。因此,非活動組件不是應用程序級別的錯誤,除非您將其設置爲一個。你可以通過讓另一個依賴於'YellowBlock'的組件(可能帶有一個可選的動態引用)來實現這一點,並且如果預期的時候沒有出現'YellowBlock',則報告一個錯誤。 –

+0

謝謝@尼爾,所以它是由設計,大拇指提供的解決方案,將採取一窺一看,如果我將遵循設計或實施其中的一種解決方案。 –

相關問題