The Ja-Jakarta ProjectTomcat Servlet/JSP コンテナ

Tomcat5 サーブレット/JSP コンテナ

Managerアプリケーションの手引き

目次

はじめに
Managerアプリケーションへのアクセス設定
サポートされるManagerコマンド

リモートへの新しいアプリケーションの配備
ローカルパスからの新しいアプリケーションの配備
配備・インストール済のアプリケーションの一覧表示
既存のアプリケーションの再ロード
OS・JVMのプロパティの一覧表示
利用可能なJNDIリソースの一覧表示
利用可能なセキュリティロールの一覧表示
セッション統計
既存のアプリケーションの起動
既存のアプリケーションの停止
既存のアプリケーションの配備解除
AntでのManagerコマンドの実行
JMXプロキシサーブレットの使用
JMXプロキシサーブレットとは
クエリコマンド
設定コマンド

はじめに

コンテナ全体のシャットダウン・再起動をせずに、 新しいWebアプリケーションを配備したり、 既存のWebアプリケーションを配備解除したりする機能は、 多くの本番環境でとても役立ちます。 さらに、Tomcat 5 サーバ設定ファイルで reloadable を定義しなくても、 既存のアプリケーションに再ロードを要求することも可能です。

こうした機能をサポートするために、Tomcat 5 には以下の機能をサポートする Webアプリケーションがあります (デフォルトではコンテキストパス /manager でインストールされています)。

  • 新しいWebアプリケーションを、指定したコンテキストパスで、 WARファイルをアップロードして配備します。
  • サーバのディスクから新しいWebアプリケーションをインストールします。 サーバのディスクのどこにあってもかまいません。
  • 配備済みのWebアプリケーションを、 Webアプリで現在アクティブなセッションとともに一覧表示します。
  • /WEB-INF/classes/WEB-INF/lib の内容変更を反映するために、既存の Webアプリケーションを再ロードします。
  • OS や JVM のプロパティ値を一覧表示します。
  • 利用可能なグローバル JNDI リソースを一覧表示します。これは <Context> 配備記述内で入れ子になっている <ResourceLink> 要素を準備する配備ツールで使用します。
  • ユーザデータベースで定義された、利用可能なセキュリティロールを一覧表示します。
  • インストール済みの Webアプリケーションを削除します。
  • 停止したアプリケーションを起動 (そして再び利用可能に) します。
  • (利用不可にするために) 既存のアプリケーションを停止しますが、 配備解除はしません。
  • 配備済みのWebアプリケーションを配備解除し、 ドキュメントベースのディレクトリを削除します。

Manager Webアプリケーションの Context 設定方法は2種類あります。

  • Host を示す appBase 上にある manager.xml コンテキスト設定ファイルをインストールします。
  • Tomcat server.xml ファイルの Host 設定内の Manager Context を設定します。以下に例を示します。
    <Context path="/manager" debug="0" privileged="true"
             docBase="/usr/local/kinetic/tomcat5/server/webapps/manager">
    </Context>
    

複数の仮想ホスト (Webサイト) をサポートするように設定するなら、 それぞれで Manager を設定する必要があります。

Manager Webアプリケーションの使用方法は3種類あります。

  • ユーザインタフェースとしてブラウザを使うアプリケーション。 以下の URL で localhost を Webサイトのホスト名に置き換えて下さい: http://localhost/manager/html/
  • HTTPリクエストのみを使った最小版。 システム管理者がスクリプトでセットアップするのに適しています。 コマンドはリクエストURLの一部として送られ、 レスポンスは簡単に解析・処理できるように単純テキスト形式となっています。 詳しくは サポートされるManagerコマンド をご覧下さい。
  • Ant (バージョン1.4以降) ビルドツールで便利な一連のタスク定義。 詳しくは AntでのManagerコマンドの実行 をご覧下さい。

Tomcat 5 の将来のバージョンでは (少なくとも) 以下の形式での管理機能が追加される予定です。

  • Webサービス。これを使うとリモートかつ/またはJava以外の管理環境と簡単に統合できます。
  • Webブラウザで Tomcat を簡単に管理するための、 優れたユーザインタフェースを持つ Webサービス (Webサービス処理層の上に構築)。

Managerアプリケーションへのアクセス設定

以下の記述で、変数名 $CATALINA_HOME は Tomcat 5 をインストールしたディレクトリを指し、 これを基準にほとんどの相対パスを解決するディレクトリです。 ただし、複数インスタンスで Tomcat 5 を設定した場合は、 $CATALINA_HOME の代わりに $CATALINA_BASE を使って下さい。

