方法4 - WrapperJarApp インテグレーション(Windows)

概要

方法4は、アプリケーションの起動に[WrapperJarApp]ヘルパークラスを使う手法です。 これもまたシンプルな Wrapper 統合方法で、アプリケーションが実行可能な「jar」ファイルとして作動するように設定されている場合にご利用いただけます。

この方法を利用するにおいて理解しておくべき点がいくつかあります。 Wrapper が JVM をシャットダウンする際に、直接アプリケーションへシャットダウンをリクエストするわけではなく、 JVM 内部から[System.exit()]メソッドを呼び出して JVM のシャットダウンシーケンスに入ります。 もし、アプリケーションが シャットダウンフック を登録されている場合、通常どおりに実行処理され、アプリケーションがキレイにシャットダウンできる時間を確保します。 その一方、もしシャットダウンフックを登録されていない場合、 コンソール(コマンドウィンドウ)から[CTRL]+[C]のキー操作によるアプリケーション任意停止と同じように動作し、 アプリケーションを直ちに終了させます。シャットダウンフックの有無に関わらず、 いずれのケースでも、Wrapper 導入前の環境状態と同じように動作します。

この方法4([WrapperJarApp]ヘルパークラス)でインテグレーションすると、 [WrapperJarApp]ヘルパークラスがアプリケーションのメインクラスを置き換えます。 これにより、[WrapperJarApp]クラスが、 即時に WrapperManager を初期化する機会を持つことができ、 JVM を Wrapper に登録します。 [WrapperJarApp]クラスは、アプリケーションのライフサイクル(稼働状況)はもちろんのこと、 Wrapper との全ての対話を管理します。 WrapperManager 経由で Wrapper がスタートメッセージを JVM に送ると、 「jar」のマニフェストが詳しく調査され、設定されたメインクラスが呼び出されます。 [WrapperJarApp]が新しく「ClassLoader」を作成し、 そのマニフェストファイルで参照されているその他の「jar」実行ファイルも同様に、 実行可能な「jar」ファイルからクラスをロード(読み込み)することができるようになります。

実行可能な「jar」ファイルの相対参照/絶対参照を引き渡すことで、どのようにアプリケーションを起動するのか、 [WrapperJarApp]ヘルパークラスへ指示が渡され、[WrapperJarApp]のメインメソッドへ その他の追加的なアプリケーションパラメータが続き、進んでいきます。

操作方法の詳細

このセクションでは、さらに詳細に踏み込み、Wrapper 内でアプリケーションを動かすためにはどうするのか、 JBoss 設定方法を例にあげて説明します。 「jar」実行ファイルとしてデプロイされている、 ほとんどのアプリケーションでは、同様の手順でインテグレーションすることができます。

JBoss をインストールする

ここでの解説は、JBoss のクリーンインストールから進める手順で説明します。 ここでは「JBoss EAP 7.0.0 バージョン」を利用していますが、バージョンの違いなどにより手順が部分的に異なる場合があります。 JBoss をダウンロードし、ファイルを解凍してください。このチュートリアルでは「D:\JBoss」を利用します。 次に、下記のフォルダーを作成してください。

D:\JBoss\lib
D:\JBoss\conf
D:\JBoss\logs

Wrapper ファイルをインストールする

Wrapper をダウンロードした後、ファイルを解凍してください。こちらでは{WRAPPER_HOME}として参照します。 Wrapper を使えるようにするために4つのディレクトリーを操作する必要があります。

「bin」ディレクトリー

まず始めに、以下のファイルを JBoss の「bin」ディレクトリーにコピーしてください:

{WRAPPER_HOME}\bin\wrapper.exe
{WRAPPER_HOME}\src\bin\App.bat.in
{WRAPPER_HOME}\src\bin\InstallApp-NT.bat.in
{WRAPPER_HOME}\src\bin\UninstallApp-NT.bat.in

以下のように、アプリケーション名を反映して、3つのバッチファイル名を変更します。 拡張子「.in」を外して、 ファイルの拡張子が「.bat」で終わるように変更してください。

なお、ご利用のコンピューターの設定状況によっては、拡張子が見えない場合がありますので、 拡張子が表示されるよう事前に設定を変更する必要があるかもしれません。

以下のようになるはずです:

{JBOSS_HOME}\bin\myJBoss.bat
{JBOSS_HOME}\bin\InstallJBoss.bat
{JBOSS_HOME}\bin\UninstallJBoss.bat

