craigmcc 01/08/14 12:30:07
Modified: catalina/src/share/org/apache/catalina/startup
Bootstrap.java
Log:
Do not load jndi.jar on a JDK 1.3 or later system, in *any* of the three
class loaders we are creating (because it is built in to the JDK in 1.3).
Previously, we were checking this only for the common classloader.
Submitted by: Rajiv Mordani <[EMAIL PROTECTED]>
Revision Changes Path
1.22 +43 -23
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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Bootstrap.java 2001/07/22 20:25:13 1.21
+++ Bootstrap.java 2001/08/14 19:30:07 1.22
@@ -1,7 +1,7 @@
/*
- * $Header:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java,v
1.21 2001/07/22 20:25:13 pier Exp $
- * $Revision: 1.21 $
- * $Date: 2001/07/22 20:25:13 $
+ * $Header:
/home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup/Bootstrap.java,v
1.22 2001/08/14 19:30:07 craigmcc Exp $
+ * $Revision: 1.22 $
+ * $Date: 2001/08/14 19:30:07 $
*
* ====================================================================
*
@@ -85,7 +85,7 @@
* class path and therefore not visible to application level classes.
*
* @author Craig R. McClanahan
- * @version $Revision: 1.21 $ $Date: 2001/07/22 20:25:13 $
+ * @version $Revision: 1.22 $ $Date: 2001/08/14 19:30:07 $
*/
public final class Bootstrap {
@@ -116,10 +116,20 @@
debug = 1;
}
+ // Check to see if JNDI is already present in the system classpath
+ boolean loadJNDI = true;
+ try {
+ Class.forName("javax.naming.Context");
+ loadJNDI = false;
+ } catch (ClassNotFoundException e) {
+ }
+
// Construct the class loaders we will need
- ClassLoader commonLoader = createCommonLoader();
- ClassLoader catalinaLoader = createCatalinaLoader(commonLoader);
- ClassLoader sharedLoader = createSharedLoader(commonLoader);
+ ClassLoader commonLoader = createCommonLoader(loadJNDI);
+ ClassLoader catalinaLoader =
+ createCatalinaLoader(commonLoader, loadJNDI);
+ ClassLoader sharedLoader =
+ createSharedLoader(commonLoader, loadJNDI);
Thread.currentThread().setContextClassLoader(catalinaLoader);
@@ -215,20 +225,14 @@
/**
* Construct and return the class loader to be used for loading
* of the shared system classes.
+ *
+ * @param loadJNDI Should we load JNDI classes if present?
*/
- private static ClassLoader createCommonLoader() {
+ private static ClassLoader createCommonLoader(boolean loadJNDI) {
if (debug >= 1)
log("Creating COMMON class loader");
- // Check to see if JNDI is already present in the system classpath
- boolean loadJNDI = true;
- try {
- Class.forName("javax.naming.Context");
- loadJNDI = false;
- } catch (ClassNotFoundException e) {
- }
-
// Construct the "class path" for this class loader
ArrayList list = new ArrayList();
@@ -263,9 +267,11 @@
String filenames[] = directory.list();
for (int i = 0; i < filenames.length; i++) {
String filename = filenames[i].toLowerCase();
- if ((!filename.endsWith(".jar")) ||
- (filename.indexOf("bootstrap.jar") != -1) ||
- ((!loadJNDI) && (filename.indexOf("jndi.jar") != -1)))
+ if (!filename.endsWith(".jar"))
+ continue;
+ if ((!loadJNDI) && filename.equals("jndi.jar"))
+ continue;
+ if (filename.equals("bootstrap.jar"))
continue;
File file = new File(directory, filenames[i]);
try {
@@ -293,8 +299,12 @@
/**
* Construct and return the class loader to be used for loading
* Catalina internal classes.
+ *
+ * @param parent Parent class loader to be assigned
+ * @param loadJNDI Should we load JNDI classes if present?
*/
- private static ClassLoader createCatalinaLoader(ClassLoader parent) {
+ private static ClassLoader createCatalinaLoader(ClassLoader parent,
+ boolean loadJNDI) {
if (debug >= 1)
log("Creating CATALINA class loader");
@@ -332,7 +342,10 @@
}
String filenames[] = directory.list();
for (int i = 0; i < filenames.length; i++) {
- if (!filenames[i].toLowerCase().endsWith(".jar"))
+ String filename = filenames[i].toLowerCase();
+ if (!filename.endsWith(".jar"))
+ continue;
+ if ((!loadJNDI) && filename.equals("jndi.jar"))
continue;
File file = new File(directory, filenames[i]);
try {
@@ -360,8 +373,12 @@
/**
* Construct and return the class loader to be used for shared
* extensions by web applications loaded with Catalina.
+ *
+ * @param parent Parent class loader to be assigned
+ * @param loadJNDI Should we load JNDI classes if present?
*/
- private static ClassLoader createSharedLoader(ClassLoader parent) {
+ private static ClassLoader createSharedLoader(ClassLoader parent,
+ boolean loadJNDI) {
if (debug >= 1)
log("Creating SHARED class loader");
@@ -399,7 +416,10 @@
}
String filenames[] = directory.list();
for (int i = 0; i < filenames.length; i++) {
- if (!filenames[i].toLowerCase().endsWith(".jar"))
+ String filename = filenames[i].toLowerCase();
+ if (!filename.endsWith(".jar"))
+ continue;
+ if ((!loadJNDI) && filename.equals("jndi.jar"))
continue;
File file = new File(directory, filenames[i]);
try {