Tomcat の出荷時のデフォルトの設定で、サーバの Manager アプリケーションをインターネット上の誰でも実行できるようになっていたら、 まったく安全ではありません。そこで Tomcat 出荷時には、 Manager を使おうとする人は誰でも、関連する manager ロールを持ったユーザ名とパスワードを使った認証が必須となっています。 さらに、デフォルトのユーザファイル ($CATALINA_HOME/conf/tomcat-users.xml) では このロールに関連するユーザ名はありません。したがって、Manager アプリケーションへのアクセスはデフォルトでは完全に無効となっています。

Manager Web アプリケーションにアクセスできるようにするには、 新規作成したユーザ名/パスワードをロール名 manager と関連づけるか、manager ロールに既存のユーザ名/パスワードを 関連づけなければなりません。これを行なう具体的なやり方は、以下の Realm実装のうち、どれを使っているかによって違います。

  • MemoryRealm - 他のレルムを使うように $CATALINA_HOME/conf/server.xml をカスタマイズしていなければ、 Tomcat 5 はデフォルトでは $CATALINA_HOME/conf/tomcat-users.xml という XML 形式のファイルを使うようになっており、 どんなテキストエディタでも編集可能です。このファイルにはユーザごとに <user> という XML が含まれており、 以下のような感じになっています。
    <user name="craigmcc" password="secret" roles="standard,manager" />
    
    ここではログオンする人が使うユーザ名とパスワード、 それにこの人が関連するロール名が定義されています。 manager ロールにコンマ区切りの roles 属性を追加することもできますし、 割り当てたこのロールに対して新しいユーザを作成することもできます。 またその両方を行なうことも可能です
  • JDBCRealm - ユーザとロールの情報を JDBC 経由でアクセスする データベースに保存します。manager ロールを1人以上の既存ユーザに関連づけることもできますし、 あなたの環境での標準手順にしたがって、 割り当てたこのロールに対して1人以上の新しいユーザを作成することもできます。 またその両方を行なうことも可能です。
  • JNDIRealm - ユーザとロールの情報を LDAP 経由でアクセスする ディレクトリサーバに保存します。manager ロールを1人以上の既存ユーザに関連づけることもできますし、 あなたの環境での標準手順にしたがって、 割り当てたこのロールに対して1人以上の新しいユーザを作成することもできます。 またその両方を行なうことも可能です。

次のセクションで記述する Managerコマンドのいずれかを最初に実行する際には、 BASIC認証を使ってログオンしようとします。 manager ロールを所有するユーザデータベース内の妥当なユーザと認証される限り、 どのユーザ/パスワードを入力してもかまいません。

パスワードによる制限の他に、Manager Webアプリケーションでは RemoteAddrValveRemoteHostValve を加えることでリモートIPアドレスやホストによる制限をかけられます。 アクセスをローカルホストのIPアドレスに制限する例を示します。

<Context path="/manager" debug="0" privileged="true"
         docBase="/usr/local/kinetic/tomcat5/server/webapps/manager">
         <Valve className="org.apache.catalina.valves.RemoteAddrValve"
                allow="127.0.0.1"/>
</Context>

サポートされるManagerコマンド

Manager アプリケーションが実行可能なコマンドは全て、 以下のような単独のリクエストURIで指定します。:

http://{host}:{port}/manager/{command}?{parameters}

ここで {host}{port} は Tomcat が動作するホスト名とポート番号を、{command} は実行したい Manager コマンドを、{parameters} はコマンド固有の問い合わせパラメータを示します。以下の例を実際に使う時は、 インストールに合わせてホストやポートを変えてください。

ほどんどのコマンドでは以下の問い合わせパラメータを1個以上使えます。

  • path - 対象の Webアプリケーションのコンテキストパス (先頭のスラッシュを含む)。ROOT Webアプリケーションの場合は、 長さ0の文字列を指定します。注意 - Manager アプリケーション自身の管理コマンドは実行できません。
  • war - Webアプリケーションアーカイブ (WAR) ファイルのURL、 Webアプリケーションを含むディレクトリのパス名、コンテキスト設定 ".xml" ファイルのいずれか。以下のいずれかの形式で URL を指定できます。
    • file:/absolute/path/to/a/directory - Web アプリケーションの展開したバージョンを含むディレクトリのパス。 このディレクトリは特に変更することなく、 指定したコンテキストパスに追加可能です。
    • file:/absolute/path/to/a/webapp.war - Web アプリケーションアーカイブ (WAR) ファイルの絶対パス。 /deploy コマンドで のみ 妥当で、 このコマンドではこの形式のみサポートします。
    • jar:file:/absolute/path/to/a/warfile.war!/ - ローカルの Webアプリケーションアーカイブ (WAR) ファイルの URL。 JAR ファイル全体を参照する JarURLConnection クラスで有効な構文はすべて使用可能です。
    • file:/absolute/path/to/a/context.xml - コンテキスト設定要素を含む Webアプリケーションコンテキスト設定 ".xml" ファイルの絶対パス。
    • directory - ホストのアプリケーション基準ディレクトリ内にある Webアプリケーションコンテキストのディレクトリ名。
    • webapp.war - ホストのアプリケーション基準ディレクトリ内にある Webアプリケーションの WARファイル名。