wrapper.exe」ファイルは、実際の Wrapper 実行ファイルです。 3つのバッチファイルは、コンソールで JBoss を動かすために使われ、 JBoss を Windows サービスとしてインストールやアンインストールしたりすることができます。

これらのバッチファイルは、何も設定変更を必要としませんが、コンフィギュレーションファイル 「wrapper.conf」が 一つ上の階層 ../conf/wrapper.conf にある 「conf」ディレクトリーにあるという前提で進めていきます。 もし、その「wrapper.conf」ファイルを他の場所に設置したい場合には、 この3つのバッチファイルの設定を適切に変更する必要があります。

「lib」ディレクトリー

以下の2つのファイルを JBoss の「lib」ディレクトリーにコピーしてください:

{WRAPPER_HOME}\lib\wrapper.dll
{WRAPPER_HOME}\lib\wrapper.jar

wrapper.dll」ファイルは、 ネイティブライブラリーファイルであり、 JVM 内で動作する Wrapper の一部として必要なものです。 「wrapper.jar」ファイルには、全ての Wrapper クラスが含まれています。

「conf」ディレクトリー

Wrapper では各アプリケーション用の設定ファイル(コンフィギュレーションファイル 「wrapper.conf」)が必要です。 その設定ファイルの標準配置ディレクトリーは、 アプリケーションホームディレクトリー下の「conf」ディレクトリーです。 以下の設定ファイルテンプレート「wrapper.conf.in」を JBoss の「conf」ディレクトリーにコピーしてください:

{WRAPPER_HOME}\src\conf\wrapper.conf.in

次のようにファイル名を変更します。 拡張子「.in」を外して、 ファイル名を「wrapper.conf」へ変更します。

以下のようになるはずです:

{JBOSS_HOME}\conf\wrapper.conf

もしコンフィギュレーションファイル「wrapper.conf」 の配置場所を変更したい場合には、自由に変更して構いませんが、新しい場所が反映されるように、 上記の「bin」ディレクトリーの中に コピーしたバッチファイルを変更する必要があります。

「logs」ディレクトリー

デフォルトのコンフィギュレーションファイル 「wrapper.conf」は、 JBoss の「logs」ディレクトリーの中に 「wrapper.log」ファイルを配置します。

{JBOSS_HOME}\logs

もし「wrapper.log」ファイルを他の場所に配置したい場合には、 「wrapper.conf」ファイルを編集して、新しい場所が反映されるように [wrapper.logfile] プロパティを変更する必要があります。

Java コマンドライン

実行可能な「jar」ファイルの Java コマンドラインはとてもシンプルです。 JBoss の場合、「JBoss」ディレクトリーに移動して実行します:

java -jar D:\JBoss\jboss-modules.jar

引数があれば、下記のように引き渡します:(『arg』とは「argument」の略で「引数」の意味です)

java -jar D:\JBoss\jboss-modules.jar arg1 arg2 arg3

コンフィギュレーションファイル「wrapper.conf」の変更

上記のコマンドラインを Wrapper で使うためには、そのコマンドラインのコンポーネントを細分化して、 コンフィギュレーションファイルへ落とし込んでいく必要があります。 「wrapper.conf」 ファイルをエディターで開き、下記のようにプロパティに変更を加えてください。

注意

下記の文中で説明しているプロパティについて、そのリンク先では、それぞれ詳しい説明を提供しています。 じっくり時間をかけて、変更するプロパティの説明を全部、熟読してください。 多くのケースでは、ここでは触れていない事項についても、さらに詳しい使い方の説明があります。

Java 実行ファイル

まず、Java 実行ファイルを解凍して、その配置場所のパスを [wrapper.java.command] プロパティにへ割り当てます。

wrapper.java.command=java

Wrapper Jar

wrapper.jar」ファイルを指定する必要があります。

wrapper.jarfile=D:\JBoss\lib\wrapper.jar

警告

wrapper.jarfile]プロパティは、Wrapper ver. 3.5.55 で導入されました。 それより前の Wrapper バージョンを利用する場合、クラスパスに「wrapper.jar」を追加する必要があります。

wrapper.java.classpath.1=D:\apache-tomcat-9.0.0.M13\lib\wrapper.jar

そして、[wrapper.java.classpath.1]プロパティが重複しないように、次のクラスパス要素のインデックスを調整する必要があります

