3

コア Java アプリケーションを OSGI バンドルに変換する作業を行っています。私はたくさん検索しましたが、アプリケーションがバンドルに変換されたときに次のことを達成するための標準または最良の方法を見つけることができませんでした。

  1. OSGI バンドルでコマンドライン引数を読み取る方法 (現在、アプリケーションは、jar ファイルの一部であるクラスの 1 つのメイン関数内で読み取られる引数を渡すスクリプトから呼び出されます)

  2. 非 OSGI デプロイメントでは、-X オプションを使用して JVM の GC パラメータを微調整しました。OSGIに関して同じことを達成するにはどうすればよいですか?. 現在のアプリケーションをバンドルに分割する場合、バンドルごとに異なる GC チューニングが必要です。それはどのように行われますか?

  3. コードの多くの場所で、Sytem.getProperty を使用して、-D オプションで渡されたパラメーターを読み取ります。OSGI でこれを行う方法。

誰かが私がどのように進めるべきかについて私を導くことができれば、それは大きな助けになるでしょう.

ありがとうJK

4

2 に答える 2

2

bnd(tools) はこれを標準でサポートしています。launcher.argumentsランチャーの引数を引数サービス プロパティとしてオブジェクト サービスを登録します。次のコードは、その使用法を示しています。

@Component
public class ShowArgs {
  String[] args;

  @Activate
  void start() { System.out.println(Arrays.toString(args); }

  @Reference
  void setDone( Object done, Map<String,Object> map) {
     this.args = (String[]) map.get("launcher.arguments")
  }

}

bnd(tools) は、OSGi フレームワークを実行可能な jar に変換するのにも最適です。任意の bndrun ファイル (フレームワークに関する情報、実行バンドルなどを含む) を実行可能な JAR に変換できます。bndtools の [実行] ペインまたはbnd package x.bndrunコマンドを使用して実行します。

于 2013-10-22T12:01:07.427 に答える
1

1: コマンド ライン引数を読み取る方法はないと思います。パラメータは、バンドルのコードで読み取ることができるため、「-Dxxx」を使用してシステム プロパティとして指定する必要があります。

2: OSGi は 1 つの JVM で実行されます。JVM は「-X」属性でパラメーター化できます。これらの属性をバンドルごとに指定することはできません。プログラムの異なる部分に対して異なる GC 設定を定義することはできないため、個別のバンドルに対して異なる GC 設定を指定することはできません。このようなことをしたいのであれば、あなたのプログラムは本当に、本当に(そして「本当に」あと10回ほど:))特別なものでなければなりません。ここでの動機は何ですか?

3: システム プロパティも同じ方法で取得できます: System.getProperty(...)

于 2013-10-22T11:06:40.910 に答える