各コマンドは人・プログラムのどちらでも読みやすいように、text/plain 形式 (HTMLマークアップなしの素のASCII) のレスポンスを返します。 レスポンスの1行目は 成功失敗 のどちらかで始まり、 リクエストしたコマンドが成功したかどうかを示します。失敗した場合は、 1行目の残りの部分に起こった問題の説明が出力されます。 コマンドによっては2行目以降に追加情報 (後述) を出力することもあります。

国際化に関する注意 - Manager アプリケーションではリソースバンドル内のメッセージを検索するため、 環境によっては文字列が外国語で表示される可能性があります。 以下に示す例ではメッセージの日本語バージョンを示します。

リモートへの新しいアプリケーションの配備
http://localhost:8080/manager/deploy?path=/foo

HTTP PUT リクエストのリクエストデータとして指定した Web アプリケーションアーカイブ (WAR) ファイルをアップロードし、当該仮想ホストの appBase にインストールし、path リクエストパラメータで指定したコンテキストパスで起動します。 path が指定されない場合は、ディレクトリ名または拡張子 (.war) を除いた WAR ファイル名がパスとして使用されます。/undeploy を使うと、このアプリケーションを後で配備解除 (さらに当該アプリケーションディレクトリを削除) できます。

.WAR ファイルには、/META-INF/context.xml というコンテキスト設定 XML ファイルの形で Tomcat 固有の配備設定を含めることができます。

URL パラメータは以下の通りです。

  • update: true と設定すると、同名のコンテキストがある場合に、 先に配備解除を行ないます。デフォルト値は false に設定されています。
  • tag: タグ名を指定することで、配備した Web アプリケーションをバージョン番号と関連づけることができます。tag を使うだけで、アプリケーションのバージョンを後で変えることができます。
  • pause: アプリケーション更新の間に到着した接続が失われないように、 Web アプリケーションを一時停止します。このオプションは update パラメータが指定された場合にのみ使用可能で、デフォルト値は false です。 到着リクエスト数が多い場合は、リクエスト処理量が大きくなるかもしれないので ご注意ください。

注意 - このコマンドは /undeploy コマンドの反対です

もしインストールと起動が成功すると、以下のようなレスポンスが返ってきます。

成功 - コンテキストパス /foo でアプリケーションを配備しました 

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • 失敗 - アプリケーションは、既にパス /foo に存在します

    現在実行中のWebアプリケーションのコンテキストパスは重複してはいけません。 したがって、このコンテキストパスを使っている既存のアプリケーションを 削除または配備解除するか、別のコンテキストパスにしなければなりません。 このエラーを回避するには、URL へのパラメータとして update パラメータを true に指定するという方法もあります。その場合は、 配備を行なう前に、既存のアプリケーションに対して配備解除が行なわれます。

  • 失敗 - 例外が発生しました

    新しい Webアプリケーションの起動の際に例外が発生しました。詳細については Tomcat 5 のログをチェックする必要がありますが、/WEB-INF/web.xml ファイルの解析での問題か、アプリケーションのイベントリスナーやフィルターの初期化の際にクラスがない可能性が考えられます。

  • 失敗 - 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュで始まらなければなりません。ROOT Webアプリケーションを参照する場合は例外で、 この場合はコンテキストパスは長さ0の文字列になります。

  • コンテキストパスが指定されていません
    path パラメータが必要です。
ローカルパスからの新しいアプリケーションの配備

(Web アプリケーションで使われていていない) path でコンテキストを指定して、新しい Web アプリケーションをインストール・起動します。 このコマンドは /remove コマンドの反対です。

インストールコマンドの使い方は何通りもあります。

以前に配備したバージョンの Webアプリのインストール

tag 属性を使って配備された以前のバージョンの Webアプリケーションを配備するのに使えます。 manager Webアプリの作業ディレクトリには、 以前に配備した WARファイルが入っていますが、 それを削除した場合には配備が失敗することにご注意ください。

http://localhost:8080/manager/deploy?path=/footoo&tag=footag

URLで指定したディレクトリまたは WARファイルのインストール

