LifeCycle Listener コンポーネント

目次

イントロダクション

Listener 要素は、特定のイベントが発生したときにアクションを実行するコンポーネントを定義します。通常はTomcatの起動またはTomcatの停止です。

Listenerは、ServerEngineHost、またはContext内にネストすることができます。一部のListenerは、特定の要素内にネストすることのみを意図しています。これらの制約については、以下のドキュメントに記載されています。

属性

共通属性

Listener のすべての実装は、次の属性をサポートします。

属性説明
className

使用する実装の Java クラス名。このクラスは、org.apache.catalina.LifecycleListener インターフェースを実装する必要があります。

ネストされたコンポーネント

Listener の内部に要素をネストすることはできません。

標準実装

ほとんどの Catalina コンポーネントとは異なり、いくつかの標準的な Listener 実装が利用可能です。したがって、使用する実装を選択するには、className 属性を必ず使用する必要があります。

APR Lifecycle Listener - org.apache.catalina.core.AprLifecycleListener

APR Lifecycle Listener は、Apache Tomcat Native ライブラリの存在を確認し、存在する場合はライブラリをロードします。詳細については、APR/native ガイドを参照してください。

このリスナーは、Server 要素内にのみネストする必要があります。

APR Lifecycle Listener は、次の追加属性をサポートします。

属性説明
SSLEngine

使用する SSLEngine の名前。off: SSL を使用しない、on: SSL を使用するが、特定の ENGINE は使用しない。

デフォルト値は on です。これはネイティブ SSL エンジンを初期化します。これは、SSLEnabled 属性を使用して APR/native コネクタで有効にする必要があります。

サポートされている SSL ハードウェアエンジンとメーカーの詳細については、OpenSSL 公式ウェブサイトを参照してください。

Tomcat Native 2.x 以降では SSL が必要なため、Tomcat Native 2.x 以降を使用している場合に SSLEngine が off に設定されていると、APR/native ライブラリは無効になります。

SSLRandomSeed

SSLEngine の PRNG のシードに使用されるエントロピーソース。デフォルト値は builtin です。開発システムでは、起動時間を短縮するために、これを /dev/urandom に設定することができます。

FIPSMode

この属性の動作は、Tomcat Native が OpenSSL 1.x または OpenSSL 3.x に対してコンパイルされているかどうかによって異なります。

OpenSSL 1.x の場合: OpenSSL を FIPS モードにするように要求するには on に設定します (OpenSSL がすでに FIPS モードの場合、FIPS モードのままになります)。 OpenSSL を強制的に FIPS モードにするには enter に設定します (OpenSSL がすでに FIPS モードの場合、エラーが発生します)。 OpenSSL がすでに FIPS モードであることを要求するには require に設定します (OpenSSL がすでに FIPS モードでない場合、エラーが発生します)。

OpenSSL 3.x の場合: onenterrequire はすべて同じように動作します。 FIPS プロバイダーがデフォルトのプロバイダーである場合、それが使用されます。 FIPS プロバイダーがデフォルトのプロバイダーでない場合、エラーが発生します。

FIPS モードではFIPS 対応の OpenSSL ライブラリが必要です。この属性が off 以外に設定されている場合、SSLEngine も有効にする必要があります。

デフォルト値は off です。

useOpenSSL

この属性は、OpenSSL JSSE 実装の自動選択を制御します。デフォルトは true で、ネイティブライブラリが利用可能で、NIO または NIO2 コネクタが使用されている場合は OpenSSL が使用されます。

Context Naming Info Listener - org.apache.catalina.core.ContextNamingInfoListener

Context Naming Info Listener は、Context から次の環境エントリ (java:comp/env は暗黙) を追加します: context/path, context/encodedPath, context/webappVersion, context/name, context/baseName, context/displayName

このリスナーは、Context 要素内にのみネストする必要があります。

Context Naming Info Listener は、次の追加属性をサポートします。

属性説明
emptyOnRoot

