2011-01-12 12 views
1

Ich weiß, dass Tomcat Classloader verwendet, um Webapps zu partitionieren, und dass der webapp classloader in Tomcat das Standard Classloader-Verhalten überschreibt, so dass es lokal nach Klassen sucht und nur an den übergeordneten Classloader delegiert, wenn er es nicht finden kann.Sind die Kernklassen für jede Webapp in Tomcat 6 unabhängig geladen?

Ich weiß, dass Tomcat sicherstellen wird, dass Klassen innerhalb einer WAR-Datei nur für diese Webanwendung verfügbar sind, da sie von diesem Klassenlader geladen werden.

Worüber ich mir nicht sicher bin ist, wie Tomcat die Kernklassen partitioniert, wenn überhaupt.

Ich weiß, dass Javas Kernklassen vom Bootstrap-Klassenlader geladen werden.

Wenn der webapp classloader jedoch zuerst versucht, die erforderlichen Klassen zu laden, bedeutet dies, dass der webapp classloader die Kernklassen selbst lädt?

Was ich gerne wissen würde ist Sorgt die Classloader-Hierarchie von Tomcat dafür, dass Core-Java-Klassen für jede Webapp separat geladen werden, oder werden sie zwischen Webapps geteilt?

+0

Hier finden Sie nützliche Informationen: http://www.jajakarta.org/tomcat/tomcat3.2-4.0/tomcat-4.0b5/src/catalina/docs/dev/classloaders.html –

+0

@Harry that doc ist für eine sehr alte Version von Tomcat. Das entsprechende Dokument für Tomcat 6 finden Sie hier http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html * Hinweis: * Ich habe nicht überprüft, ob es Unterschiede gibt, Die beiden Dokumente können also identisch sein, aber es ist wahrscheinlich besser, aktuelle Dokumente zu betrachten. – Qwerky

+0

Danke Qwerky, ich habe das gesehen, aber ich habe versucht, etwas zu finden, das meine Frage explizit angeht – chrisbunney

Antwort

1

Wenn Sie sich bei Core-Class-Dateien auf die installierte JRE beziehen, teilt Tomcat diese mit allen Webapps.

Der separate Klassenladevorgang gilt nur für die JAR-Dateien, die in jedem webapp-lib-Verzeichnis abgelegt sind.

Sogar die JAR-Dateien, die unter tomcat lib-Verzeichnis abgelegt sind, werden von allen Anwendungen gemeinsam genutzt.