Tomcat サーバ上にある Webアプリケーションディレクトリまたは ".war" ファイルをインストールします。path が指定されていない場合は、 ディレクトリ名、または WARファイル名から拡張子「.war」をとったものがパスとして使われます。 ディレクトリ名や Webアプリケーションアーカイブ (WAR) ファイルについては、 war パラメータで指定します。WARファイル参照 URL でサポートされている構文については、java.net.JarURLConnection クラスの Javadoc ページに記載されています。 WARファイル全体を参照する URL しか使えません。

以下の例では Tomcat サーバの /path/to/foo ディレクトリにある Webアプリケーションを /footoo というコンテキストとしてインストールします。

http://localhost:8080/manager/deploy?path=/footoo&war=file:/path/to/foo

以下の例では Tomcat サーバの /path/to/bar.war にある「.war」ファイルを、/bar というコンテキストの Web アプリケーションとしてインストールします。path パラメータがないので、 コンテキストパスはデフォルト値である、Webアプリケーションアーカイブファイル名から拡張子 「.war」を取ったものとなることにご注意ください。

http://localhost:8080/manager/deploy?war=jar:file:/path/to/bar.war!/

ホストの appBase 指定でのディレクトリや WAR ファイルのインストール

ホストの appBaseディレクトリ配下の Webアプリケーションのディレクトリまたは ".war"ファイルをインストールします。path が指定されていない場合は、 ディレクトリ名、またはWARファイル名から拡張子".war"を省いた名前がパスとして使われます。

以下の例では Tomcatサーバのホストの appBaseディレクトリの下の foo ディレクトリにある Webアプリケーションが /foo という Webアプリケーションコンテキストでインストールされます。 path パラメータが指定されていないので、 コンテキストパスはデフォルトの Webアプリケーションのディレクトリ名となっていることに注意して下さい。

http://localhost:8080/manager/deploy?war=foo

以下の例では Tomcatサーバのホストの appBaseディレクトリにある bar.war という".war"ファイルが /bartoo という Webアプリケーションコンテキストでインストールされます。

http://localhost:8080/manager/deploy?path=/bartoo&war=bar.war

コンテキスト設定".xml"ファイルを使ったインストール

ホストの deployXML フラグが true の場合、コンテキスト設定 ".xml"ファイルと、オプションで ".war"ファイルまたは Webアプリケーションディレクトリを使って Webアプリケーションをインストールできます。 コンテキスト設定".xml"ファイルを使って Webアプリケーションをインストールする際には コンテキストの path は使われません。

コンテキスト設定".xml"ファイルには、Tomcat の server.xml で設定するのと同じように 妥当な XML を記述できます。以下に例を示します。

<Context path="/foobar" docBase="/path/to/application/foobar"
         debug="0">

  <!-- ロールを取得するユーザデータベースへのリンク -->
  <ResourceLink name="users" global="UserDatabase"
                type="org.apache.catalina.UserDatabase"/>

</Context>

オプションですが、 URL に war パラメータで Webアプリケーションの".war"ファイルまたはディレクトリが指定された場合は、 コンテキスト設定".xml"ファイルで設定された docBase はすべて上書きされます。

コンテキスト設定".xml" ファイルを使ってアプリケーションをインストールする例を示します。

http://localhost:8080/manager/deploy?config=file:/path/context.xml

サーバ上のコンテキスト設定".xml"ファイルと Webアプリケーション ".war"ファイルをインストールする例を示します。

http://localhost:8080/manager/deploy?config=file:/path/context.xml&war=jar:file:/path/bar.war!/

インストールでの注意事項

unpackWARs=true という設定のホストで WARファイルをインストールすると、 WARファイルはホストの appBase ディレクトリに展開されます。

アプリケーションの WARファイルやディレクトリがホストの appBase ディレクトリに配備され、ホストで autoDeploy=true、liveDeploy=true のいずれかに設定されている場合、コンテキストパスはディレクトリ名か、 WARファイル名から拡張子".war"を省いた名前に合致しなければなりません。

セキュリティ上の理由から、信頼されないユーザが Webアプリケーションを管理できる場合は、ホストの deployXML フラグは false になっています。これにより、信頼されないユーザは、設定 XML ファイルを使って Webアプリケーションをインストールできないだけでなく、 ホストの appBase ディレクトリ配下にないアプリケーションディレクトリや ".war" ファイルのインストールができないようになっています。

インストールに対するレスポンス

インストールと起動が成功すると、以下のようなレスポンスが返ってきます。