クラスパス

次にクラスパスです。 [wrapper.java.classpath.<n>] プロパティを使って設定を変更します。 本来 Java では、[-jar]パラメータを使って動作する際に、クラスパスを指定することは認められませんが、 この Wrapper インテグレーションでは少し異なった手法になります。

wrapper.java.classpath.1=D:\JBoss\jboss-modules.jar

メインクラス

Wrapper や [WrapperJarApp]ヘルパークラスを使う際に、 Java は「jar」ファイルを直接的に実行しません。 アプリケーションのメインクラスとして、ヘルパークラスを指定する必要があります。 起動時に Java によって実行されるこのメインクラスは、 [wrapper.java.mainclass] プロパティを使って指定します。

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp

アプリケーションパラメータ

アプリケーションパラメータは、 [wrapper.app.parameter.<n>] プロパティを使って設定します。 ここでのケースでは、JBoss を起動させるコマンドラインは、いくつかのアプリケーションパラメータを必要とします。 [WrapperJarApp]ヘルパークラスに、どの「jar」ファイルを 実行させるのか伝える必要があります。 下記のように設定します:

wrapper.app.parameter.1=D:\JBoss\jboss-modules.jar
wrapper.app.parameter.2=-mp
wrapper.app.parameter.3=D:\JBoss\modules
wrapper.app.parameter.4=-jaxpmodule
wrapper.app.parameter.5=javax.xml.jaxp-provider
wrapper.app.parameter.6=org.jboss.as.standalone
wrapper.app.parameter.7=-Djboss.home.dir=D:\JBoss
wrapper.app.parameter.8=-Djboss.server.base.dir=D:\JBoss\standalone

Java 追加パラメータ

Java 追加パラメータを設定するには、 [wrapper.java.additional.<n>]プロパティを 使います。 JBoss を正しく起動するために、いくつかのパラメータを設定する必要があります。

wrapper.java.additional.1=-D"[Standalone]"
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:+UseCompressedOops
wrapper.java.additional.4=-Xms1303M
wrapper.java.additional.5=-Xmx1303M
wrapper.java.additional.6=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.7=-Djboss.modules.system.pkgs=org.jboss.byteman
wrapper.java.additional.8=-Djava.awt.headless=true
wrapper.java.additional.9=-Dorg.jboss.boot.log.file=D:\JBoss\standalone\log\server.log
wrapper.java.additional.10=-Dlogging.configuration=file:D:\JBoss\standalone\configuration\logging.properties
wrapper.java.additional.11=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=false
wrapper.java.additional.12=-Djava.util.logging.manager=org.jboss.logmanager.LogManager
wrapper.java.additional.13=-Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl

ライブラリーパス

Wrapper を使うために、設定しなければならないプロパティがもう一つあります。 システムとの対話をコントロールするため、Wrapper は、ネイティブライブラリーを利用します。 このライブラリーファイルwrapper.dll」は、 JVM へ供給されるライブラリーパスで指定しておく必要があります。

JBoss では、ネイティブライブラリーを一切持ちません。 仮にあったとしても、それがどこに位置するのかライブラリーの配置場所(ディレクトリー)を指定しておく必要があるでしょう。 ライブラリーパスは、 [wrapper.java.library.path.<n>] プロパティを使って設定します。

wrapper.java.library.path.1=D:\JBoss\lib

全部をまとめる

全部をまとめると、下記のようになります:

wrapper.java.command=java

wrapper.jarfile=D:\JBoss\lib\wrapper.jar

wrapper.java.classpath.1=D:\JBoss\jboss-modules.jar

wrapper.java.library.path.1=D:\JBoss\lib

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp

wrapper.java.additional.1=-D"[Standalone]"
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:+UseCompressedOops
wrapper.java.additional.4=-Xms1303M
wrapper.java.additional.5=-Xmx1303M
wrapper.java.additional.6=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.7=-Djboss.modules.system.pkgs=org.jboss.byteman
wrapper.java.additional.8=-Djava.awt.headless=true
wrapper.java.additional.9=-Dorg.jboss.boot.log.file=D:\JBoss\standalone\log\server.log
wrapper.java.additional.10=-Dlogging.configuration=file:D:\JBoss\standalone\configuration\logging.properties
wrapper.java.additional.11=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=false
wrapper.java.additional.12=-Djava.util.logging.manager=org.jboss.logmanager.LogManager
wrapper.java.additional.13=-Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl

