You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/11/05 01:04:26 UTC

svn commit: r1538831 - in /tomcat/trunk: java/org/apache/catalina/loader/WebappClassLoader.java java/org/apache/catalina/loader/WebappLoader.java test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java

Author: markt
Date: Tue Nov  5 00:04:26 2013
New Revision: 1538831

URL: http://svn.apache.org/r1538831
Log:
Remove unused fields and methods as a result of refactoring JAR handling
in the web application class loader

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
    tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?rev=1538831&r1=1538830&r2=1538831&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Tue Nov  5 00:04:26 2013
@@ -58,7 +58,6 @@ import java.util.concurrent.ThreadPoolEx
 import java.util.jar.Attributes;
 import java.util.jar.Attributes.Name;
 import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
 import java.util.jar.Manifest;
 
 import org.apache.catalina.Globals;
@@ -292,26 +291,6 @@ public class WebappClassLoader extends U
 
 
     /**
-     * The list of JARs, in the order they should be searched
-     * for locally loaded classes or resources.
-     */
-    protected File[] jarRealFiles = new File[0];
-
-
-    /**
-     * The path which will be monitored for added Jar files.
-     */
-    protected String jarPath = null;
-
-
-    /**
-     * The list of JARs, in the order they should be searched
-     * for locally loaded classes or resources.
-     */
-    protected String[] jarNames = new String[0];
-
-
-    /**
      * The list of JARs last modified dates, in the order they should be
      * searched for locally loaded classes or resources.
      */
@@ -541,22 +520,6 @@ public class WebappClassLoader extends U
     }
 
 
