2012-04-11 11 views
3

私はEquinox OSGiの実装を使用しています。バンドルを取得してその場所(getLocation()メソッド)を要求すると、返されるStringには「initial @ reference」という接頭辞が付きます。 OSGi 4.3仕様では、この接頭辞について言及していません。この接頭辞と他の可能な接頭辞が指定されている別の文書がありますか?bundle.getLocation()の接頭辞は可能です

答えて

2

これらはEquinox固有のURL接頭辞です(ただし、参照:接頭辞は他のOSGiフレームワークでもサポートされています)。これらはOSGi仕様の一部ではありません。 Eclipseのランタイム・オプションのから:

osgi.bundles システムが稼働していると自動的にインストールされ、必要に応じて開始されたバンドルのコンマ区切りリスト。各エントリの形式は次のとおりです

<URL | simple bundle location>[@ [<start-level>] [":start"]] 

開始レベルは、バンドルを実行すべきでOSGiの開始レベルを示します。開始レベル(> 0の整数)を省略すると、フレームワークはバンドルのデフォルトの開始レベルを使用します。 「開始」タグが追加された場合、バンドルはインストール後に開始済みとしてマークされます。単純なバンドルの場所は、フレームワークの親ディレクトリに関連してinterepretedされます。場所が完全修飾パスまたはURLでない場合、使用可能な最高のバージョンを見つけるために検索が行われます。参照:プロトコルは、ファイル:URL(例:reference:file:/path/to/mybundle_1.0.0.jar)で指定されたコンテンツを参照する場合にのみ使用できます。バンドルがディレクトリバンドルの場合、参照を使用しないファイル:URLを使用してサポートされていません(例:file:/path/to/myDirectoryBundle_1.0.0/参照を使用する必要があります:file:/path/to/myDirectoryBundle_1.0.0/ )

hereは、「initial」および「reference」プレフィックスの説明を含むスレッドです。

+0

ありがとうございました –

6

場所はかなり様々です。次のように私は...

InputStream data = ...; // open a stream from wherever 
context.installBundle("crazy location huh?", data); 

をバンドルをインストールした場合は...その後、このバンドルのgetLocation()方法は、「ハァッ狂気の場所を?」が返されます。

Bundle.update()の引数なしバリアントを呼び出そうとした場合、フレームワークはその場所からバンドルを更新するために位置文字列を解釈できないため、私には問題が発生します。しかし、私はいつもBundle.update(InputStream)メソッドを呼び出して、指定したデータからバンドルを直接更新することができます。