2014-03-12 154 views
0

我確實有一個服務「A」,這個服務將從其他11個組件中使用。如果我通過osgi控制檯檢查所有可用的服務,我確實看到只有一個實例和所有11個組件使用此服務。OSGI兩個相同服務的實例

但出於一些奇怪的原因,我不明白,其中兩個組件不使用相同的服務實例。如果我調試我看到兩個不同的ID。這怎麼會發生? 而我沒有提到here

我通過在eclipse中設置「這個組件被立即激活」解決了這個問題。但正如我紅here,這不是這個複選框的目的。所以,也許有人可以解釋這是怎麼發生的,爲什麼它被修復了。

+0

你使用聲明式服務嗎?另外,你的意思是說Java對象ID是不同的? –

+0

@TassosBassoukos是的,我可以嗎? –

+0

作爲一個設計原則,你的服務應該能夠容忍不是一個單身人士。正如答案所說,各種各樣的事情可能會導致它重新初始化。如果您需要存儲全局狀態,則可以考慮其他選項。 –

回答

2

當您使用聲明式服務時,DS運行時可能會在某些情況下重新實例化您的服務,通常是因爲它所依賴的某些服務已經出現/更改/刪除且引用是靜態的。請查看全部使用服務A的站點是靜態的,還是使用綁定/取消綁定方法都是動態的。

+0

是的,這是混亂,我混合靜態和動態,thx。 –

相關問題