-    /**
-     * Return the JAR path.
-     */
-    public String getJarPath() {
-        return this.jarPath;
-    }
-
-
-    /**
-     * Change the Jar path.
-     */
-    public void setJarPath(String jarPath) {
-        this.jarPath = jarPath;
-    }
-
-
      /**
       * Utility method for use in subclasses.
       * Must be called before Lifecycle methods to have any effect.
@@ -737,7 +700,6 @@ public class WebappClassLoader extends U
 
         loader.resources = this.resources;
         loader.delegate = this.delegate;
-        loader.jarPath = this.jarPath;
         loader.started = this.started;
         loader.needConvert = this.needConvert;
         loader.clearReferencesStatic = this.clearReferencesStatic;
@@ -746,9 +708,6 @@ public class WebappClassLoader extends U
         loader.clearReferencesLogFactoryRelease = this.clearReferencesLogFactoryRelease;
         loader.clearReferencesHttpClientKeepAliveThread = this.clearReferencesHttpClientKeepAliveThread;
 
-        loader.jarRealFiles = this.jarRealFiles.clone();
-        loader.jarNames = this.jarNames.clone();
-        loader.lastModifiedDates = this.lastModifiedDates.clone();
         loader.paths = this.paths.clone();
 
         loader.permissionList.addAll(this.permissionList);
@@ -758,64 +717,6 @@ public class WebappClassLoader extends U
 
     }
 
-    synchronized void addJar(String jar, JarFile jarFile, File file)
-        throws IOException {
-
-        if (jar == null)
-            return;
-        if (jarFile == null)
-            return;
-        if (file == null)
-            return;
-
-        if (log.isDebugEnabled())
-            log.debug("addJar(" + jar + ")");
-
-        int i;
-
-        if ((jarPath != null) && (jar.startsWith(jarPath))) {
-
-            String jarName = jar.substring(jarPath.length());
-            while (jarName.startsWith("/"))
-                jarName = jarName.substring(1);
-
-            String[] result = new String[jarNames.length + 1];
-            for (i = 0; i < jarNames.length; i++) {
-                result[i] = jarNames[i];
-            }
-            result[jarNames.length] = jarName;
-            jarNames = result;
-
-        }
-
-        // Register the JAR for tracking
-
-        long lastModified = resources.getResource(jar).getLastModified();
-
-        String[] result = new String[paths.length + 1];
-        for (i = 0; i < paths.length; i++) {
-            result[i] = paths[i];
-        }
-        result[paths.length] = jar;
-        paths = result;
-
-        long[] result3 = new long[lastModifiedDates.length + 1];
-        for (i = 0; i < lastModifiedDates.length; i++) {
-            result3[i] = lastModifiedDates[i];
-        }
-        result3[lastModifiedDates.length] = lastModified;
-        lastModifiedDates = result3;
-
-        // Add the file to the list
-        File[] result4 = new File[jarRealFiles.length + 1];
-        for (i = 0; i < jarRealFiles.length; i++) {
-            result4[i] = jarRealFiles[i];
-        }
-        result4[jarRealFiles.length] = file;
-        jarRealFiles = result4;
-    }
-
-
     /**
      * Have one or more classes or resources been modified so that a reload
      * is appropriate?
@@ -1561,9 +1462,6 @@ public class WebappClassLoader extends U
         resourceEntries.clear();
         jarModificationTimes.clear();
         resources = null;
-        jarRealFiles = null;
-        jarPath = null;
-        jarNames = null;
         lastModifiedDates = null;
         paths = null;
         parent = null;

Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1538831&r1=1538830&r2=1538831&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Tue Nov  5 00:04:26 2013
@@ -20,10 +20,8 @@ import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyChangeSupport;
 import java.io.File;
-import java.io.FileOutputStream;
 import java.io.FilePermission;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
@@ -31,7 +29,6 @@ import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLDecoder;
-import java.util.jar.JarFile;
 
 import javax.management.ObjectName;
 import javax.servlet.ServletContext;
@@ -42,8 +39,6 @@ import org.apache.catalina.Lifecycle;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.LifecycleState;
 import org.apache.catalina.Loader;
-import org.apache.catalina.WebResource;
-import org.apache.catalina.WebResourceRoot;
 import org.apache.catalina.util.LifecycleMBeanBase;
 import org.apache.tomcat.util.ExceptionUtils;
 import org.apache.tomcat.util.modeler.Registry;
@@ -52,7 +47,8 @@ import org.apache.tomcat.util.res.String
 /**
  * Classloader implementation which is specialized for handling web
  * applications in the most efficient way, while being Catalina aware (all
- * accesses to resources are made through {@link WebResourceRoot}).
+ * accesses to resources are made through
+ * {@link org.apache.catalina.WebResourceRoot}).
  * This class loader supports detection of modified
  * Java classes, which can be used to implement auto-reload support.
  * <p>
@@ -399,7 +395,6 @@ public class WebappLoader extends Lifecy
             classLoader.setDelegate(this.delegate);
 
             // Configure our repositories
-            setRepositories();
             setClassPath();
 
             setPermissions();
@@ -611,105 +606,6 @@ public class WebappLoader extends Lifecy
 
 
     /**
-     * Configure the repositories for our class loader, based on the
-     * associated Context.
-     * @throws IOException
-     */
-    private void setRepositories() throws IOException {
-
-        if (context == null)
-            return;
-        ServletContext servletContext = context.getServletContext();
-        if (servletContext == null)
-            return;
-
-        // Loading the work directory
-        File workDir =
-            (File) servletContext.getAttribute(ServletContext.TEMPDIR);
-        if (workDir == null) {
-            log.info("No work dir for " + servletContext);
-        }
-
-        if( log.isDebugEnabled() && workDir != null)
-            log.debug(sm.getString("webappLoader.deploy", workDir.getAbsolutePath()));
-
-        WebResourceRoot resources = context.getResources();
-
-        // Setting up the JAR repository (/WEB-INF/lib), if it exists
-        // TODO Simplify this in a similar manner to WEB-INF/classes
-
-        String libPath = "/WEB-INF/lib";
-
-        classLoader.setJarPath(libPath);
-
-        WebResource libDir = resources.getResource(libPath);
-
-        if (libDir.isDirectory()) {
-
-            boolean copyJars = false;
-            String absoluteLibPath = libDir.getCanonicalPath();
-
-            File destDir = null;
-
-            if (absoluteLibPath != null) {
-                destDir = new File(absoluteLibPath);
-            } else {
-                copyJars = true;
-                destDir = new File(workDir, libPath);
-                if (!destDir.mkdirs() && !destDir.isDirectory()) {
-                    throw new IOException(
-                            sm.getString("webappLoader.mkdirFailure"));
-                }
-            }
-
-            WebResource[] jars = resources.listResources(libPath);
-            for (WebResource jar : jars) {
-
-                String jarName = jar.getName();
-
-                if (!jarName.endsWith(".jar"))
-                    continue;
-
-                String filename = libPath + "/" + jarName;
-
-                // Copy JAR in the work directory, always (the JAR file
-                // would get locked otherwise, which would make it
-                // impossible to update it or remove it at runtime)
-                File destFile = new File(destDir, jarName);
-
-                if (log.isDebugEnabled()) {
-                    log.debug(sm.getString("webappLoader.jarDeploy", filename,
-                            destFile.getAbsolutePath()));
-                }
-
-                // Bug 45403 - Check that the resource is readable
-                if (!jar.canRead()) {
-                    IOException ioe = new IOException(sm.getString(
-                            "webappLoader.readFailure", filename));
-                    throw ioe;
-                }
-
-                if (copyJars) {
-                    if (!copy(jar.getInputStream(),destFile)) {
-                        throw new IOException(
-                                sm.getString("webappLoader.copyFailure"));
-                    }
-                }
-
-                try {
-                    JarFile jarFile = new JarFile(destFile);
-                    classLoader.addJar(filename, jarFile, destFile);
-                } catch (Exception ex) {
-                    // Catch the exception if there is an empty jar file
-                    // Should ignore and continue loading other jar files
-                    // in the dir
-                }
-            }
-        }
-    }
-
-
-    /**
      * Set the appropriate context attribute for our class path.  This
      * is required only because Jasper depends on it.
      */