ルートコンテキストの場合、context/path および context/encodedPath"/" が含まれ、context/name にバージョンがあれば、バージョン付きの "ROOT" が含まれるかどうか。

デフォルト値は true です。

Global Resources Lifecycle Listener - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener

Global Resources Lifecycle Listener は、Global Resources 要素の一部として、server.xml で定義された Global JNDI リソースを初期化します。このリスナーがないと、グローバルリソースは利用できません。

このリスナーは、Server 要素内にのみネストする必要があります。

Global Resources Lifecycle Listener は、追加の属性をサポートしていません。

JNI Library Loading Listener - org.apache.catalina.core.JniLifecycleListener

JNI Library Loading Listener を使用すると、共有クラスローダー (通常は共通クラスローダーですが、構成によっては異なる場合があります) を使用してネイティブライブラリをロードすることで、複数の Webapps がネイティブライブラリを使用できるようになります。

リスナーは相互に排他的な2つの属性をサポートしているため、どちらか一方を使用する必要がありますが、両方を一緒に使用することはできません。

属性説明
libraryName

java.lang.System.loadLibrary() で定義されているネイティブライブラリの名前。

libraryPath

java.lang.System.load() で定義されているネイティブライブラリの絶対パス。

JRE Memory Leak Prevention Listener - org.apache.catalina.core.JreMemoryLeakPreventionListener

JRE Memory Leak Prevention Listener は、Java Runtime 環境がコンテキストクラスローダーを使用してシングルトンをロードする既知の箇所に対する回避策を提供します。これは、Webアプリケーションクラスローダーがその時点でのコンテキストクラスローダーである場合、メモリリークの原因となるためです。回避策は、このリスナーが起動するときにこれらのシングルトンを初期化することです。これは、Tomcatの共通クラスローダーがその時点でのコンテキストクラスローダーであるためです。また、ロックされたJARファイルにつながる既知の問題に対する回避策も提供します。

このリスナーは、Server 要素内にのみネストする必要があります。

JRE Memory Leak Prevention Listener は、次の追加属性をサポートします。

属性説明
appContextProtection

Webアプリケーションによってトリガーされた sun.awt.AppContext.getAppContext() の呼び出しがメモリリークにならないように保護を有効にします。この保護を有効にすると、Java がヘッドレスモードで起動されない限り、グラフィカル環境が必要になることに注意してください。デフォルトは false です。

classesToInitialize

このリスナーの起動時にロードして初期化する、カンマ区切りの完全修飾クラス名のリスト。これにより、リクエスト処理中にロードされた場合にクラスローダーリークを引き起こすことがわかっているクラスを事前にロードできます。 oracle.jdbc.driver.OracleTimeoutThreadPerVM などの非 JRE クラスを参照できます。デフォルト値は空ですが、このリスナーの他の属性によって管理される他のリーク保護機能によって、特定の JRE クラスがロードされます。

driverManagerProtection

java.sql.DriverManager を最初に使うと、現在のクラスローダーとその親に見える JDBC ドライバのロードがトリガーされます。 Web アプリケーションレベルのメモリリーク保護は、ほとんどの場合これを処理できますが、ここでロードをトリガーすると副作用が少なくなります。デフォルトは true です。

initSeedGenerator

デフォルトのセキュリティ spi 実装の内部クラスである SeedGenerator を最初に使うと、一部のプラットフォームでスレッドが作成される可能性があります。セキュアなランダムの最初の使用のタイミングによっては、このスレッドがwebappクラスローダーに関連付けられ、メモリリークが発生する可能性があります。これを true に設定すると、シードが初期化されます。必要がない場合は、ランダムを消費しないように、デフォルトは false です。

urlCacheProtection

java.net.URLConnection を使用して JAR ファイルからリソースを読み取ることで、JAR ファイルがロックされないように保護を有効にします。この保護を有効にすると、java.net.URLConnection を介して取得されたすべてのリソースに対して、デフォルトでキャッシュが無効になることに注意してください。キャッシュは、必要に応じてケースバイケースで再度有効にできます。デフォルトは true です。

