Archive for 6月, 2009

6月 14th, 2009

Tomcatクラスローダと優先順位

Posted in Tomcat by admin
    クラスロード順
      Bootstrap
          |
       System
          |
       Common
       |     |
  Webapp1   Webapp2 ...

Tomcatのドキュメントには? 記のようなクラスローダの読み込み優先順位が示されています。ここで注? しなければならないのは、ロードする順とアプリケーションがクラスファイルを優先利用する順は異なるということです。まず「Bootstrap classes of your JVM」「System class loader classses」ぜ JavaやTomcatのメタクラスなので? からロードされるクラスで? 書き出来ません(これを回避する「-Djava.endorsed.dirs」オプションも存在する)。しかし、個々のアプリケーション内でのみ利用可能な「WEB-INF」配下のクラスは、$CATALINA_HOME/$CATALINA_BASE配下のクラスよりも優先して、自身のローダを圏 照するようになっています。

Tomcat6.0.x
	↓ Bootstrap classes of your JVM ($JAVA_HOME, $JAVA_HOME/jre/lib/ext)
	↓ System class loader classses
		 (CLASSPATH定義ディレクトボ  $CATALINA_HOME/bin/bootstrap.jar,
		$CATALINA_HOME/bin/tomcat-juli.jar)
	↓ /WEB-INF/classes
	↓ /WEB-INF/lib/*.jar
	↓ $CATALINA_HOME/lib
	↓ $CATALINA_HOME/lib/*.jar
Tomcat5.5.x
	↓ Bootstrap classes of your JVM ($JAVA_HOME, $JAVA_HOME/jre/lib/ext)
	↓ System class loader classes
		(CLASSPATH定義ディレクトボ  $CATALINA_HOME/bin/bootstrap.jar,
		$JAVA_HOME/lib/tools.jar, $CATALINA_HOME/bin/commons-logging-api-x.y.z.jar,
		$CATALINA_HOME/bin/commons-daemon.jar )
	↓ /WEB-INF/classes
	↓ /WEB-INF/lib/*.jar
	↓ $CATALINA_HOME/common/classes
	↓ $CATALINA_HOME/common/endorsed/*.jar
	↓ $CATALINA_HOME/common/i18n/*.jar
	↓ $CATALINA_HOME/common/lib/*.jar
	↓ $CATALINA_BASE/shared/classes
	↓ $CATALINA_BASE/shared/lib/*.jar
Tomcat4.1.x
	↓ /WEB-INF/classes
	↓ /WEB-INF/lib/*.jar
	↓ Bootstrap classes of your JVM ($JAVA_HOME, $JAVA_HOME/jre/lib/ext)
	↓ System class loader classses
		(CLASSPATH定義ディレクトボ  $CATALINA_HOME/bin/bootstrap.jar,
		$JAVA_HOME/lib/tools.jar)
	↓ $CATALINA_HOME/common/classes
	↓ $CATALINA_HOME/common/endorsed/*.jar
	↓ $CATALINA_HOME/common/lib/*.jar
	↓ $CATALINA_BASE/shared/classes
	↓ $CATALINA_BASE/shared/lib/*.jar

http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html
http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html
http://tomcat.apache.org/tomcat-4.1-doc/class-loader-howto.html

“ Tomcat4.1では、callする側ぜ callされる側ぜ jarファイルを同一ディレクトリに置かなければ正しぜ ロードされないようです。例えば、JDBCドライバ”ojdbc14.jar”はコネクションプーリングライブラボ “commons-dbcp-1.2.2.jar”と同一のディレクトリに置かなければならない。或いは、ログ出力ライブラボ “log4j.jar”ぜ “commons-logging”の? み合゜ せ等も同様で、”log4j.properties”、”log4j.xml”設? ファイルだけは、「Dlog4j.configuration=file://(FilePath)」オプションを使用することでインスタンス? のファイルを指定することが可能となる。

log4jの件はやっかいでバ゜ (44908)にもなりかけています。
傍目にぜ web.xml上ぜ “session-timeout”付近ぜ XMLパースエラーのようにログ出力されるので、? 因を追圏 するのが? 介になっている気がします。

Parse error in default web.xml
org.apache.commons.logging.LogConfigurationException: User-specified log class
'org.apache.commons.logging.impl.Log4JLogger' cannot be found or is not
useable.
        at
org.apache.commons.digester.Digester.createSAXException(Digester.java:3181)
        at
org.apache.commons.digester.Digester.createSAXException(Digester.java:3207)
        at org.apache.commons.digester.Digester.endElement(Digester.java:1225)
・・ボ