You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by cr...@apache.org on 2001/08/14 21:30:07 UTC

cvs commit: jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/startup Bootstrap.java

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 <Ra...@sun.com>
  
  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 {