3

複数のバンドルを持つ osgi アプリケーション (felix 内) があります。1 つのバンドルに共通のプロパティ ファイルがいくつかあり、残りのバンドルはそれらを使用するだけで済みます。

maven と spring osgi を使用します。プロパティ ファイルは次のようなリソースにあります。

<path to bundle>/src/main/resources/
    common.properties
    engine.properties
    ...

Maven は通常、バンドル jar 内にそれらをビルドするため、アプリケーション クラスパスにあるはずですが、Spring はそれらにアクセスできず、これは失敗します。

<context:property-placeholder location="classpath:common.properties" />

(classpath*: およびその他の組み合わせを試しました)

これこれを読んだ

それは本当に osgi のイデオロギーに関するグローバルな問題であり、それを機能させるための標準的な方法はありませんか? そのようなハックと回避策のみですか<osgix:cmProperties...>

これは、デプロイが難しくなり、エラーが発生しやすくなるためですmvn deploy。通常のアプリケーションのように、プロパティ ファイルを jar 内にデプロイすることはできません。リリースごとに手動でプロダクション ボックスにコピーする必要があります。

4

4 に答える 4

5

OSGi では、ユニバーサル アプリケーション クラスパスはありません。プロパティはそれらを含むバンドルのクラスパスにありますが、それらを使用するバンドルのクラスパスにあるとは限りません。

少し見にくいですが、一般に、プロパティ フォルダーを含む「パッケージ」をエクスポートすると、それらにアクセスできるようになります。この場合、'.' のように見えますが、これは非常に醜いですが、'properties' ディレクトリ (たとえば) に配置してから、プロパティ パッケージをエクスポートすることができます。これらのプロパティを使用するバンドルは、プロパティ パッケージもインポートする必要があります。

または、含まれているバンドルのクラスローダーを使用してリソースを検索することもできますが、そのための Spring 構成がどのようになるかについてコメントすることはできません。

于 2012-05-18T05:41:43.187 に答える
2

すべてのバンドルに共通するプロパティを読み取る最良の方法は、SpringDMが提供するCompendiumサービスを使用することです。

于 2012-12-13T09:49:19.940 に答える
0

プロパティファイルを「共通」にする必要があるケースはめったにないことがわかりました。プロパティ ファイルの内容を分割して、実際に必要なバンドルに配置することはできませんか。プロパティはコンテキストごとにグループ化し、そのコンテキストを必要とするバンドルに配置する必要があります。

理論的には、アンチパターンと見なされる定数クラスまたはインターフェイスを使用しないことに似ています。

于 2012-05-18T17:47:44.687 に答える
0

ここで私が最終的に使用した別の代替手段は、プロパティファイルをファイルシステムに配置し、それらをSpring(または他のコード)からfile:path/to/common.props.

于 2012-05-21T09:35:09.447 に答える