Tomcat備忘録

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

コメント

タイトルとURLをコピーしました