Tocmat 5アプリケーションのデプロイ

Since: Nov./13th/2005

Tomcat はアプリケーションサーバ(Web コンテナ)です。アプリケーションは、WAR (Web Archive) という単位で作成して、Tomcat に導入します。この導入は、一般に配備(デプロイ)と呼ばれています。Tomcat では、バッチタイプのデプロイツール (TCD - Tomcat Client Deployer) が追加提供されていますが、ここでは手で導入してみます。

WAR の構造

Tomcat にデプロイするアプリケーションは、任意の場所に置くことができます。この場所は、そのアプリケーションのドキュメント・ルートと呼ばれます。アプリケーションは WAR と呼ばれる形式のディレクトリ階層を持ちます。

{ドキュメントルート}
   |
   +--*.html, *.jsp, etc.
   |
   +--./WEB-INF/web.xml   
   |
   +--./WEB-INF/classes/  
   |
   +--./WEB-INF/lib/      
*.html, *.jsp, etc.
ブラウザから見えるリソース。HTML, JSP, JavaScript など。サブディレクトリ階層に分割可能。
./WEB-INF/web.xml
Web Application Deployment Descriptor. 配備記述子(デプロイメント記述子)の一つ。
./WEB-INF/classes/
WEB-INF/lib/ 配下の JAR に含まれないクラスファイル。パッケージを用いている場合は、このパスをルートとしてサブディレクトリを切る。
./WEB-INF/lib/
JAR ファイル。サードベンダーのパッケージや JDBC などが典型的。WEB-INF/classes/ のほうが優先的。

ここにコピーしたクラスや JAR は、当該アプリケーションからはパスが通っているように見えます。追加で CLASSPATH に追加したりする必要はありません。

共通ユーティリティの配備

WAR の WEB-INF/classes/, WEB-INF/lib/ 配下のものは、当該 WAR 以外からは見えません。複数の WAR からみえるようにしたい場合は、次のいずれかにコピーします。

${CATALINA_HOME}
    |
    +--./common/lib/
    |
    +--./shared/lib/
$CATALINA_HOME/common/lib
全ての WAR および Tomcat から可視的。JDBC などが典型的。
$CATALINA_HOME/shared/lib
全ての WAR から可視的。Tomcat からは見えない。業務的な共通ユーティリティが典型的。

これらはクラスローダーの探索順序/スコープにしたがって分けられています。クラス探索の順序は次のようになります。

  1. ブートストラップ・クラスローダー
  2. システム・クラスローダー
  3. 各 WAR の ./WEB-INF/classes
  4. 各 WAR の ./WEB-INF/lib/*.jar
  5. ${CATALINA_HOME}/common/classes
  6. ${CATALINA_HOME}/common/endorsed/*.jar
  7. ${CATALINA_HOME}/common/i18n/*.jar
  8. ${CATALINA_HOME}/common/lib/*.jar
  9. ${CATALINA_BASE}/shared/classes
  10. ${CATALINA_BASE}/shared/lib/*.jar

Tomcat が前提としているクラスローダー階層:

      Bootstrap	<-- コアパッケージ、拡張機能機構
          |
       System	<-- CLASSPATH配下
          |
       Common	<-- JSP, Servlet, JNDIなど
      /      \
 Catalina   Shared	<-- 共通ユーティリティ
             /   \
        Webapp1  Webapp2 ...	<-- WAR 毎の探索経路


Copyright © 2005 SUGAI, Manabu. All Rights Reserved.
SEO [PR] !uO z[y[WJ Cu