方法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 EAP のクリーンインストールから進める手順で説明します。 ここでは「JBoss EAP 7.0.0 バージョン」を利用していますが、バージョンの違いなどにより手順が部分的に異なる場合があります。 JBoss をダウンロードし、ファイルを解凍してください。このチュートリアルでは「/usr/lib/jboss」フォルダーを利用します。 次に、下記のフォルダーを作成してください。
mkdir /usr/lib/jboss/lib mkdir /usr/lib/jboss/conf mkdir /usr/lib/jboss/logs
Wrapper をダウンロードした後、ファイルを解凍してください。こちらでは{WRAPPER_HOME}として参照します。 Wrapper を使えるようにするために4つのディレクトリーを操作する必要があります。
動作しているプラットフォーム用にビルドされた適切なバージョンの Wrapper と「libwrapper.so」を 使用していることを確認してください。 例えば、Wrapper の Linux 版は、Solaris 上では動作しません。
Wrapper には、シェルスクリプト[(sh)]が同封され、 Java Service Wrapper によって制御されているあらゆる Java アプリケーションを確実に起動および停止するために使用できます。
まず、下記ファイルを JBoss の「bin」ディレクトリーにコピーしてください(Wrapper の旧バージョンのファイル名:「sh.script.in」)。
{WRAPPER_HOME}/bin/wrapper {WRAPPER_HOME}/src/bin/App.sh.in
アプリケーション名を反映して、スクリプトファイル名を変更します。
{JBOSS_HOME}/bin/myJBoss
次にファイルをエディターで開いてください。 JBoss を起動する際のスクリプトで表示が反映されるように、ロング名(長い形式)やショート名(短い形式)を設定が必要です。 スクリプトのヘッダーの直後に、2つの変数 「APP_NAME」と「APP_LONG_NAME」が見えるでしょう。 この変数の推奨された値は次のとおりです。
APP_NAME="jboss" APP_LONG_NAME="JBoss EAP"
スクリプトは何も追加変更を必要としませんが、コンフィギュレーションファイル 「wrapper.conf」が 一つ上の階層 ../conf/wrapper.conf にある 「conf」ディレクトリーにあるという前提で進めていきます。 もし、その「wrapper.conf」ファイルを他の場所に設置したい場合には、 「WRAPPER_CONF」の変数を適切に設定変更する必要があります。
重要!続行する前に、「bin」ディレクトリー内へコピーされたすべてのファイルに、 実行可能フラグが付いていることを確認してください。
以下の2つのファイルを JBoss の「lib」ディレクトリーにコピーしてください:
{WRAPPER_HOME}/lib/libwrapper.so {WRAPPER_HOME}/lib/wrapper.jar
「libwrapper.so」ファイルは、 ネイティブライブラリーファイルであり、 JVM 内で動作する Wrapper の部分に必要なものです。 「wrapper.jar」ファイルには、全ての Wrapper クラスが含まれています。
プラットフォームによっては、「ネイティブライブラリ」の命名規則が若干異なることに注意してください。 可能な名前は、「libwrapper.a」、「libwrapper.sl」、 「libwrapper.so」、と「libwrapper.jnilib」を含みます。 いずれにせよ、拡張子を変更せずにファイルをコピーする必要があります。
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」ディレクトリーの中に コピーしたスクリプトを変更する必要があります。
デフォルトのコンフィギュレーションファイル 「wrapper.conf」は、 JBoss の「logs」ディレクトリーの中に 「wrapper.log」ファイルを配置します。
{JBOSS_HOME}/logs
もし「wrapper.log」ファイルを他の場所に配置したい場合には、 「wrapper.conf」ファイルを編集して、新しい場所が反映されるように [wrapper.logfile] プロパティを変更する必要があります。
実行可能な「jar」ファイルの Java コマンドラインはとてもシンプルです。 JBoss の場合、「JBoss」ディレクトリーに移動して実行します:
java -jar /usr/lib/jboss/jboss-modules.jar
引数があれば、下記のように引き渡します:(『arg』とは「argument」の略で「引数」の意味です)
java -jar /usr/lib/jboss/jboss-modules.jar arg1 arg2 arg3
もし、上記のコマンドラインを Wrapper で使うためには、そのコマンドラインのコンポーネントを細分化して、 コンフィギュレーションファイルへ落とし込んでいく必要があります。 「wrapper.conf」 ファイルをエディターで開き、下記のようにプロパティに変更を加えてください。
下記の文中で説明しているプロパティについて、そのリンク先では、それぞれ詳しい説明を提供しています。 じっくり時間をかけて、変更するプロパティの説明を全部、熟読してください。 多くのケースでは、ここでは触れていない事項についても、さらに詳しい使い方の説明があります。
まず、Java 実行ファイルを解凍して、その配置場所のパスを [wrapper.java.command] プロパティにへ割り当てます。
wrapper.java.command=java
「wrapper.jar」ファイルを指定する必要があります。
wrapper.jarfile=/usr/lib/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=/usr/lib/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=/usr/lib/jboss/jboss-modules.jar wrapper.app.parameter.2=-mp wrapper.app.parameter.3=/usr/lib/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=/usr/lib/jboss wrapper.app.parameter.8=-Djboss.server.base.dir=/usr/lib/jboss/standalone
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=/usr/lib/jboss/standalone/log/server.log wrapper.java.additional.10=-Dlogging.configuration=file:/usr/lib/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 は、ネイティブライブラリーを利用します。 このライブラリーファイル「libwrapper.so」は、 JVM へ供給されるライブラリーパスで指定しておく必要があります。
JBoss では、ネイティブライブラリーを一切持ちません。 仮にあったとしても、それがどこに位置するのかライブラリーの配置場所(ディレクトリー)を指定しておく必要があるでしょう。 ライブラリーパスは、 [wrapper.java.library.path.<n>] プロパティを使って設定します。
wrapper.java.library.path.1=/usr/lib/jboss/lib
全部をまとめると、下記のようになります:
wrapper.java.command=java wrapper.jarfile=/usr/lib/jboss/lib/wrapper.jar wrapper.java.classpath.1=/usr/lib/jboss/jboss-modules.jar wrapper.java.library.path.1=/usr/lib/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=/usr/lib/jboss/standalone/log/server.log wrapper.java.additional.10=-Dlogging.configuration=file:/usr/lib/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=/usr/lib/jboss/jboss-modules.jar wrapper.app.parameter.2=-mp wrapper.app.parameter.3=/usr/lib/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=/usr/lib/jboss wrapper.app.parameter.8=-Djboss.server.base.dir=/usr/lib/jboss/standalone
これらの設定をしたテストマシンが正常に動作していることからも分かるように、 ディレクトリー構造やプラットフォームに非常に高く依存しています。 Wrapper が作業ディレクトリーを常に 「wrapper.exe」ファイルが 存在する場所に設定するという仕組みの利点を生かし、 また、一つの環境変数を利用することで、上記のプロパティを変更することができますので、 完全にプラットフォームやマシンが依存しない独立型の状態となりえるのです。
set.JBOSS_HOME=/usr/lib/jboss wrapper.java.command=%JAVA_HOME%/bin/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
ここまで来れば、単純に「bin/myJBoss console」スクリプトを実行することで JBoss を動かすことができます。 Wrapper がカレントディレクトリーを設定してくれるお陰で、 「bin」ディレクトリー内部から、このスクリプトを実行する必要はありません。
ご覧のとおり、コマンドを省略すると、Wrapper に同梱して提供しているスクリプトは、極めて標準的なデーモンスクリプトです。 [console]、 [start]、 [stop]、 [restart]、 [dump] コマンドを受け付ます。
おめでとう!あなたのアプリケーションが起動して動き始めるはずです。
もし何か問題があった場合、トラブルシューティングをご覧いただき、 問題点を追究するのに役立つことでしょう。