Tomcatのクラスローダー


1-Tomcatのクラスローダーの構造
Tomcat Serverは起動時にモジュールのクラスがプライベートであることを保証するために、クラスリーダーツリーを構築します。
Tomcat ServerのClass Loader構造は以下の通りです。
その中:
-Bootstrap-JVMが持参するクラスとJAVA_HOME/jre/lib/ext/*.jar
-System-ロード$CLASSPATH/*.クラス
-Common-ロード$CATALINA_HOME/common/…TOMCATとすべてのWEBアプリが見られます。
-Catalina-ロード$CATALINA_HOME/server/…これらはTOMCATにしか見えません。すべてのWEBアプリには見えません。
-Shared-ロード$CATALINA_HOME/shared/…はすべてのWEBアプリにしか見えません。TOMCATには見えません。
-WebApp?-ロードContect Base?/WEB-INF/…は、このWEBアプリだけで見られます。
        +-----------------------------+
        |         Bootstrap           |
        |             |               |
        |          System             |
        |             |               |
        |          Common             |
        |         /      \            |
        |     Catalina  Shared        |
        |               /    \        |
        |          WebApp1  WebApp2   |
        +-----------------------------+
 
 
2-Class Loaderの仕事原理
各運行中のスレッドにはメンバーcontext Class Loaderがあり、実行時に他のクラスを動的にロードするために使用されます。
システムのデフォルトのcontext Class Loaderはsystem Class Loaderです。だから、javaプログラムは実行時にJVMが持っているクラス、JAVA_を使うことができます。HOME/jre/lib/ext/のクラスとCLASSPATH/のクラス
Thread.current Thread().set Contact Class Loader(…)を使用できます。現在のスレッドのcontext Class Loaderを変更して、ロードクラスの挙動を変更します。
 
Class Loaderは木の形に組織されています。一般的な仕事原理は:
1)スレッドはあるクラスを使用する必要がありますので、context Class Loaderはこのクラスをロードするように要求されます。
2)context Class Loaderは父Class Loaderにこのロード要求を完成するように要求します。
3)親クラスリーダーがクラスに入れないと、context Class Loaderは自分でロードしようとします。
 
注意:WebApp?Class Loaderの仕事原理は上記と少し違っています。
まず自分でクラスをロードしようとします。(ContectBase?/WEB-INF/にクラスをロードします。)もし読み込めなかったら、父のクラスLoaderに完成をお願いします。
 
これによって得られる:
-WEB APPスレッドに対して、そのcontext Class LoaderはWebApple?クラスリーダーです。
-Tomcat Serverスレッドに対して、そのcontext Class LoaderはCatalina Class Loaderです。
 
3-一部の原コード分析
3.1-org/apache/catalina/startup/Bootstrap.java
Tomcat Serverスレッドの起点
Class Loaderツリーを構築し、Tomcat Serverスレッドのcontext Class Loaderをcatalinaloaderとする。
いくつかの種類をロードして、org.apache.cantalina.startup.cantalina類に移動します。
 
[表示コード]
3.2-org/apache/catalina/startup/Class Loader Factory.java
設定に従って作成してStandard Class Loaderの例に戻ります。
[表示コード]
3.3-org/apache/catalina/loader/Standard Class Loader.java
クラスローダー
3.4-org/apache/catalina/startup/SecurityClass Load.java
このクラスは一つの静的な方法のみを含み、catalina Loaderのためにいくつかのクラスをロードするために使用される。
[表示コード]
Apppendix-参照
[1]http://jakarta.apache.org/tomcat/のTomcat 4.1.xドキュメントClass Loader HOW-TO
もっと知ってください。他の人の甲の技術交流をお願いします。http://www.walkerjava.com
ご加入をお待ちしております