コマンドラインによるコンフィギュレーション

Wrapperでは、いかなるコンフィギュレーションプロパティでもコマンドラインから設定できるようになっています。 そのため、コンフィギュレーション値がランタイムの環境下だけで設定される場合に便利に使うことができます。 一例として、Wrapperに同梱して提供しているシェルスクリプト(sh)を見てみましょう。

Wrapperの起動時に、コンフィギュレーションファイルを読み込み、そのプロパティ(設定値)を読みとることにより、 コマンドライン上で、コンフィギュレーションプロパティを設定することができます。 各プロパティは、「プロパティ名=プロパティ値」の構成で成り立っています。 「wrapper.conf」ファイルに見られるように、 このシンタックス(構造文法ルール)は、常に同じです。

使用例:

この例では、Wrapperを使って、デバッグのログ化を有効にして、 あるJavaアプリケーションを起動させています。

Windows NT/2000:
wrapper.exe -c ..\conf\wrapper.conf wrapper.java.command=java wrapper.debug=TRUE
Linux / Solaris:
./wrapper ../conf/wrapper.conf wrapper.java.command=java wrapper.debug=TRUE

優先度:

コマンドラインで設定するプロパティは、他のデフォルトのプロパティよりも優先され、 コンフィギュレーションファイル内で設定されているデフォルトのプロパティ値や、 コンフィギュレーションファイル参照を含めたインクルードファイル(カスケード形式)を上書きします。

Wrapper コマンドを使うとき、どんなコマンドでも、コマンドラインからプロパティを指定することができます。 Windowsシステム上でアプリケーションを1つのサービスとしてインストールするために使われる、 [-i]コマンドなどを含みます。

Wrapperが動作している状態で、 [-c]コマンドを使ってコンソールアプリケーションとしてJVMを動かしている時、 そこで指定されたプロパティがある場合は、 デフォルトの「wrapper.conf」の値を上書きして、 そして、JVMを起動するときに利用されます。

同様に、Wrapperを1つのサービスとしてインストールするために使われる [-i]コマンドは、指定されたプロパティを記憶しておき、 あとで実際にサービスとしてスタートしたときに、その記憶しておいたプロパティを使います。 同様に、サービスがインストールされている間は、 「wrapper.conf」の値を上書きして、 コマンドラインで指定されたプロパティが使われます。

そのほか全てのコマンドでも、コンフィギュレーションファイルの値を上書きして、 コマンドラインプロパティを使います。 これで、そのサービスを参照する手段やログ化をもたらし、JVMが動作している上では効果はありません。 例えば、[-t]コマンドを使って開始している間、 サービスへプロパティ値を渡すことは不可能です。

スペース(空白)の取り扱い:

注意

コマンドラインで指定するプロパティに、引用符で囲まずにスペース(空白)を含めることはできません。 もしプロパティ値にスペース(空白)を含める必要がある場合には、 単純に、そのプロパティセット(プロパティ名とその値)の全体を、開始と終わりの引用符(“ ”)で囲ってください:

パス値にスペース(空白)が含まれる例:
wrapper.exe -c ..\conf\wrapper.conf "wrapper.java.command=C:\My App\jre\bin\java.exe"

Windowsでの引用問題:

注意

Windows上でパスの値を引用するとき、 Windowsが引用符で囲まれた値を解体して解釈してしまうという問題がありますので覚えておいてください。 通常は引用符で囲まれた値の中で、 トレイリングバックスラッシュを除き、 全てのバックスラッシュ('\')を通常どおりに取り扱います。下記の例を見てみると、 トレイリングバックスラッシュが引用符をエスケープ(無視)しており、結果として、 意図としない引数が、Wrapperへ引き渡されています。

問題の例:
wrapper.exe -c ..\conf\wrapper.conf "wrapper.working.dir=C:\" wrapper.debug=TRUE"

本来この意図とするオペレーションは、 引数( [-c]、 [..\conf\wrapper.conf]、 [wrapper.working.dir=C:\]、 [wrapper.debug=TRUE] )を用いてWrapperを呼び出すことです。 しかし、実際に起きていることは、2つ目の引用符がエスケープ(無視)として解釈されてしまい、 結果として、それに続く3つ目と4つ目の引数が結合されてしまい、 [wrapper.working.dir=C:" wrapper.debug=TRUE]となっています。

まず簡単な解決策としては、 「 トレイリングバックスラッシュを使わない」ということです。 しかしながら、今回の例「C:\」では、それは不可能です。 従って、他の解決策としては、バックスラッシュの後に、 トレイリングピリオドを追加する、ということです。 つまり、「C:\.」の明記は、 「C:\」ディレクトリーと同じ意味になり、 Windowsによって正しく解釈されます。

改善策の例:
wrapper.exe -c ..\conf\wrapper.conf "wrapper.working.dir=C:\." wrapper.debug=TRUE"

参照: Wrapper でアプリケーションを起動する