3

私のアプリケーションの OSGi バンドルには、 という名前のプロパティ ファイルが含まれていますontologymapping.properties。次に、このプロパティ ファイルの内容を読み取ります。いくつかのサンプル コードでは、バンドルの start メソッドで次のようなものを見つけました。

public void startObservationAdapter(BundleContext context) {
    String filename = context.getProperty("ontologymapping.properties");
    try {
        File file = new File(filename);
        InputStream in = new FileInputStream(file);
        ontologymapping.load(in);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

ontologymappingProperties インスタンスです。このコードを実行すると、JVM がファイルを見つけられません。その理由は、ファイルが BundleContext に含まれていないためだと思います。どうやってやるの?または、プロパティ ファイルの内容を読み取る別の方法は何ですか? バンドルは宣言型ではなく、宣言型の別の API バンドルです。

4

3 に答える 3

4

いくつかのワイヤーが交差していると思います。context.getProperty(..) は System.getProperty(...) に似ており、実際にはほとんどの System.getProperties() がコンテキストにあります。したがって、あなたの場合、コードがこれを行っているように見える場合は、VM -D コマンド ライン オプションを使用してシステム プロパティにファイル名を入力できます: -Dontologymapping.properties="myfile.properties"。これにより、コードが機能するはずです。

ただし...このタイプのコードの問題は、ファイルシステム上のファイルを読み取る必要があるバンドルがあることです。区別する 3 つのケースがあります。

  1. onologymapping.properties はユーザー固有で小さい
  2. onologymapping.properties はユーザー固有で大きい (つまり、プロパティはコードにとって安価な GUI です)
  3. onologymapping.properties は、プログラマーがデータを保存するための便利な方法です。

ケース 1 では、構成管理者とメタタイプを確認することをお勧めします。これにより、優れた構成 GUI を備えたアプリを作成できます。bnd DS アノテーションを使用すると、Apache Felix Webconsole で非常に小さなコードと非常に優れた GUI を使用することができます。

ケース 2 の場合、上記のコードは有効です。gogo シェルを追加してコマンドを作成し、人々がそれを読み取って更新できるようにすることを考えてみてください。

最後のケース #3 では、プロパティをバンドル内に保存し、Myclass.class.getResourceAsStream("/ontology.properties") で読み取る必要があります。bnd(tools) ではInclude-Resource: ontolology.properties、バンドルに存在し、すぐに読み取ることができます。

于 2013-08-05T14:52:06.040 に答える