Tomcatとは?
- アプリケーションサーバー。APIなどJavaプログラムが格納される。
- Tomcat内に作成したAPIのwarファイルを格納し、Tomcatを起動すると、ファイルが自動的に展開し、デプロイされる。
- 正式名称はApach Tomcatであり、WEBサーバーとしての機能も持っている。ただし、TomcatがWEBサーバーとしての機能を果たすシーンは限定的で、500番台サーバーエラーを直接ブラウザに返却する場合などに限られる。これは各サー バーの役割分担によって稼働を効率化するためである。
Tomcatの設定ファイル
/opt/tomcat の配下で、主に以下の3つのファイルがある。
- /conf/context.xml
- /conf/server.xml
- /webapps/appName/WEB-INF/web.xml
設定ファイル | スコープ | 主な用途 | できること | できないこと | 備考 |
server.xml | Tomcat全体 (全アプリ共通) |
サーバー設定 ポート設定 グローバルJNDI SSL/TSL設定 |
Tomcatのポート管理 Tomcat全体のJNDIリソース デフォルトのデータソース設定 |
アプリケーション単位の設定 | Tomcatの再起動が必要 設定ミスのリスクが大きい |
context.xml | アプリケーション単 | JNDIリソース設定 アプリ専用の環境変数 |
JNDI(データソース) JNDI(環境変数) アプリケーション毎の設定 |
Tomcat全体の設定 グローバルリソース設定 |
通常はホットデプロイ(再起動不要) |
web.xml | アプリケーション内部 | JNDIリソースの参照 (context.xmlを参照) |
context.xmlのリソースを参照 URLマッピング 認証・フィルタ設定 |
JNDIリソース定義 データソースの設定 |
アプリケーション個別設定
Catalina/localhost/[appName].xml を作成することでも、Contextの内容を記述することができる。
アプリケーション毎にDB接続情報を切り替える際には、この仕組みを利用すると良い。
appNameは、webapps配下にデプロイしているアプリケーション名を使用する。これだけで、アプリケーション独自の設定を適用することができる。
Tomcatのログ
以下のディレクトリに格納される。
/opt/tomcat/apache-tomcat/logs/
主に見るログは以下の通り。
- catalina.out:アプリの標準出力。アプリのデプロイからリクエストレスポンスまで出力される。最も重要なログ。
- localhost.log:コンテキスト、つまり、ホストの設定に関する情報。情報自体は少なく、あまり見ることは無い。
- localhost_access_log.txt:上記の通りホストのログだが、リクエストレスポンスに関わる情報が出力されているのでたまに見ることがある。ホストのリクエストレスポンスのログ、すなわち、Apacheに一番近い部分のログと言えそう。
Appendix
catalinaとは?
Tomcat (Webコンテナ)に内包されているサーブレットコンテナ。 TomcatはこのCatalinaとCoyoteというHTTPサーバーを内包している。 TomcatがWEBサーバーとしても機能する理由がこれ。
インシデント
デプロイ時エラー
~catalina.out~
11-Dec-2024 19:44:15.281 SEVERE [main] org.apache.catalina.startup Host Config.deploy WAR Error deploying web application archive [/opt/tomcat/apache-tomcat-9.0.24/webapps/xxx.war]
java.lang.IllegalStateException: Error starting child
at org.apache.catalina.core.ContainerBase.addChildInternal (ContainerBase.java:720)
Caused by: javax.naming.Name Not FoundException: Name [jdbc/XXX] is not bound in this Context. Unable to find [jdbc].
context jdbc/XXXが無いと言われている。
原因は不明だが、以下のディレクトリ配下にあるxmlが消えていた
[tomcatのパス]/conf/Catalina/localhost/xxx.xml
ここに以下のようなリソースの指定があるのだが、これが無いためエラーになっていた。
<Resource name="jdbc/XXX"
…
この指定は、以下のファイルに記述する場合もある。
[tomcatのパス]/conf/context.xmle
コメント