JreMemoryLeakPreventionListener の例

以下は、このリスナーの classesToInitialize 属性を構成する方法の例です。

このリスナーが server.xml で次のように構成されている場合

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"
            classesToInitialize="oracle.jdbc.driver.OracleTimeoutThreadPerVM" />

次に、OracleTimeoutThreadPerVM クラスは、リクエスト処理中ではなく、リスナーの起動中にロードおよび初期化されます。

OpenSSL Lifecycle Listener - org.apache.catalina.core.OpenSSLLifecycleListener

OpenSSL Lifecycle Listener は、OpenSSL ライブラリの存在を確認し、存在する場合はライブラリをロードします。 これは、追加のネイティブコードの代わりに Java 22 からの FFM API を使用します。 有効になり、正常にロードされると、NIO および NIO2 コネクタは TLS 機能に OpenSSL を使用します。 これは、上記の APR Lifecycle Listener の機能的な代替です。

このリスナーは、Server 要素内にのみネストする必要があります。

OpenSSL Lifecycle Listener は、次の追加属性をサポートします。

属性説明
SSLEngine

OpenSSL 1.x で使用する SSLEngine の名前。

サポートされている SSL ハードウェアエンジンとメーカーの詳細については、OpenSSL 公式ウェブサイトを参照してください。

SSLRandomSeed

SSLEngine の PRNG のシードに使用されるエントロピーソース。デフォルト値は builtin です。開発システムでは、起動時間を短縮するために、これを /dev/urandom に設定することができます。

FIPSMode

この属性の動作は、Tomcat Native が OpenSSL 1.x または OpenSSL 3.x に対してコンパイルされているかどうかによって異なります。

OpenSSL 1.x の場合: OpenSSL を FIPS モードにするように要求するには on に設定します (OpenSSL がすでに FIPS モードの場合、FIPS モードのままになります)。 OpenSSL を強制的に FIPS モードにするには enter に設定します (OpenSSL がすでに FIPS モードの場合、エラーが発生します)。 OpenSSL がすでに FIPS モードであることを要求するには require に設定します (OpenSSL がすでに FIPS モードでない場合、エラーが発生します)。

OpenSSL 3.x の場合: onenterrequire はすべて同じように動作します。 FIPS プロバイダーがデフォルトのプロバイダーである場合、それが使用されます。 FIPS プロバイダーがデフォルトのプロバイダーでない場合、エラーが発生します。

FIPS モードではFIPS 対応の OpenSSL ライブラリが必要です。この属性が off 以外に設定されている場合、SSLEngine も有効にする必要があります。

デフォルト値は off です。

useOpenSSL

この属性は、OpenSSL JSSE 実装の自動選択を制御します。 デフォルトは true で、FFM API が利用可能な場合は OpenSSL を使用します。

Properties Role Mapping Listener - org.apache.catalina.core.PropertiesRoleMappingListener

Properties Role Mapping Listener は、プロパティファイルからコンテキストのロールマッピングを設定します。キーはアプリケーションロール(例:admin、user、uservisorなど)を表し、値は技術ロール(例:DN、SID、UUIDなど)を表します。キーには、プロパティファイルに一般的なアプリケーション構成も含まれている場合、app-roles. などのプレフィックスを付けることもできます。

このリスナーは、Context 要素内にのみネストする必要があります。

Properties Role Mapping Listener は、次の追加属性をサポートします。

属性説明
roleMappingFile

ロールマッピングプロパティファイルへのパス。プロトコル webapp:ConfigFileLoader がサポートするものを何でも使用できます。

デフォルト値は webapp:/WEB-INF/role-mapping.properties です。

keyPrefix

プロパティキーからフィルタリングするプレフィックス。プレフィックスを持たない他のすべてのキーは無視されます。

Security Lifecycle Listener - org.apache.catalina.security.SecurityListener

