2013-07-23 74 views
0

Im試圖訪問java項目中的osgi ds。我發現在互聯網上像這樣的例子:訪問java項目中的osgi聲明式服務

BundleContext context = FrameworkUtil.getBundle(this.getClass()).getBundleContext(); 
ServiceReference serviceReference = context.getServiceReference(MyClass.class.getName()); 
MyClass blah = (MyClass) new ServiceTracker(context, serviceReference, null).getService(); 
blah.doStuff(); 

這裏的問題是,如果我在一個Java類中運行這個「背景」變量爲空。我想這可能是因爲它不在一個osgi包中。

我試圖chaning的東西,如果我改變它像這樣它的工作原理:

BundleContext context = FrameworkUtil.getBundle(Myclass.class).getBundleContext(); 

但說實話,我真的不明白這個包上下文。 它究竟是什麼,它可以與參考類是相同的類嗎?

手冊聲明以下內容: 上下文 - 跟蹤完成的BundleContext。 ......但是,這些讓我更清楚。

謝謝!

回答

2

FrameworkUtil.getBundle(Class)如果傳入的類是由OSGi包類加載器加載的,則只返回非null。這意味着你實際上需要在OSGi包中。

你需要更清楚你想要做什麼。 「在Java項目中訪問OSGi DS」幾乎沒有意義。另外,既然看起來你剛剛開始使用OSGi,爲什麼不從一個簡單的東西開始,比如通過一個基本的教程進行工作,而不是在深處跳躍?

最後請注意,下面的代碼片斷是無稽之談:MyClass.class.getClass()。文字MyClass.class已經爲您提供了您想要的課程......如果您再撥打getClass就可以獲得課程java.lang.Class!這幾乎肯定不是你想要的。

+0

感謝您的回答。 MyClass.class是正確的,只是在複製時出錯。我會糾正我的問題。 但問題的真正意義在於理解上下文變量是什麼?它可以是同一類的背景,即時獲得參考? – user1985273

+0

BundleContext是訪問OSGi API的句柄。 OSGi框架爲每個包提供了自己的上下文對象,該包在任何時候調用OSGi時都應該使用它。這樣,OSGi總是知道哪個軟件包正在調用它。 –

+0

那麼,如果把手與參考相同,那麼可以嗎? – user1985273