HomeDocumentation > 1. 管理 > 1.2. WindowsサービスとしてのGeronimoの構成


この記事では Apache Geronimo v2.0 を Microsoft Windows のサービスとして構成する方法をご紹介します。この構成をするためには別途 Java Service Wrapper が必要になります。Java Service Wrapper を使えば、サービスに対し ping を発行する、サービスがダウンした際のアクションを取る、というような追加の"コンロトール"を行うことができます。

前提となるソフトウエア

Apache Geronimo v2.0 を Microsoft Windows のサービスとしてセットアップするには、Java Service Wrapper が必須です。この例では下記の URL からダウンロード可能な Java Service Wrapper 3.2.3 を使用します。

http://sourceforge.net/projects/wrapper/

この例は Apache Geronimo v2.0 を Windows XP 上で動かしています。Apache Geronimo のバイナリー・イメージは下記の URL からダウンロードできます。

http://geronimo.apache.org/downloads.html

Apache Geronimo のインストール

Geronimo をバイナリーからインストールするのはとても簡単です。お好みのディレクトリーに zip ファイルを展開するだけです。以降、この記事では展開先のディレクトリーを <geronimo_home> と表記します。

Java Service Wrapper のインストール

Java Service Wrapper のインストールも Apache Geronimo 同様、簡単です。貴方の環境に合ったバージョンをダウンロードしたら、お好きなディレクトリーに解凍します。以降、この記事では展開先のディレクトリーを <jsw_home> と表記します。

今回の例では wrapper 関係のファイルは Geronimo のディレクトリー構造に配置しますので、いくつかのファイルが上書きされます。

wrapper をインストールしたら、下記のテーブルに従ってファイルをコピーしてください。

Source

Destination

<jsw_home>/bin/wrapper.exe

<geronimo_home>/bin/wrapper.exe

<jsw_home>/lib/wrapper.jar

<geronimo_home>/lib/wrapper.jar

<jsw_home>/lib/wrapper.dll

<geronimo_home>/lib/wrapper.dll

更にこの構成の過程では、以下のファイルも作成されます。

ラッパーの構成

Java Service Wrapper はテスト・スクリプトを実行するために <jsw_home>\conf ディレクトリー上に定義済の wrapper.conf という構成ファイルのサンプルを提供しています。このセクションでは利便性を考えて Geronimo 専用のwrapper.conf ファイルを使うことにします。

今回はすべての wrapper ファイルを Geronimo のディレクトリー構造の中に収めようとしていますので、下記の例のように構成ファイルを作成し、<geronimo_home>/var/conf/wrapper.conf ディレクトリーに置いて下さい。

wrapper.conf
# Location of java.exe (in Windows)

wrapper.java.command=<java_home>/bin/java

# These additional parameters are required to start the server since we are not setting any environment variables prior to running the wrapper.

wrapper.java.additional.1=-javaagent:"<geronimo_home>/bin/jpa.jar"
wrapper.java.additional.2=-Djava.ext.dirs="<geronimo_home>/lib/ext;<java_home>/jre/lib/ext"
wrapper.java.additional.3=-Djava.endorsed.dirs="<geronimo_home>/lib/endorsed;<java_home>/jre/lib/endorsed"
wrapper.java.additional.4=-Dorg.apache.geronimo.base.dir="<geronimo_home>"
wrapper.java.additional.5=-Djava.io.tmpdir="<geronimo_home>/var/temp"

# Good old classpath, make sure to include /bin/server.jar and /bin/shutdown.jar

wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../bin/server.jar
wrapper.java.classpath.3=../bin/shutdown.jar
wrapper.java.classpath.4=../lib/geronimo-cli-2.0-SNAPSHOT.jar
wrapper.java.classpath.5=../lib/geronimo-kernel-2.0-SNAPSHOT.jar
wrapper.java.classpath.6=../lib/geronimo-transformer-2.0-SNAPSHOT.jar
wrapper.java.classpath.7=../lib/commons-cli-1.0.jar
wrapper.java.classpath.8=../lib/commons-logging-1.0.4.jar
wrapper.java.classpath.9=../lib/cglib-nodep-2.1_3.jar
wrapper.java.classpath.10=../lib/log4j-1.2.14.jar
wrapper.java.classpath.11=../lib/xpp3-1.1.3.3.jar
wrapper.java.classpath.12=../lib/xstream-1.1.3.jar

# Location of the wrapper.dll (in Windows)

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

# Main class the wrapper will use.

wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

# Geronimo start class and parameters.

wrapper.app.parameter.1=org.apache.geronimo.cli.daemon.DaemonCLI

# Log settings.

wrapper.console.format=PM
wrapper.console.loglevel=INFO
wrapper.logfile=../var/log/wrapper.log
wrapper.logfile.format=LPTM
wrapper.logfile.loglevel=INFO
wrapper.logfile.maxsize=0
wrapper.logfile.maxfiles=0
wrapper.syslog.loglevel=INFO