Security Lifecycle Listener は、Tomcat の起動時にいくつかのセキュリティチェックを実行し、失敗した場合は Tomcat の起動を防止します。 このリスナーはデフォルトでは有効になっていません。 有効にするには、$CATALINA_BASE/conf/server.xml でリスナーのコメントを解除します。

このリスナーは、Server 要素内にのみネストする必要があります。

Security Lifecycle Listener は、次の追加属性をサポートします。

属性説明
checkedOsUsers

Tomcat の起動に使用してはならない OS ユーザーのカンマ区切りリスト。指定しない場合、root のデフォルト値が使用されます。 このチェックを無効にするには、属性を空の文字列に設定します。 ユーザー名は、大文字と小文字を区別しない方法でチェックされます。

minimumUmask

Tomcat を起動する前に構成する必要がある最小の制限付き umask。指定しない場合、0007 のデフォルト値が使用されます。 このチェックを無効にするには、属性を空の文字列に設定します。 チェックは Windows プラットフォームでは実行されません。

buildDateWarningAgeDays

この Tomcat インスタンスのビルド日とその起動日の間の日数で、警告がログに記録されるまでに許容される最大日数。このチェックを無効にするには、0 未満(例:-1)に設定します。指定しない場合、-1 のデフォルト値が使用されます。

StoreConfig Lifecycle Listener - org.apache.catalina.storeconfig.StoreConfigLifecycleListener

StoreConfig Lifecycle Listener は、server.xml で現在のサーバー構成を保存するか、context.xml ファイルで Web アプリケーションの現在の構成を保存するために使用できる StoreConfig MBean を構成します。

このリスナーは、Server 要素内にのみネストする必要があります。

StoreConfig Lifecycle Listener は、次の追加属性をサポートします。

属性説明
storeConfigClass

使用する IStoreConfig 実装の名前。指定しない場合、org.apache.catalina.storeconfig.StoreConfig のデフォルトが使用されます。

storeRegistry

IStoreConfig が構成を保存する方法を構成する構成ファイルの URL。指定しない場合、組み込みリソース /org/apache/catalina/storeconfig/server-registry.xml が使用されます。

ThreadLocal Leak Prevention Listener - org.apache.catalina.core.ThreadLocalLeakPreventionListener

ThreadLocal Leak Prevention Listener は、Context が停止しているときに、スレッドローカル関連のメモリリークを回避するために、Executor プールのスレッドの更新をトリガーします。 アクティブなスレッドは、タスクの実行後にプールに戻るときに、1つずつ更新されます。 更新は、renewThreadsWhenStoppingContext 属性が true に設定されているコンテキストに対してのみ行われます。

このリスナーは、Server 要素内にのみネストする必要があります。

ThreadLocal Leak Prevention Listener は、追加の属性をサポートしていません。

TLS 構成リロードリスナー - org.apache.catalina.security.TLSCertificateReloadListener

このリスナーは、TLS 証明書の有効期限を監視し、TLS 証明書の有効期限が切れる数日前に TLS 構成の自動再読み込みをトリガーするために使用できます。

このリスナーは、TLS 証明書を定期的に更新し、現在の証明書を新しい証明書に置き換える他のプロセス(certbot、クラウドインフラストラクチャなど)があることを前提としています。

このリスナーは、server.xml から Tomcat 構成を再度読み込みません。 server.xml に変更を加えた場合は、Tomcat プロセスを再起動して変更を反映させる必要があります。

このリスナーは、Server 要素内にのみネストする必要があります。

属性説明
checkPeriod

再読み込みチェックの間隔(秒単位)。 LifecycleListener の定期的なプロセスは通常、このリスナーが必要とするよりもはるかに頻繁に実行されます。 この属性は、チェックの間隔を制御します。 指定しない場合、デフォルトの 86,400 秒(24 時間)が使用されます。

daysBefore

新しい証明書が所定の位置にあり、再読み込みをトリガーできると予想される、TLS 証明書の有効期限が切れるまでの日数。 指定しない場合、デフォルトの 14 日が使用されます。

UserConfig - org.apache.catalina.startup.UserConfig

