Equinox OSGi 実装を使用しています。バンドルを取得してその場所を尋ねると (getLocation() メソッド)、返された文字列には "initial@reference" というプレフィックスが付きます。OSGi 4.3 仕様では、このプレフィックスについて言及していません。このプレフィックスと他の可能なプレフィックスが指定されている別のドキュメントはありますか?
2 に答える
場所はほとんど何でもかまいません。次のようにバンドルをインストールすると...
InputStream data = ...; // open a stream from wherever
context.installBundle("crazy location huh?", data);
...その後、getLocation()
このバンドルのメソッドは「クレイジーな場所ですね?」を返します。
の引数なしのバリアントを呼び出そうとした場合にのみBundle.update()
、フレームワークが場所の文字列を解釈してその場所からバンドルを更新することができないため、これは問題を引き起こします。Bundle.update(InputStream)
しかし、直接指定したデータからバンドルを更新するメソッドをいつでも呼び出すことができました。
これらは Equinox 固有の URL プレフィックスです (ただし、 reference: プレフィックスは他の OSGi フレームワークでもサポートされています)。これらは OSGi 仕様の一部ではありません。Eclipse ランタイム オプションから:
osgi.bundles システムが起動して実行されると、自動的にインストールされ、オプションで開始されるバンドルのコンマ区切りリスト。各エントリの形式は次のとおりです。
<URL | simple bundle location>[@ [<start-level>] [":start"]]
start-level は、バンドルを実行する OSGi 開始レベルを示します。開始レベル (>0 整数) が省略された場合、フレームワークはバンドルのデフォルトの開始レベルを使用します。「開始」タグが追加されている場合、バンドルはインストール後に開始済みとしてマークされます。単純なバンドルの場所は、フレームワークの親ディレクトリを基準として解釈されます。場所が完全修飾パスまたは URL でない場合は、利用可能な最新バージョンを見つけるために検索が行われます。reference: プロトコルは、file: URL で指定されたコンテンツを参照するためにのみ使用できることに注意してください (例: reference:file:/path/to/mybundle_1.0.0.jar)。バンドルがディレクトリ バンドルの場合、file: URL を reference: を使用せずに使用することはサポートされていません (たとえば、file:/path/to/myDirectoryBundle_1.0.0/ は reference:file:/path/to/myDirectoryBundle_1.0 を使用する必要があります。
hereは、「初期」および「参照」プレフィックスの説明を含むスレッドです。