我確實有一個服務「A」,這個服務將從其他11個組件中使用。如果我通過osgi控制檯檢查所有可用的服務,我確實看到只有一個實例和所有11個組件使用此服務。OSGI兩個相同服務的實例
但出於一些奇怪的原因,我不明白,其中兩個組件不使用相同的服務實例。如果我調試我看到兩個不同的ID。這怎麼會發生? 而我沒有提到here。
我通過在eclipse中設置「這個組件被立即激活」解決了這個問題。但正如我紅here,這不是這個複選框的目的。所以,也許有人可以解釋這是怎麼發生的,爲什麼它被修復了。
我確實有一個服務「A」,這個服務將從其他11個組件中使用。如果我通過osgi控制檯檢查所有可用的服務,我確實看到只有一個實例和所有11個組件使用此服務。OSGI兩個相同服務的實例
但出於一些奇怪的原因,我不明白,其中兩個組件不使用相同的服務實例。如果我調試我看到兩個不同的ID。這怎麼會發生? 而我沒有提到here。
我通過在eclipse中設置「這個組件被立即激活」解決了這個問題。但正如我紅here,這不是這個複選框的目的。所以,也許有人可以解釋這是怎麼發生的,爲什麼它被修復了。
當您使用聲明式服務時,DS運行時可能會在某些情況下重新實例化您的服務,通常是因爲它所依賴的某些服務已經出現/更改/刪除且引用是靜態的。請查看全部使用服務A的站點是靜態的,還是使用綁定/取消綁定方法都是動態的。
是的,這是混亂,我混合靜態和動態,thx。 –
你使用聲明式服務嗎?另外,你的意思是說Java對象ID是不同的? –
@TassosBassoukos是的,我可以嗎? –
作爲一個設計原則,你的服務應該能夠容忍不是一個單身人士。正如答案所說,各種各樣的事情可能會導致它重新初始化。如果您需要存儲全局狀態,則可以考慮其他選項。 –