UserConfig は、ユーザー Web アプリケーションの機能を提供します。 ユーザー Web アプリケーションは、チルダ文字("〜")とユーザー名で始まるリクエスト URI を、サーバー上のそのユーザーのホームディレクトリにあるディレクトリ(通常は public_html という名前)にマップします。

詳細については、Host 要素のユーザー Web アプリケーションの特殊機能を参照してください。

UserConfig は、次の追加属性をサポートします。

属性説明
directoryName

各ユーザーのホームディレクトリ内で検索されるディレクトリ名。デフォルトは public_html です。

userClass

ユーザーデータベースクラスのクラス名。 現在、2つのユーザーデータベースがあります。org.apache.catalina.startup.PasswdUserDatabase は、/etc/passwd ファイルを使用して有効なユーザーを識別する Unix システムで使用されます。 org.apache.catalina.startup.HomesUserDatabase は、/etc/passwd が使用されていないサーバーで使用されます。 HomesUserDatabase は、指定されたベースディレクトリで見つかったすべてのディレクトリを展開します。

homeBase

ユーザーのホームディレクトリを含むベースディレクトリ。 これは、org.apache.catalina.startup.HomesUserDatabase が使用されている場合にのみ有効です。

allow

デプロイが許可されているユーザーを定義する正規表現。 この属性が指定されている場合、デプロイするユーザーはこのパターンに一致する必要があります。 この属性が指定されていない場合、ユーザーが拒否パターンに一致しない限り、すべてのユーザーがデプロイされます。

deny

デプロイが拒否されているユーザーを定義する正規表現。 この属性が指定されている場合、デプロイするユーザーはこのパターンに一致してはなりません。 この属性が指定されていない場合、ユーザーのデプロイは allow 属性によって管理されます。

Version Logging Lifecycle Listener - org.apache.catalina.startup.VersionLoggerListener

Version Logging Lifecycle Listener は、Tomcat の起動時に Tomcat、Java、およびオペレーティングシステムの情報をログに記録します。

このリスナーは、Server 要素内にのみネストする必要があり、最初に定義されたリスナーである必要があります。

Version Logging Lifecycle Listener は、次の追加属性をサポートします。

属性説明
logArgs

true の場合、Tomcat の起動時に Java に渡されたコマンドライン引数がログに記録されます。 指定しない場合、true のデフォルト値が使用されます。

logEnv

true の場合、Tomcat の起動時の現在の環境変数がログに記録されます。 指定しない場合、false のデフォルト値が使用されます。

logProps

true の場合、現在の Java システムプロパティがログに記録されます。 指定しない場合、false のデフォルト値が使用されます。

HTTPD mod_heartmonitor Listener - org.apache.catalina.ha.backend.HeartbeatListener

HTTPD mod_heartmonitor Listener を使用すると、Tomcat は Apache HTTPD mod_heartmonitor モジュールにハートビートメッセージを送信できます。

HTTPD mod_heartmonitor Listener は、次の追加属性をサポートします。

属性説明
Port

HTTPDからプロキシされたトラフィックを受信するコネクタのポート。デフォルトでは、最初のコネクタが使用されます

Host

Host は、プロキシされたトラフィックを受信するコネクタの address に対応する IP です。デフォルトでは空で、Port が使用されます

proxyURL

proxyURL は、ハートビートハンドラーの httpd 構成の Location に対応する URL で、デフォルトは /HeartbeatListener です

ProxyList

ProxyList は、Tomcat がリクエストを受信するプロキシのリストで、"address:port,address:port" のようにフォーマットされています。一度入力すると、マルチキャストロジックが無効になり、マルチパラメーターは無視されます

Group

Group は、HTTPD にメッセージをブロードキャストするマルチキャスト IP で、デフォルトは 224.0.1.105 です

Multiport

Multiport は、HTTPD にメッセージをブロードキャストするマルチキャストポートで、デフォルトは 23364 です

Ttl

Ttl は、ブロードキャストメッセージの TTL で、デフォルトは 16 です