Windows サービスとして GlassFish? を実行するには?

GlassFish には、Windows サービス・コントローラ と連携する appservService.exe という Windows 用実行ファイルが付属しています。このツールは Java サービス・ラッパー とよく似た機能を備えています。 GlassFish 用の Windowsサービスを作成すると、そのサービスは 起動 / 停止時に実行すべきasadminコマンドを引数に指定して appservService.exe を開始します。

GlassFish には appservService.exe 用の Windows サービスを簡単に作成するためのツールは付属しませんが、 Sun Java Application Server 9.x のインストーラには " Windowsサービスの作成 "というチェックボックスが用意されています。 GlassFish 用の Windows サービスを作成する際には、コマンドプロンプト上から実行できるコマンドに関する解説 もご覧ください。
なお、 GlassFish のインストール先のパスが C:\Program Files\Sun\GlassfishV2\ のように空白を含んでいると、手軽どころか、エスケープ文字をエスケープする正しい方法を見つけるのに却って手間がかかります。

GlassfishSvc.jar

Ryan de Laplante が、 Windows サービスを手軽に作成するためのツールを作成してくれました。 GlassfishSvc.jar をダウンロードし (ソース) 、GlassFish をインストールしたディレクトリ ( C:\Program Files\Sun\GlassfishV2\ など)にコピーし、コマンドラインから以下のコマンドを実行してください:

C:\Program Files\Sun\GlassfishV2>java -jar GlassfishSvc.jar -i 

glassfishsvc v1.0 (Aug 19 2007) 

Service name : GlassfishAppServer 
Glassfish installation path : C:\Program Files\Sun\GlassfishV2
Glassfish domain : domain1 
Glassfish admin username : admin 

Installing service... Done.

引数の -i を指定すると、デフォルトのオプションでサービスがインストールされます。コマンドライン引数の一覧は以下のとおりです。

glassfishsvc v1.0 (Aug 19 2007)

DESCRIPTION:
    Installs and uninstalls a Windows service for Glassfish

USAGE:
    java -jar glassfishsvc.jar [-i | -u] [OPTIONS]

    -i        Installs a Windows service for Glassfish.
    -u        Uninstalls a Windows service for Glassfish.
    -n name   Name for the Windows service. Use double quotes around names
              that contain spaces.  Defaults to GlassfishAppServer.
    -d path   Directory where Glassfish is installed. Use double
              quotes around paths with spaces, and escape back slashes.
              Defaults to current directory.
    -m domain Name of the Glassfish domain to start and stop. Defaults to
              domain1.
    -a user   Glassfish admin user name.  Defaults to admin.
    -p pwd    Glassfish admin password.  A password.txt file will be created
              in the Glassfish install directory containing the password in
              plain text, and the Windows service will be configured to read
              from it. This is usually not necessary. If no password is passed
              in, the password.txt file will not be created.

EXAMPLES:
    java -jar glassfishsvc.jar -i
    java -jar glassfishsvc.jar -i -p adminadmin
    java -jar glassfishsvc.jar -i -n MyServiceName -d "C:\\Program Files\\Sun\\Glassfish" -m myDomain -a admin5 -p secretpwd
    java -jar glassfishsvc.jar -u
    java -jar glassfishsvc.jar -u -n MyServiceName

AUTHOR:
    Ryan de Laplante <ryan at ijws dot com>

クラスタ・プロファイル

GlassFish クラスタ・プロファイル をインストールした場合、 GlassFish はサービスを起動するたびに admin のパスワードを聞いてきます。これを避けるには、サービスのインストール時に -p オプションを指定するようにしてください。こうすると、パスワードがプレーン・テキスト形式で書きまれた password.txt というファイルが GlassFish のルートディレクトリに作成されます。また Windows サービスはこのファイルを参照して自動で起動されるよう構成されます。なお、このようにしてファイルを作成した場合、権限のないユーザにファイルを読み書きされないよう NTFS のセキュリティを正しく設定してください。

Windows ユーザのログアウト

デフォルトの設定では、JVM は OS のシャットダウン時、またはユーザのログアウト時に Windows から 通知を受け取り、自分自身を適切にシャットダウンするようになっています。つまり、ユーザが Windows からログアウトすると GlassFish がシャットダウンされるようになっているのです。
これではWindowsサービスを作成する意味がありませんので、 JVM のオプションに -Xrs を指定してこの設定をオフにする必要があります。

<GF_HOME>\domains\domain1\config\domain.xml ファイルを開き、f <jvm-options>some JVM option</jvm-options> が多数列挙されている行を探して、以下の一行をそこに追加してください。

<jvm-options>-Xrs</jvm-options>

追加できたら、 domain.xml ファイルを保存して閉じておきます。 GlassFish のサービスが既に起動されている場合は、変更を反映するために再起動してください。

注意: Windows 2003 Server 上では、 domain.xml に -Xrs jvm-option を追加しても問題が解決されないという報告があります。この場合、 jvm オプションを <GF_HOME>\lib\processLauncher.xml することで解決可能とのことです。

<process name="as9-server">
   ...
   <sysproperty key="-Xrs"/>
   ...

関連情報

Ryan de Laplante のブログ・エントリ(英語)
Sun Java System Application Server Platform Edition 9 管理ガイド - 21章(英語)
The Aquarium - SJS AS (および GlassFish) における Windows サービスのサポート(英語)
java.net - processLauncher.xml に関する投稿(英語)


日本語翻訳: Kana

英文 (翻訳したバージョン: 8)