For those that may be interested...

I was unclear as to how Tomcat was resolving class
loading and the visibility of classes to a context's
classloader so I created a simlpe test suite.
The test results are attached.

Rob Shaw
Servidium Inc.

Title: Tomcat Test Results

Class Loading Tests

Setup:

  • A servlet was created that tries to load a class in Package A and a class in Package B via Class.forName().
  • If either class was found, the class was instantiated via newInstance().
  • Within the constructor of the class in Package A, an attempt to load a class in Package B is made via Class.forName().
  • Within the constructor of the class in Package B, an attempt to load a class in Package A is made via Class.forName().

Test Scenarios

Results
# Servlet in webapp's classes directory Servlet in system classpath

Package A in webapp's classes or lib directory

Package A in system classpath Package B in webapp's classes or lib directory Package B in system classpath Servlet loaded Package A found Package A able to load package B Package B found Package B able to load package A
1
X
.
X
.
X
.
Yes
Yes
Yes
Yes
Yes
2
X
.
X
.
.
X
Yes
Yes
Yes
Yes
No
3
X
.
.
X
X
.
Yes
Yes
No
Yes
Yes
4
X
.
.
X
.
X
Yes
Yes
Yes
Yes
Yes
5
.
X
X
.
X
.
Yes
No
N/A
No
N/A
6
.
X
X
.
.
X
Yes
No
N/A
Yes
No
7
.
X
.
X
X
.
Yes
Yes
No
No
N/A
8
.
X
.
X
.
X
Yes
Yes
Yes
Yes
Yes

Conclusions:

  • Only scenarios 1, 4, and 8 produced no errors.
  • Scenario 1 says treat an application as an independent unit and place everything that it needs in it's webapps classes or lib directory.
  • Scenario 4 says place only the servlet in the webapps classes directory and have the rest of the supporting classes and JARs outside accessible via the system classpath.
  • Scenario 8 says place everything in a location that is accessible via the system classpath.

 

Reply via email to