craigmcc 01/03/26 17:54:20
Modified: catalina/docs/dev classloaders.html
catalina/src/share/org/apache/catalina/startup
Bootstrap.java
Log:
Rearrange the order in which repositories are added to each of the
standard class loader so that the "classes" directory always overrides the
corresponding "lib/*.jar" repositories.
Revision Changes Path
1.6 +25 -23 jakarta-tomcat-4.0/catalina/docs/dev/classloaders.html
Index: classloaders.html
===================================================================
RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/docs/dev/classloaders.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- classloaders.html 2001/02/23 02:32:20 1.5
+++ classloaders.html 2001/03/27 01:54:19 1.6
@@ -79,29 +79,31 @@
(if present on your system).</li>
</ul>
<li><strong>Common</strong> - This class loader is initialized to include all
- JAR files in the <code>$CATALINA_HOME/common/lib</code> directory and
- the <code>$CATALINA_HOME/common/classes</code> directory if it exists.
+ unpacked classes in the <code>$CATALINA_HOME/common/classes</code>
+ directory (if it exists), and all JAR files in the
+ <code>$CATALINA_HOME/common/lib</code> directory (if it exists). The
+ latter group normally includes the following:
<ul>
- <li><code>$CATALINA_HOME/common/lib/servlet.jar</code> - The servlet and
- JSP API classes.</li>
- <li><code>$CATALIA_HOME/common/lib/naming.jar</code> - The JNDI
- implementation used by Tomcat 4, added only if you are running
- in a JDK 1.2 environment (the JNDI classes are included in JDK
- 1.3 or later).</li>
- </ul>
-<li><strong>Catalina</strong> - This class loader is initialized to include
- all JAR files in the <code>$CATALINA_HOME/server</code> directory, which
- should contain Catalina itself (i.e. all classes whose fully qualified
- names begin with <code>org.apache.catalina.</code>), and any JAR files
- that it depends on and the <code>$CATALINA_HOME/server/classes</code>
- directory if it exists. Because these classes are loaded from a separate
- class loader, which is not visible to the <strong>Webapp</strong> class
- loader, they are <em>not</em> visible to web applications.</li>
-<li><strong>Shared</strong> - This class loader is initialized to include
- all JAR files in the <code>$CATALINA_HOME/lib</code> directory and the
- <code>$CATALINA_HOME/classes</code> directory if it exists. All of
- the classes in these repositories will be visible to all web applications,
- so they may be used to share information between web apps
+ <li><code>jndi.jar</code> - The Java Naming and Directory Service API
+ classes (loaded <strong>only</strong> if not already included in
+ the JDK, as they are with JDK 1.3).</li>
+ <li><code>naming.jar</code> - The JNDI implementation used by
+ Tomcat 4 itself.</li>
+ <li><code>servlet.jar</code> - The servlet and JSP API classes.</li>
+ </ul></li>
+<li><strong>Catalina</strong> - This class loader is initialized to include all
+ unpacked classes in the <code>$CATALINA_HOME/server/classes</code>
+ directory (if it exists), and all JAR files in the
+ <code>$CATALINA_HOME/server/lib</code> directory (if it exists). Because
+ these classes are loaded from a separate class loader, which is not visible
+ to the <strong>Webapp</strong> class loader, they are <em>not</em> visible
+ to web applications.</li>
+<li><strong>Shared</strong> - This class loader is initialized to include all
+ unpacked classes in the <code>$CATALINA_HOME/classes</code> directory
+ (if it exists), and all JAR files in the <code>$CATALINA_HOME/lib</code>
+ directory (if it exists). All of the classes in these repositories will
+ be visible to all web applications, so they may be used to share
+ information between web apps.
(<strong>NOTE</strong> - this behavior is specific to Tomcat 4.0, and
will not necessarily be portable to other containers.)</li>
<li><strong>WebappX</strong> - A class loader is created for each web
@@ -249,7 +251,7 @@
<br>
<div align="center"><hr width="75%"><font size="2">
-$Id: classloaders.html,v 1.5 2001/02/23 02:32:20 glenn Exp $
+$Id: classloaders.html,v 1.6 2001/03/27 01:54:19 craigmcc Exp $
</font></div>
</body>
1.14 +64 -58
jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java
Index: Bootstrap.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- Bootstrap.java 2001/03/06 01:42:55 1.13
+++ Bootstrap.java 2001/03/27 01:54:20 1.14
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java,v
1.13 2001/03/06 01:42:55 glenn Exp $
- * $Revision: 1.13 $
- * $Date: 2001/03/06 01:42:55 $
+ * $Header:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java,v
1.14 2001/03/27 01:54:20 craigmcc Exp $
+ * $Revision: 1.14 $
+ * $Date: 2001/03/27 01:54:20 $
*
* ====================================================================
*
@@ -85,7 +85,7 @@
* class path and therefore not visible to application level classes.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.13 $ $Date: 2001/03/06 01:42:55 $
+ * @version $Revision: 1.14 $ $Date: 2001/03/27 01:54:20 $
*/
public final class Bootstrap {
@@ -207,6 +207,26 @@
// Construct the "class path" for this class loader
ArrayList list = new ArrayList();
+ // Add the "common/classes" directory if it exists
+ File classes = new File(System.getProperty("catalina.home"),
+ "common/classes");
+ if (classes.exists() && classes.canRead() &&
+ classes.isDirectory()) {
+ try {
+ URL url = new URL("file", null,
+ classes.getCanonicalPath() + "/");
+ if (debug >= 1)
+ log(" Adding " + url.toString());
+ list.add(url.toString());
+ } catch (IOException e) {
+ System.out.println("Cannot create URL for " +
+ classes.getAbsolutePath());
+ e.printStackTrace(System.out);
+ System.exit(1);
+ }
+ }
+
+ // Add all JAR files in the "common/lib" directory if it exists
File directory = new File(System.getProperty("catalina.home"),
"common/lib");
if (!directory.exists() || !directory.canRead() ||
@@ -236,24 +256,6 @@
}
}
- File classes = new File(System.getProperty("catalina.home"),
- "common/classes");
- if (classes.exists() && classes.canRead() &&
- classes.isDirectory()) {
- try {
- URL url = new URL("file", null,
- classes.getCanonicalPath() + "/");
- if (debug >= 1)
- log(" Adding " + url.toString());
- list.add(url.toString());
- } catch (IOException e) {
- System.out.println("Cannot create URL for " +
- classes.getAbsolutePath());
- e.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
// Construct the class loader itself
String array[] = (String[]) list.toArray(new String[list.size()]);
StandardClassLoader loader = new StandardClassLoader(array);
@@ -275,6 +277,26 @@
// Construct the "class path" for this class loader
ArrayList list = new ArrayList();
+ // Add the "server/classes" directory if it exists
+ File classes = new File(System.getProperty("catalina.home"),
+ "server/classes");
+ if (classes.exists() && classes.canRead() &&
+ classes.isDirectory()) {
+ try {
+ URL url = new URL("file", null,
+ classes.getCanonicalPath() + "/");
+ if (debug >= 1)
+ log(" Adding " + url.toString());
+ list.add(url.toString());
+ } catch (IOException e) {
+ System.out.println("Cannot create URL for " +
+ classes.getAbsolutePath());
+ e.printStackTrace(System.out);
+ System.exit(1);
+ }
+ }
+
+ // Add all JAR files in the "server/lib" directory if it exists
File directory = new File(System.getProperty("catalina.home"),
"server/lib");
if (!directory.exists() || !directory.canRead() ||
@@ -301,24 +323,6 @@
}
}
- File classes = new File(System.getProperty("catalina.home"),
- "server/classes");
- if (classes.exists() && classes.canRead() &&
- classes.isDirectory()) {
- try {
- URL url = new URL("file", null,
- classes.getCanonicalPath() + "/");
- if (debug >= 1)
- log(" Adding " + url.toString());
- list.add(url.toString());
- } catch (IOException e) {
- System.out.println("Cannot create URL for " +
- classes.getAbsolutePath());
- e.printStackTrace(System.out);
- System.exit(1);
- }
- }
-
// Construct the class loader itself
String array[] = (String[]) list.toArray(new String[list.size()]);
StandardClassLoader loader = new StandardClassLoader(array, parent);
@@ -340,6 +344,26 @@
// Construct the "class path" for this class loader
ArrayList list = new ArrayList();
+ // Add the "classes" directory if it exists
+ File classes = new File(System.getProperty("catalina.home"),
+ "classes");
+ if (classes.exists() && classes.canRead() &&
+ classes.isDirectory()) {
+ try {
+ URL url = new URL("file", null,
+ classes.getCanonicalPath() + "/");
+ if (debug >= 1)
+ log(" Adding " + url.toString());
+ list.add(url.toString());
+ } catch (IOException e) {
+ System.out.println("Cannot create URL for " +
+ classes.getAbsolutePath());
+ e.printStackTrace(System.out);
+ System.exit(1);
+ }
+ }
+
+ // Add all JAR files in the "lib" directory if it exists
File directory = new File(System.getProperty("catalina.home"),
"lib");
if (!directory.exists() || !directory.canRead() ||
@@ -365,24 +389,6 @@
System.exit(1);
}
}
-
- File classes = new File(System.getProperty("catalina.home"),
- "classes");
- if (classes.exists() && classes.canRead() &&
- classes.isDirectory()) {
- try {
- URL url = new URL("file", null,
- classes.getCanonicalPath() + "/");
- if (debug >= 1)
- log(" Adding " + url.toString());
- list.add(url.toString());
- } catch (IOException e) {
- System.out.println("Cannot create URL for " +
- classes.getAbsolutePath());
- e.printStackTrace(System.out);
- System.exit(1);
- }
- }
// Construct the class loader itself
String array[] = (String[]) list.toArray(new String[list.size()]);