成功 - コンテキストパス /foo にアプリケーションをインストールしました

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • アプリケーションは、既にパス /foo に存在します

    現在動作している Webアプリケーションのコンテキストパスはすべて一意でなければなりません。 したがって、このコンテキストパスを使っている既存の Webアプリケーションを配備解除するか、 別のコンテキストパスにしなければなりません。URL で update パラメータに true を指定すれば、このエラーを回避できます。 その場合、配備の前に既存のアプリケーションの配備解除が行なわれます。

  • ドキュメントベースが存在しない、又は読めないディレクトリです

    war パラメータでで指定する URL は Webアプリケーションの「展開済み」バージョンを含んだこのサーバのディレクトリか、 このアプリケーションを含む Webアプリケーションアーカイブ (WAR) ファイルの絶対 URL でなければなりません。war パラメータでに正しい値を指定してください。

  • 例外が発生しました

    Webアプリケーション起動時に例外が発生しました。詳細については Tomcat 5 のログをチェックする必要がありますが、/WEB-INF/web.xml 解析エラーや、 アプリケーションイベントリスナやフィルタの初期化時にクラスが見つからなかった可能性もあります。

  • 無効なアプリケーションのURLが指定されました

    指定したディレクトリまたは Webアプリケーションの URL が妥当でありません。この URL は file: で始まらなければならず、 WARファイルの URL の場合、".war" で終わらなければなりません。

  • 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュ ("/") で始まらなければなりません。 ROOT Webアプリケーションを参照している場合は例外です -- この場合は、コンテキストパスは長さ0の文字列になります。

  • コンテキストパスはディレクトリ又はWARファイル名に一致しなければいけません:
    ホストの appBase ディレクトリにアプリケーションの WARファイルやディレクトリが配備され、ホストで autoDeploy=true、 liveDeploy=true のどちらかの設定があった場合、 コンテキストパスはディレクトリ名か、 WARファイル名から拡張子".war"を省いた名前に合致しなければなりません。
  • ホストWebアプリケーションディレクトリ中のWebアプリケーションだけがインストールできます
    ホストの deployXML フラグが false になっていて、ホストの appBase ディレクトリ以外の場所に Webアプリケーションディレクトリや ".war" ファイルをインストールしようとするとこのエラーが発生します。
配備・インストール済のアプリケーションの一覧表示
http://localhost:8080/manager/list

現在配備・インストールされている Webアプリケーションすべてについて、 コンテキストパスと現在のステータス (running または stopped)、 アクティブなセッション数を一覧表示します。Tomcat 起動直後の場合、 通常は以下のようなレスポンスを返します。

成功 - バーチャルホスト localhost のアプリケーション一覧です
/webdav:running:0
/examples:running:0
/manager:running:0
/:running:0
既存のアプリケーションの再ロード
http://localhost:8080/manager/reload?path=/examples

既存のアプリケーションにシャットダウンと再ロードを指示します。 Webアプリケーションコンテキストが再ロード可能になっていなくて /WEB-INF/classes のクラスやプロパティファイルを更新した場合や、 /WEB-INF/lib ディレクトリの JARファイルを更新した場合に便利かもしれません。

注意: /WEB-INF/web.xml の Webアプリケーション設定ファイルは再ロード時にチェックされず、 以前の web.xml の設定が使われます。web.xml ファイルを変更した場合は、 Webアプリケーションを停止・起動しなければなりません

このコマンドが成功すると、以下のようなレスポンスが返ってきます。

OK - コンテキストパス /examples のアプリケーションを再ロードしました

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

  • 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュ ("/") で始まらなければなりません。 ROOT Webアプリケーションを参照している場合は例外です -- この場合は、コンテキストパスは長さ0の文字列になります。

  • パス /foo のコンテキストが存在しません

    指定したコンテキストのアプリケーションは配備されていません。

  • コンテキストパスが指定されていません
    path パラメータが必要です。
  • パス /foo に配備されたWARファイルでは再ロードがサポートされていません
    Webアプリケーションが WARファイルから直接インストールされた場合は、 現在のところ、アプリケーションの再ロード (クラスや web.xml ファイルの変更の反映) はサポートされません。 再ロードはアーカイブされていないディレクトリから Webアプリケーションがインストールされた場合のみ有効です。 WARファイルを使う場合、アプリケーションに変更を反映させるには、 配備解除 した上で再度 配備 しなければなりません。
OS・JVMのプロパティの一覧表示
http://localhost:8080/manager/serverinfo

Tomcat のバージョン、OS、JVM プロパティに関する情報を一覧表示します。

エラーが発生した場合、レスポンスは失敗 で始まり、 エラーメッセージが表示されます。問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

利用可能なJNDIリソースの一覧表示
http://localhost:8080/manager/resources[?type=xxxxx]

コンテキスト設定ファイルのリソースリンクで使用可能なグローバル JNDI リソースを一覧表示します。type リクエストパラメータを指定する場合、 その値は使用したいリソースタイプの完全修飾 Java クラス名でなければなりません (例えば、使用可能なJDBC データソース名をすべて取得したい場合は、 javax.sql.DataSource と指定します)。type リクエストパラメータを指定しない場合は、すべてのリソースタイプが返されます。