@@ -747,11 +643,10 @@ public class WebappLoader extends Lifecy
             }
         }
 
-        this.classpath=classpath.toString();
+        this.classpath = classpath.toString();
 
         // Store the assembled class path as a servlet context attribute
-        servletContext.setAttribute(Globals.CLASS_PATH_ATTR,
-                                    classpath.toString());
+        servletContext.setAttribute(Globals.CLASS_PATH_ATTR, this.classpath);
     }
 
 
@@ -824,34 +719,6 @@ public class WebappLoader extends Lifecy
     }
 
 
-    /**
-     * Copy a file to the specified temp directory. This is required only
-     * because Jasper depends on it.
-     */
-    private boolean copy(InputStream is, File file) {
-
-        try (FileOutputStream os = new FileOutputStream(file)){
-            byte[] buf = new byte[4096];
-            while (true) {
-                int len = is.read(buf);
-                if (len < 0)
-                    break;
-                os.write(buf, 0, len);
-            }
-        } catch (IOException e) {
-            return false;
-        } finally {
-            try {
-                is.close();
-            } catch (IOException e) {
-                // Ignore
-            }
-        }
-
-        return true;
-    }
-
-
     private static final org.apache.juli.logging.Log log=
         org.apache.juli.logging.LogFactory.getLog( WebappLoader.class );
 

Modified: tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java?rev=1538831&r1=1538830&r2=1538831&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java (original)
+++ tomcat/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java Tue Nov  5 00:04:26 2013
@@ -278,8 +278,6 @@ public class TestWebappClassLoaderWeavin
         assertEquals("getDelegate did not match.",
                 Boolean.valueOf(this.loader.getDelegate()),
                 Boolean.valueOf(copiedLoader.getDelegate()));
-        assertEquals("getJarPath did not match.", this.loader.getJarPath(),
-                copiedLoader.getJarPath());
         assertEquals("getURLs did not match.", this.loader.getURLs().length,
                 copiedLoader.getURLs().length);
         assertSame("getParent did not match.", this.loader.getParent(), copiedLoader.getParent());



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org