2012-08-08 66 views
1

假設有兩個OSGi包的A和B分別導出x和y包。 如果有一種情況,A依賴於B的出口,而B在A的出口上應該首先啓動。 假設想從不同的類(即不在Activator類中)的共享註冊表中獲取ServiceReference,那麼如何使用當前包的上下文初始化BundleContext對象。兩個OSGi包之間的相互依賴關係

這可能會解決我上面提到的關於相互依賴關係的情況。 像A可以使用B的出口在其激活的啓動方法和B可以使用A的導出在不同的類的方法時被調用

+0

如果A取決於B而B取決於A,那麼您可以啓動這兩個包嗎?對於bundlecontext,我認爲我們有一個BundleContextAware接口 – 2012-08-08 09:56:40

+0

BundleContext bundleContext = FrameworkUtil.getBundle(JasperService.class).getBundleContext(); ServiceReference empServiceReference = bundleContext.getServiceReference(yourclassname.class.getName()); – Nilesh 2012-08-08 11:46:28

+0

這適用於在激活器以外的類中獲取當前包的bundlecontext。 – Nilesh 2012-08-08 11:46:59

回答

2

包解析(解析)是不同的,啓動和運行包。不要混淆兩者是非常重要的。

OSGi框架可以解決程序包依賴關係中的週期。所以一旦捆綁解決了,它們可以按照某種順序啓動。您需要確保您不要設計捆綁才能依賴於它們的相對啓動順序。這就是爲什麼你使用服務和類似DS的東西。服務依賴關係中的週期無法解決。所以確保你避免這種循環。

+0

可能有用的增加:只要循環中至少有一個鏈接是可選的和動態的,服務依賴性循環*就可以工作。 – 2012-08-08 17:32:38

+0

謝謝。我發現這種用例的唯一解決方案是合併兩個bundle,如果它們是相互依賴的。即使創建第三個捆綁似乎也不可行。 – Nilesh 2012-08-09 05:43:12