type リクエストパラメータが指定されていない場合、 正常なレスポンスの1行目は以下のようになります。

  成功 - すべてのタイプのグローバルリソースを列挙しました

or

  成功 - タイプ xxxxx のグローバルリソースを列挙しました

続いて各リソースが1行ずつ表示されます。 各行ではコロン (":") 区切りで以下の項目が表示されます

  • グローバルリソース名 - グローバル JNDI リソース名。 <ResourceLink> 要素の global 属性で使われます。
  • グローバルリソースタイプ - グローバル JNDI リソースの完全修飾 Java クラス名

エラーが発生した場合、レスポンスは失敗 で始まり、 エラーメッセージが表示されます。問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

  • 失敗 - グローバルなJNDIリソースが利用できません

    この Tomcat サーバではグローバル JNDI リソースが使えないように設定されています。

利用可能なセキュリティロールの一覧表示
http://localhost:8080/manager/roles

Manager Webアプリケーションの web.xml ファイルの users リソース参照にリンクした org.apache.catalina.UserDatabase リソースで使用可能なセキュリティロール名 (とその説明) を一覧表示します。 例えば Webアプリケーションで使用されているセキュリティロール名と、 コンテナで実際に定義されているロール名とを対応付ける <security-role-ref> 要素を作成する配備ツールで使えます。

デフォルトでは、users リソース参照はグローバルな UserDatabase リソースを参照します。仮想ホストごとに別のユーザデータベースを使うことにする場合は、デフォルトの manager.xml コンテキスト設定ファイルの <ResourceLink> 要素を、 この仮想ホスト用のグローバルなユーザデータベースのリソースを参照するように変更しなければなりません。

このコマンドが実行された場合、レスポンスの1行目は以下のようになります。

When this command is executed, the first line of the response will be:

  成功 - セキュリティロールを列挙しました

続いて各セキュリティロールが1行ずつ表示されます。 各行ではコロン (":") 区切りで以下の項目が表示されます

  • セキュリティロール名 - ユーザデータベースで Tomcat 認識しているセキュリティロール名。
  • 説明 - このセキュリティロールの説明 (ロールを選択するユーザインタフェースを作成する場合に便利です)。

エラーが発生した場合、レスポンスは失敗 で始まり、 エラーメッセージが表示されます。問題の原因としては以下のものが考えられます。

  • 失敗 - ユーザデータベース参照を解決できません - org.apache.catalina.UserDatabase リソースでの検索が失敗した場合の JNDI エラーです。Tomcat ログファイルで、 このエラーに関連するスタックトレースをチェックして下さい。
  • 失敗 - ユーザデータベースが利用できません - users リソース参照が正しいユーザデータベースのインスタンスを参照するように設定できていません。 manager.xml ファイルをチェックし、このリソースについて <ResourceLink> または <ResourceParams> 要素が正しいか確認して下さい。
セッション統計
http://localhost:8080/manager/sessions?path=/examples

Webアプリケーションのデフォルトのセッションタイムアウトと、 現在アクティブなセッション数を実際のタイムアウト時間を基準に10分単位にグループ化して表示します。 例えば、Tomcat を再起動し、/examples Webアプリの JSP サンプルの1つを実行した場合、以下のようになるでしょう。

成功 - コンテキストパス /examples のアプリケーションのセッション情報です
デフォルトの最大セッション停止間隔は30分です
30 - <40 分: 1 セッション
既存のアプリケーションの起動
http://localhost:8080/manager/start?path=/examples

停止したアプリケーションに再起動を指示し、再び使用可能にします。 例えば、アプリケーションで必要なデータベースが一時的に使用不可になった場合、 停止・起動ができると便利です。たいていの場合、 このデータベースを使う Webアプリケーションを停止させた方が、 ユーザに対してデータベース例外を表示し続けるよりは良いでしょう。

このコマンドが成功すると、以下のようなレスポンスが返ってきます。

成功 - コンテキストパス /examples でアプリケーションを起動しました

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

  • 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュ ("/") で始まらなければなりません。 ROOT Webアプリケーションを参照している場合は例外です -- この場合は、コンテキストパスは長さ0の文字列になります。

  • パス /foo のコンテキストが存在しません

    指定したコンテキストのアプリケーションは配備されていません。

  • コンテキストパスが指定されていません
    path パラメータが必要です。
既存のアプリケーションの停止
http://localhost:8080/manager/stop?path=/examples

既存のアプリケーションを使用不可にするよう指示しますが、配備解除はしません。 アプリケーションが停止している時に送られたリクエストの結果はすべて、 HTTPエラー404となり、このアプリケーションは「アプリケーション一覧」コマンドでは "stopped"と表示されます。