# Windows service name and description.

wrapper.console.title=Apache Geronimo v2.0 Server
wrapper.ntservice.name=Geronimo
wrapper.ntservice.displayname=Apache Geronimo v2.0 Server
wrapper.ntservice.description=Apache Geronimo v2.0 Server
wrapper.ntservice.dependency.1=
wrapper.ntservice.starttype=AUTO_START
wrapper.ntservice.interactive=false

このサービス・ラッパーは、同じクラスを使うか、サーバーを開始・終了するかどうか、により3種類の異なった統合の方法を提供します。

Geronimo 向けに、System.exit() が呼ばれた時にきれいにシャットダウンさせるために最もシンプルな方法を使います。この統合ではラッパーのメイン・クラスは WrapperSimpleApp を設定し、サーバーを始動するためのメイン・クラスには org.apache.geronimo.cli.daemon.DaemonCLI クラスを指定します。今の時点では、サーバーを始動する時にパラメーターは渡しませんが wrapper.app.parameter で追加のパラメーターを指定することもできます。ラッパーは System.exit() を呼び出すことで停止します。

前述の通り、この例ではすべてのラッパー関係のファイルは Geronimo のディレクトリー構造の中に配置するようにしています。上の wrapper.conf を見ると判るように、殆どのディレクトリーの参照は Geronimo のインストレーション・ディレクトリーへの相対参照としています。貴方は <geronimo_home> と <java_home> を自分の環境に合った適切な値に設定するだけです。

次に、サービスをコマンド行から実行するためのバッチ・ファイルを作成しますが、実際にサービスをインストールする必要はありません。この点は、テストやデバッグをする際にはとても重宝します。<geronimo_home>/bin ディレクトリーに g_service.bat というバッチ・ファイルを作成し、下記の例の内容をコピーしてください。

g_service.bat
@echo off
setlocal

rem Copyright (c) 1999, 2006 Tanuki Software Inc.
rem
rem Java Service Wrapper general startup script
rem

rem
rem Resolve the real path of the wrapper.exe
rem  For non NT systems, the _REALPATH and _WRAPPER_CONF values
rem  can be hard-coded below and the following test removed.
rem
if "%OS%"=="Windows_NT" goto nt
echo This script only works with NT-based versions of Windows.
goto :eof

:nt
rem
rem Find the application home.
rem
rem %~dp0 is location of current script under NT
set _REALPATH=%~dp0

rem Decide on the wrapper binary.
set _WRAPPER_BASE=wrapper
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
if exist "%_WRAPPER_EXE%" goto conf
echo Unable to locate a Wrapper executable using any of the following names:
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
echo %_REALPATH%%_WRAPPER_BASE%.exe
pause
goto :eof

rem
rem Find the wrapper.conf
rem
:conf
set _WRAPPER_CONF="%~f1"
if not %_WRAPPER_CONF%=="" goto startup
set _WRAPPER_CONF="%_REALPATH%..\var\config\wrapper.conf"

rem
rem Start the Wrapper
rem
:startup
"%_WRAPPER_EXE%" -c %_WRAPPER_CONF%
if not errorlevel 1 goto :eof
pause

このファイルはラッパーによりサンプルとして提供されているものですが、wrapper.conf の場所を Geronimo の var/config ディレクトリーを指すように編集した変更されたバージョンです。

これで Geronimo をコマンド・ラインからサービスとして起動できるようになりました。下記のコマンドを実行してみてください。

<geronimo_home>/bin/g_service.bat

下記の例のような画面が表示されるはずです。表示の一部は切り捨てられていることにご注意ください。

