0

ClassLoaderの問題が発生しています。私はかなりosgiの初心者なので、うまくいけば答えはそれほど難しくありません:)

コンパイルライブラリとランタイムライブラリに関係していると思います。 Netbeans 6.7.1プロジェクトのプロパティでは、コンパイル時のライブラリは常に他のカテゴリに伝播されるため、そこで区別することはできません。

FelixHostをコンパイルするとき、次のjarファイルが使用されます

  • Felix.jar
  • osgi-core.jar
  • osgi-compendium.jar
  • osgi.service.obr-1.0.2.jar

ただし、実行時に、フレームワークはOBRの実装をロードします。このOBRバンドルには、インターフェイス定義も含まれています。これがclassCastExceptionがある理由だと思います。

実際、FelixHostをOBRと連携させて、初期プロビジョニングを実行したいと考えています。

どんなアイデアでも大歓迎です。

4

1 に答える 1

1

「FelixHost」とは、Felixフレームワークをカプセル化して起動するプロジェクトを指していると思います。

問題は、「OSGiの世界」と「非OSGiの世界」の境界に少し注意する必要があるということです。FelixHostのクラスパスに設定したもの(つまり、この場合はすべてのコンパイル時の依存関係)は基本的にOSGiの世界の外にあるため、「osgi.service.obr-1.0.2.jar」のようなバンドルを使用することはお勧めできません。この上。

OSGiフレームワークが「osgi.service.obr-1.0.2.jar」バンドルもロードする場合は、基本的に同じクラス(インターフェース)の2つのバージョンがあるため、ClassCastExceptionが発生します。

この問題に対する1つの可能な解決策は、初期プロビジョニングロジックを別のバンドルに分離し、OSGiワールド内からOBR関連の作業を実行することです。次に、「osgi.service.obr-1.0.2.jar」に対するFelixHostのコンパイル依存関係を削除し、OBRインターフェースのコピーを1つだけロードすることができます。

于 2009-08-10T18:44:35.143 に答える