このコマンドが成功すると、以下のようなレスポンスが返ってきます。

成功 - コンテキストパス /examples でアプリケーションを停止しました

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

  • 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュ ("/") で始まらなければなりません。 ROOT Webアプリケーションを参照している場合は例外です -- この場合は、コンテキストパスは長さ0の文字列になります。

  • パス /foo のコンテキストが存在しません

    指定したコンテキストのアプリケーションは配備されていません。

  • コンテキストパスが指定されていません
    path パラメータが必要です。
既存のアプリケーションの配備解除
http://localhost:8080/manager/undeploy?path=/examples

警告 - このコマンドによって、 この仮想ホストの appBase ディレクトリ (通常は"webapps") 内に存在する Webアプリケーションディレクトリの中身や".war"ファイル、 あるいはその両方が削除されます。 Webアプリケーションの一時的なワークディレクトリも削除されます。 アプリケーションのサービスを休止したいだけなら、 代わりに /stop コマンドを使うべきです。

既存のアプリケーションを緩やかに (gracefully) シャットダウンし、 Tomcat から削除するよう指示します (またこれによって、このコンテキストパスは後で再利用可能となります)。 さらに、ドキュメントルートディレクトリが、この仮想ホストの appBase ディレクトリ (通常は"webapps") 内に存在する場合、そのディレクトリも削除されます。 このコマンドは /deploy コマンドの反対です。

このコマンドが成功すると、以下のようなレスポンスが返ってきます。

成功 - コンテキストパス /examples のアプリケーションを配備解除しました

そうでなければ、レスポンスは 失敗 で始まるエラーメッセージとなります。 問題の原因としては以下のものが考えられます。

  • 例外が発生しました

    Webアプリケーションの起動時に例外が発生しました。 詳細については Tomcat 5 のログをチェックして下さい。

  • 無効なコンテキストパスが指定されました

    コンテキストパスはスラッシュ ("/") で始まらなければなりません。 ROOT Webアプリケーションを参照している場合は例外です -- この場合は、コンテキストパスは長さ0の文字列になります。

  • パス /foo のコンテキストが存在しません

    指定したコンテキストのアプリケーションは配備・インストールされていません。

  • コンテキストパスが指定されていません
    path パラメータが必要です。
AntでのManagerコマンドの実行

ここまでで説明した HTTP リクエストによる Manager コマンド実行の他に、 Tomcat 5 では ビルドツールの Ant (バージョン1.4以降) 用の便利なタスク定義を用意しています。これらのコマンドを使うためには、 以下のセットアップを行なわなければなりません。

  • Ant のバイナリ配布を http://ant.apache.org/ からダウンロードします。 バージョン1.4以降を使用しなければなりません。
  • 適当なディレクトリに Ant 配布をインストールします (以下の説明では、 このディレクトリを $ANT_HOME と記述します).
  • server/lib/catalina-ant.jar ファイルを Tomcat 5 のインストールディレクトリから Ant のライブラリディレクトリ ($ANT_HOME/lib) にコピーします。
  • PATH 環境変数に $ANT_HOME/bin を加えます。
  • Tomcat のユーザデータベースで manager ロールを持つ username/password の組み合わせを1種類以上設定します。

Ant でカスタムタスクを使うには、最初に <taskdef> 要素を宣言しなければなりません。したがって build.xml の内容は以下のような感じになるでしょう。

<project name="My Application" default="compile" basedir=".">

  <!-- Webアプリケーションをビルドするディレクトリを設定します -->
  <property name="build"    value="${basedir}/build"/>

  <!-- このアプリケーションのコンテキストパスを設定します -->
  <property name="path"     value="/myapp"/>

  <!-- Manager アプリケーションにアクセスするプロパティを設定します -->
  <property name="url"      value="http://localhost:8080/manager"/>
  <property name="username" value="myusername"/>
  <property name="password" value="mypassword"/>

  <!-- Manager アプリケーション用のカスタム Ant タスクを設定します -->
  <taskdef name="deploy"    classname="org.apache.catalina.ant.DeployTask"/>
  <taskdef name="list"      classname="org.apache.catalina.ant.ListTask"/>
  <taskdef name="reload"    classname="org.apache.catalina.ant.ReloadTask"/>
  <taskdef name="resources" classname="org.apache.catalina.ant.ResourcesTask"/>
  <taskdef name="roles"     classname="org.apache.catalina.ant.RolesTask"/>
  <taskdef name="start"     classname="org.apache.catalina.ant.StartTask"/>
  <taskdef name="stop"      classname="org.apache.catalina.ant.StopTask"/>
  <taskdef name="undeploy"  classname="org.apache.catalina.ant.UndeployTask"/>

  <!-- 実行可能ターゲット -->
  <target name="compile" description="Webアプリケーションのコンパイル">
    <!-- ... ${build} サブディレクトリで Webアプリケーションを構築 ... -->
  </target>

  <target name="deploy" description="Webアプリケーションのインストール"
          depends="compile">
    <deploy url="${url}" username="${username}" password="${password}"
            path="${path}" war="file://${build}"/>
  </target>

  <target name="reload" description="Webアプリケーションのリロード"
          depends="compile">
    <reload  url="${url}" username="${username}" password="${password}"
            path="${path}"/>
  </target>

  <target name="undeploy" description="Webアプリケーションの削除">
    <remove url="${url}" username="${username}" password="${password}"
            path="${path}"/>
  </target>

