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アプリだけで見られます。
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
ご加入をお待ちしております
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
ご加入をお待ちしております