wrapper.app.parameter.1=D:\JBoss\jboss-modules.jar
wrapper.app.parameter.2=-mp
wrapper.app.parameter.3=D:\JBoss\modules
wrapper.app.parameter.4=-jaxpmodule
wrapper.app.parameter.5=javax.xml.jaxp-provider
wrapper.app.parameter.6=org.jboss.as.standalone
wrapper.app.parameter.7=-Djboss.home.dir=D:\JBoss
wrapper.app.parameter.8=-Djboss.server.base.dir=D:\JBoss\standalone

これらの設定をしたテストマシンが正常に動作していることからも分かるように、 ディレクトリー構造やプラットフォームに非常に高く依存しています。 Wrapper が作業ディレクトリーを常に 「wrapper.exe」ファイルが 存在する場所に設定するという仕組みの利点を生かし、 また、一つの環境変数を利用することで、上記のプロパティを変更することができますので、 完全にプラットフォームやマシンが依存しない独立型の状態となりえるのです:

set.JBOSS_HOME=D:\JBoss
wrapper.java.command=java

wrapper.jarfile=..\lib\wrapper.jar

wrapper.java.classpath.1=..\jboss-modules.jar

wrapper.java.library.path.1=..\lib

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperJarApp

wrapper.java.additional.1=-D"[Standalone]"
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:+UseCompressedOops
wrapper.java.additional.4=-Xms1303M
wrapper.java.additional.5=-Xmx1303M
wrapper.java.additional.6=-Djava.net.preferIPv4Stack=true
wrapper.java.additional.7=-Djboss.modules.system.pkgs=org.jboss.byteman
wrapper.java.additional.8=-Djava.awt.headless=true
wrapper.java.additional.9=-Dorg.jboss.boot.log.file=%JBOSS_HOME%\standalone\log\server.log
wrapper.java.additional.10=-Dlogging.configuration=file:%JBOSS_HOME%\standalone\configuration\logging.properties
wrapper.java.additional.11=-Dorg.tanukisoftware.wrapper.WrapperManager.mbean=false
wrapper.java.additional.12=-Djava.util.logging.manager=org.jboss.logmanager.LogManager
wrapper.java.additional.13=-Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl

wrapper.app.parameter.1=..\jboss-modules.jar
wrapper.app.parameter.2=-mp
wrapper.app.parameter.3=%JBOSS_HOME%\modules
wrapper.app.parameter.4=-jaxpmodule
wrapper.app.parameter.5=javax.xml.jaxp-provider
wrapper.app.parameter.6=org.jboss.as.standalone
wrapper.app.parameter.7=-Djboss.home.dir=%JBOSS_HOME%
wrapper.app.parameter.8=-Djboss.server.base.dir=%JBOSS_HOME%\standalone

Windows サービスのプロパティ

(参照:サポートされている Windows バージョン

最後のステップでは、 [Windows サービスのプロパティ]の設定です。 ここでは変更すべきプロパティだけを取り上げます。 他にもいくつか有効なことはありますので、詳しくはそれぞれの使い方の説明を参照してください。 この変数の推奨された値は次のとおりです。

wrapper.ntservice.name=jboss
wrapper.ntservice.displayname=JBoss EAP
wrapper.ntservice.description=JBoss EAP

情報

これらのプロパティは、Wrapper のインストールフォルダの「conf」フォルダにある 「wrapper.conf」ファイルで設定されています。

試しに動かしてみる

ここまで来れば、単純に「bin\myJBoss.bat」バッチファイルを実行することで JBoss を動かすことができます。 Wrapper がカレントディレクトリーを設定してくれるお陰で、 「bin」ディレクトリー内部から、このバッチファイルを実行する必要はありません。 アプリケーションをサービスの一つとして動かしてみる前に、 コンソールアプリケーションとして動かしてみて、設定が有効になっているか確認してください。

JBoss を起動すると最初に、カレントユーザーホームディレクトリーの中に、コンフィギュレーションファイルが作成されます。 これは、コンソールウィンドウで動作している時と、サービスとして動作している時と、それぞれ作成場所が異なることが多いので注意してください。

おめでとう!あなたのアプリケーションが起動して動き始めるはずです。

もし何か問題があった場合、トラブルシューティングをご覧いただき、 問題点を追究するのに役立つことでしょう。