</project>

これで、Tomcatの実行中のインスタンスに対してアプリケーションを配備するのに ant deploy というコマンドを実行したり、Tomcat にリロードを指示するのに ant reload コマンドを実行できます。 注意:この build.xml の重要な値のほとんどは置換可能なプロパティとして定義されています。 したがって、これらの値はコマンドラインで上書きできます。例えば、 build.xml ファイルのソースコードに実際の manager ロールを持つユーザーのパスワードを記述するのは、 セキュリティ上リスクがあると思うかもしれません。 それを回避するには、password プロパティに値を指定せずに、 コマンドラインで以下のように指定します。

  ant -Dpassword=secret deploy
JMXプロキシサーブレットの使用
JMXプロキシサーブレットとは
JMXプロキシサーブレットは Tomcat の内部変数の取得・設定を行なう軽量のプロキシです (MBean で公開しているクラスの取得・設定も可能です)。 使い方はあまりわかりやすくありませんが、 このユーザインタフェースは、コマンドラインのスクリプトで Tomcat の内部変数を監視・変更できるようにするのに極めて役立ちます。 プロキシでは、情報の取得と設定ができます。 JMX プロキシサーブレットを正しく理解するためには、 JMX (Java Management Extensions) の概要を理解しておく必要があります。 JMX が何かご存知ない方はわかりにくいと思いますがご了承下さい。
JMXクエリコマンド
以下のような形式となります。
http://webserver/manager/jmxproxy/?qry=STUFF
ここで STUFF は実行したい JMX クエリ (問い合わせ) を指します。例えば、 以下のようなクエリを実行できます。
  • qry=*%3Atype%3DRequestProcessor%2C* --> type=RequestProcessor は、 リクエスト処理可能なすべてのワーカを見つけ、状態を表示します。
  • qry=*%3Aj2eeType=Servlet%2c* --> j2eeType=Servlet は、ロードされたすべてサーブレットを表示します。
  • qry=Catalina%3Atype%3DEnvironment%2Cresourcetype%3DGlobal%2Cname%3DsimpleValue --> Catalina:type=Environment,resourcetype=Global,name=simpleValue は、指定した名前の MBean を検索します。
こうしたクエリでできることを本当に理解するためには、実際に試してみる必要があります。 qry パラメータを指定しない場合、すべての MBean が表示されます。 実際のところ、実行可能なクエリをすべて理解するには、 Tomcatのソースコードを読み、JMX 仕様を理解することをお薦めします。
JMX設定コマンド
MBeanのクエリができるようになったら、 こんどは Tomcat の内部変数を変えてみましょう。 設定コマンドの通常の形式は以下の通りです。
http://webserver/manager/jmxproxy/?set=BEANNAME&att=MYATTRIBUTE&val=NEWVALUE
したがって、以下の3種類のリクエストパラメータを指定する必要があります。
  1. set: Beanのフルネーム
  2. att: 変更したい属性
  3. val: 変更後の値
すべてうまく行けば「成功」と出ますし、そうでなければエラーメッセージが出ます。 例えば 実行中にErrorReportValve のデバッグ詳細レベルを上げたいとします。 以下のコマンドでデバッグ詳細レベルが10に設定されます。
http://localhost:8080/manager/jmxproxy/
?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost&att=debug&val=10
実行結果は例えば以下のようになります (環境によって異なります)。
Result: ok
次に誤った値を指定した場合の例を示します。 デバッグ詳細レベルに「cowbell」と指定してみましょう。
http://localhost:8080/manager/jmxproxy/
?set=Catalina%3Atype%3DValve%2Cname%3DErrorReportValve%2Chost%3Dlocalhost&att=debug&val=cowbell
実行結果は例えば以下のようになります。
Error: java.lang.NumberFormatException: For input string: "cowbell"

[訳注: この文書は高橋達男が翻訳しました。 日本語訳に対するコメントがあれば、report@jajakarta.orgに送って下さい。]
Copyright © 1999-2003, Apache Software Foundation