{D:\geronimo-tomcat6-jee5-2.0\bin>g_service.bat
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    |
jvm 1    | Booting Geronimo Kernel (in Java 1.5.0_06)...
jvm 1    | Starting Geronimo Application Server v2.0
jvm 1    |
jvm 1    | [*                                ]  0%   0s Loading
jvm 1    | [*-                               ]  0%   0s  Loading org.apache.ge...
jvm 1    | [*>                               ]  6%   0s  Loading org.apache.ge...

...

jvm 1    | [*********************************] 100%  19s Startup complete
jvm 1    |   Listening on Ports:
jvm 1    |     1050 127.0.0.1 CORBA Naming Service
jvm 1    |     1099 0.0.0.0   RMI Naming
jvm 1    |     1527 0.0.0.0   Derby Connector
jvm 1    |     2001 127.0.0.1 OpenEJB ORB Adapter
jvm 1    |     4201 0.0.0.0   org.apache.geronimo.openejb.EjbDaemonGBean
jvm 1    |     4242 0.0.0.0   Remote Login Listener
jvm 1    |     6882 127.0.0.1 OpenEJB ORB Adapter
jvm 1    |     8009 0.0.0.0   Tomcat Connector AJP
jvm 1    |     8080 0.0.0.0   Tomcat Connector HTTP
jvm 1    |     8443 0.0.0.0   Tomcat Connector HTTPS
jvm 1    |     9999 0.0.0.0   JMX Remoting Connector
jvm 1    |    61613 0.0.0.0   ActiveMQ Transport Connector
jvm 1    |    61616 0.0.0.0   ActiveMQ Transport Connector
jvm 1    |
jvm 1    |   Started Application Modules:
jvm 1    |     EAR: org.apache.geronimo.configs/webconsole-tomcat/2.0/car
jvm 1    |     RAR: org.apache.geronimo.configs/activemq-ra/2.0/car
jvm 1    |     RAR: org.apache.geronimo.configs/system-database/2.0/car
jvm 1    |     WAR: org.apache.geronimo.configs/dojo-tomcat/2.0/car
jvm 1    |     WAR: org.apache.geronimo.configs/remote-deploy-tomcat/2.0/car
jvm 1    |     WAR: org.apache.geronimo.configs/welcome-tomcat/2.0/car
jvm 1    |
jvm 1    |   Web Applications:
jvm 1    |     http://localhost:8080/
jvm 1    |     http://localhost:8080/console
jvm 1    |     http://localhost:8080/console-standard
jvm 1    |     http://localhost:8080/dojo
jvm 1    |     http://localhost:8080/remote-deploy
jvm 1    |
jvm 1    | Geronimo Application Server started

おめでとうございます!!! これで Geronimo サーバーを Windows サービスとして動かすことができました。

次のステップでは、他の既存サービスと同様に Windows の始動時に管理されるように、実際にサービスをインストールします。

サービスのインストールと除去

以下の2つのバッチ・ファイルは、Geronimo を Windows サービスとしてインストールおよび除去するためのものです。これらのファイルを <geronimo_home>/bin ディレクトリーに作成し、下記の例の中身をコピーしてください。

Install_Geronimo_NT.bat
@echo off
setlocal

rem Copyright (c) 1999, 2006 Tanuki Software Inc.
rem
rem Java Service Wrapper general NT service install script
rem

if "%OS%"=="Windows_NT" goto nt
echo This script only works with NT-based versions of Windows.
goto :eof

:nt
rem
rem Find the application home.
rem
rem %~dp0 is location of current script under NT
set _REALPATH=%~dp0

rem Decide on the wrapper binary.
set _WRAPPER_BASE=wrapper
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
if exist "%_WRAPPER_EXE%" goto conf
echo Unable to locate a Wrapper executable using any of the following names:
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
echo %_REALPATH%%_WRAPPER_BASE%.exe
pause
goto :eof

rem
rem Find the wrapper.conf
rem
:conf
set _WRAPPER_CONF="%~f1"
if not %_WRAPPER_CONF%=="" goto startup
set _WRAPPER_CONF="%_REALPATH%..\var\config\wrapper.conf"

rem
rem Install the Wrapper as an NT service.
rem
:startup
"%_WRAPPER_EXE%" -i %_WRAPPER_CONF%
if not errorlevel 1 goto :eof
pause

Apache Geronimo を MS Windows サービスとしてインストールするには下記のコマンドを実行してください。

<geronimo_home>/bin/Install_Geronimo_NT.bat

この例のような確認画面が出力されます。

D:\geronimo-tomcat6-jee5-2.0\bin>Install_Geronimo_NT.bat
wrapper  | Apache Geronimo v2.0 Server installed.
Uninstall_Geronimo_NT.bat
@echo off
setlocal

rem Copyright (c) 1999, 2006 Tanuki Software Inc.
rem
rem Java Service Wrapper general NT service uninstall script
rem

if "%OS%"=="Windows_NT" goto nt
echo This script only works with NT-based versions of Windows.
goto :eof

:nt
rem
rem Find the application home.
rem
rem %~dp0 is location of current script under NT
set _REALPATH=%~dp0

rem Decide on the wrapper binary.
set _WRAPPER_BASE=wrapper
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
if exist "%_WRAPPER_EXE%" goto conf
set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
if exist "%_WRAPPER_EXE%" goto conf
echo Unable to locate a Wrapper executable using any of the following names:
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
echo %_REALPATH%%_WRAPPER_BASE%.exe
pause
goto :eof

rem
rem Find the wrapper.conf
rem
:conf
set _WRAPPER_CONF="%~f1"
if not %_WRAPPER_CONF%=="" goto startup
set _WRAPPER_CONF="%_REALPATH%..\var\config\wrapper.conf"

rem
rem Uninstall the Wrapper as an NT service.
rem
:startup
"%_WRAPPER_EXE%" -r %_WRAPPER_CONF%
if not errorlevel 1 goto :eof
pause

Apache Geronimoサービスを除去するには下記のコマンドを実行してください。

<geronimo_home>/bin/Uninstall_Geronimo_NT.bat

この例のような確認画面が出力されます。

D:\geronimo-tomcat6-jee5-2.0\bin>Uninstall_Geronimo_NT.bat
wrapper  | Apache Geronimo v2.0 Server removed.