LifeCycle Listener コンポーネント

目次

はじめに

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

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

属性

共通属性

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

属性説明
className

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

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

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

標準実装

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

APRライフサイクルリスナー - org.apache.catalina.core.AprLifecycleListener

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

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

APRライフサイクルリスナーでは、次の追加属性がサポートされています。

属性説明
SSLEngine

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

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

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

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

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の場合: onenter、およびrequireはすべて同じように動作します。FIPSプロバイダーがデフォルトのプロバイダーである場合、それが使用されます。FIPSプロバイダーがデフォルトのプロバイダーでない場合は、エラーが発生します。

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

デフォルト値はoffです。

useOpenSSL

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

コンテキストネーミング情報リスナー - org.apache.catalina.core.ContextNamingInfoListener

コンテキストネーミング情報リスナーは、Contextから次の環境エントリ(java:comp/envを暗示)を追加します:context/pathcontext/encodedPathcontext/webappVersioncontext/namecontext/baseNamecontext/displayName

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

コンテキストネーミング情報リスナーでは、次の追加属性がサポートされています。

属性説明
emptyOnRoot

ルートコンテキストの場合、context/pathcontext/encodedPath"/"が含まれ、context/nameにバージョンがある場合は、"ROOT"が含まれるかどうか。

デフォルト値はtrueです。

グローバルリソースライフサイクルリスナー - org.apache.catalina.mbeans.GlobalResourcesLifecycleListener

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

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

グローバルリソースライフサイクルリスナーでは、追加の属性はサポートされていません。

JNIライブラリローディングリスナー - org.apache.catalina.core.JniLifecycleListener

JNIライブラリローディングリスナーを使用すると、共有クラスローダー(通常はCommonクラスローダーですが、構成によっては異なる場合があります)を使用してネイティブライブラリをロードすることにより、複数のWebアプリケーションがネイティブライブラリを使用できるようになります。

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

属性説明
libraryName

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

libraryPath

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

JREメモリリーク防止リスナー - org.apache.catalina.core.JreMemoryLeakPreventionListener

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

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

JREメモリリーク防止リスナーでは、次の追加属性がサポートされています。

属性説明
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ライフサイクルリスナー - org.apache.catalina.core.OpenSSLLifecycleListener

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

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

OpenSSLライフサイクルリスナーでは、次の追加属性がサポートされています。

属性説明
SSLEngine

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

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

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の場合: onenter、およびrequireはすべて同じように動作します。FIPSプロバイダーがデフォルトのプロバイダーである場合、それが使用されます。FIPSプロバイダーがデフォルトのプロバイダーでない場合は、エラーが発生します。

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

デフォルト値はoffです。

useOpenSSL

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

プロパティロールマッピングリスナー - org.apache.catalina.core.PropertiesRoleMappingListener

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

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

プロパティロールマッピングリスナーでは、次の追加属性がサポートされています。

属性説明
roleMappingFile

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

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

keyPrefix

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

セキュリティライフサイクルリスナー - org.apache.catalina.security.SecurityListener

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

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

セキュリティライフサイクルリスナーでは、次の追加属性がサポートされています。

属性説明
checkedOsUsers

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

minimumUmask

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

buildDateWarningAgeDays

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

StoreConfigライフサイクルリスナー - 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リーク防止リスナー - org.apache.catalina.core.ThreadLocalLeakPreventionListener

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

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

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

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

このリスナーは、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属性によって管理されます。

バージョンログライフサイクルリスナー - 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 リスナー - 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です。