2009-08-10 39 views
0

即時通訊存在ClassLoader問題。 因爲我相當一個osgi newby,希望答案並不困難:)Netbeans中的OSGi,檢索服務時的ClassCastException

我認爲它與編譯與運行時庫有關。 在Netbeans 6.7.1項目屬性中,編譯時間庫總是傳播到其他類別..所以我不能在那裏區分。

當編譯FelixHost下一罐子用於

  • Felix.jar
  • OSGi的core.jar添加
  • OSGi的compendium.jar
  • osgi.service.obr-1.0.2 .jar

但是運行時,框架將加載OBR的實現。 這個OBR包也包含接口定義。我想這就是爲什麼有一個ClassCastException ..

其實我是想在FelixHost與OBR做一些初步 配置一起工作..

任何想法都歡迎。

+0

我了Felix網站上此給出具體信息: http://felix.apache.org/site/apache-felix-framework-launching-and-embedding.html#ApacheFelixFrameworkLaunchingandEmbedding-hostserviceusage – Houtman 2009-08-17 07:39:32

回答

1

我假設你通過「FelixHost」引用你的封裝和啓動Felix框架的項目。

問題是,你必須小心「OSGi世界」和「非OSGi世界」之間的界限。所有你放在FelixHost類路徑上的東西(也就是說你的情況下所有的編譯時依賴關係)基本上都在OSGi世界之外,所以不建議使用類似「osgi.service.obr-1.0.2.jar」通過這種方式。

正如您所指出的,如果OSGi框架也加載「osgi.service.obr-1.0.2.jar」包,您將進入ClassCastException,因爲您基本上擁有相同類(接口)的兩個版本。

解決此問題的一種可能方法是將您的初始配置邏輯分成單獨的捆綁包,並從OSGi世界內部執行與OBR相關的工作。然後,您可以刪除「osgi.service.obr-1.0.2.jar」上的FelixHost的編譯依賴性,並且只加載一個OBR接口副本。

+0

其實我也讀到它在規範中,並且在輸入問題時,它變得越來越清晰。感謝非常明確的信息。我相信它對其他OSGi新手​​也有用:) – Houtman 2009-08-11 06:43:07