2012-09-11 60 views
1

我試圖在普通的Java應用程序中運行多個Equinox實例。運行多個Equinox OSGi框架

目前,我使用開始春分的一個實例在我的應用程序:

EclipseStarter.startup(new String[]{"-console", "-dev", "bin"}, null); 

然而,對於新的使用情況下,這需要大量的捆綁起動,停止和更新,這種做法是不再足夠。

相反,我希望能夠在同一時間持有兩個不同安裝捆綁的框架,並在需要時交換它們。 在某些情況下,我仍然需要停止並重新啓動一些捆綁包,但是這種方法會處理大部分的痛苦。

任何想法如何我可以設置這樣的做法?

非常感謝您的幫助!

塞巴斯蒂安

回答

3

您不應該使用EclipseStarter。使用OSGi launching API創建框架的多個實例。

+0

這聽起來很合理,謝謝。儘管如此,我仍然面臨着這種方法的問題。在啓動和使用第一個框架後啓動第二個框架已經不再是問題了。但是,當我從第二個框架請求服務時,我無法將其投入到正確的服務中。看起來類加載器並不匹配,儘管之前我使用第一個框架獲得的服務時,相同的演員工作了一秒鐘。對於兩個框架系統軟件包,我都導出服務包。你有什麼想法,爲什麼這是一個問題?是否有可能將相同的包導出到多個框架? – user1488793

+0

我找到了我的問題的解決方案。看來Equinox本身在多個框架方面存在問題。我使用ServiceLoader.load(FrameworkFactory.class).iterator()。next()創建新的框架。使用Apache的Felix正在使用這種方法。另一方面,Equinox似乎也遇到了問題。不知道爲什麼... – user1488793

+0

Equinox創建一個新的類加載器來託管每個子框架。我認爲這是爲了解決impl框架中的一些靜態問題。 –

0

您可以通過使用不同的ClassLoader爲他們每個人創建多個靜態實例。創建多個URLClassLoader並將路徑設置爲包含EclipseStarter類的JarFile。使用ClassLoader的loadClass()方法獲取對EclipseStarter類對象的引用。