Copied: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java 
(from r1701767, 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java)
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java?p2=tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java&p1=tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java&r1=1701767&r2=1701793&rev=1701793&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoader.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappClassLoaderBase.java 
Tue Sep  8 12:49:24 2015
@@ -131,11 +131,11 @@ import org.apache.tomcat.util.res.String
  * @author Remy Maucherat
  * @author Craig R. McClanahan
  */
-public class WebappClassLoader extends URLClassLoader
+public abstract class WebappClassLoaderBase extends URLClassLoader
         implements Lifecycle, InstrumentableClassLoader {
 
-    private static final org.apache.juli.logging.Log log=
-        org.apache.juli.logging.LogFactory.getLog( WebappClassLoader.class );
+    private static final org.apache.juli.logging.Log log =
+            
org.apache.juli.logging.LogFactory.getLog(WebappClassLoaderBase.class);
 
     private static final Charset CHARSET_UTF8 = Charset.forName("UTF-8");
     /**
@@ -239,7 +239,7 @@ public class WebappClassLoader extends U
      * Construct a new ClassLoader with no defined repositories and no
      * parent ClassLoader.
      */
-    public WebappClassLoader() {
+    public WebappClassLoaderBase() {
 
         super(new URL[0]);
 
@@ -274,7 +274,7 @@ public class WebappClassLoader extends U
      *
      * @param parent Our parent class loader
      */
-    public WebappClassLoader(ClassLoader parent) {
+    public WebappClassLoaderBase(ClassLoader parent) {
 
         super(new URL[0], parent);
 
@@ -527,9 +527,9 @@ public class WebappClassLoader extends U
     /**
      * If an HttpClient keep-alive timer thread has been started by this web
      * application and is still running, should Tomcat change the context class
-     * loader from the current {@link WebappClassLoader} to
-     * {@link WebappClassLoader#parent} to prevent a memory leak? Note that the
-     * keep-alive timer thread will stop on its own once the keep-alives all
+     * loader from the current {@link WebappClassLoaderBase} to
+     * {@link WebappClassLoaderBase#parent} to prevent a memory leak? Note that
+     * the keep-alive timer thread will stop on its own once the keep-alives 
all
      * expire however, on a busy system that might not happen for some time.
      */
     private boolean clearReferencesHttpClientKeepAliveThread = true;
@@ -912,62 +912,37 @@ public class WebappClassLoader extends U
 
     }
 
-    /**
-     * Returns a copy of this class loader without any class file
-     * transformers. This is a tool often used by Java Persistence API
-     * providers to inspect entity classes in the absence of any
-     * instrumentation, something that can't be guaranteed within the
-     * context of a {@link ClassFileTransformer}'s
-     * {@link ClassFileTransformer#transform(ClassLoader, String, Class,
-     * ProtectionDomain, byte[]) transform} method.
-     * <p>
-     * The returned class loader's resource cache will have been cleared
-     * so that classes already instrumented will not be retained or
-     * returned.
-     *
-     * @return the transformer-free copy of this class loader.
-     */
-    @Override
-    public WebappClassLoader copyWithoutTransformers() {
-
-        WebappClassLoader result = new WebappClassLoader(this.parent);
-
-        result.antiJARLocking = this.antiJARLocking;
-        result.resources = this.resources;
-        result.files = this.files;
-        result.delegate = this.delegate;
-        result.lastJarAccessed = this.lastJarAccessed;
-        result.repositories = this.repositories;
-        result.jarPath = this.jarPath;
-        result.loaderDir = this.loaderDir;
-        result.canonicalLoaderDir = this.canonicalLoaderDir;
-        result.clearReferencesStatic = this.clearReferencesStatic;
-        result.clearReferencesStopThreads = this.clearReferencesStopThreads;
-        result.clearReferencesStopTimerThreads = 
this.clearReferencesStopTimerThreads;
-        result.clearReferencesLogFactoryRelease = 
this.clearReferencesLogFactoryRelease;
-        result.clearReferencesHttpClientKeepAliveThread = 
this.clearReferencesHttpClientKeepAliveThread;
-        result.repositoryURLs = this.repositoryURLs.clone();
-        result.jarFiles = this.jarFiles.clone();
-        result.jarRealFiles = this.jarRealFiles.clone();
-        result.jarNames = this.jarNames.clone();
-        result.lastModifiedDates = this.lastModifiedDates.clone();
-        result.paths = this.paths.clone();
-        result.notFoundResources.putAll(this.notFoundResources);
-        result.permissionList.addAll(this.permissionList);
-        result.loaderPC.putAll(this.loaderPC);
-        result.contextName = this.contextName;
-        result.hasExternalRepositories = this.hasExternalRepositories;
-        result.searchExternalFirst = this.searchExternalFirst;
-
-        try {
-            result.start();
-        } catch (LifecycleException e) {
-            throw new IllegalStateException(e);
-        }
-
-        return result;
+    
+    protected void copyStateWithoutTransformers(WebappClassLoaderBase base) {
+        base.antiJARLocking = this.antiJARLocking;
+        base.resources = this.resources;
+        base.files = this.files;
+        base.delegate = this.delegate;
+        base.lastJarAccessed = this.lastJarAccessed;
+        base.repositories = this.repositories;
+        base.jarPath = this.jarPath;
+        base.loaderDir = this.loaderDir;
+        base.canonicalLoaderDir = this.canonicalLoaderDir;
+        base.clearReferencesStatic = this.clearReferencesStatic;
+        base.clearReferencesStopThreads = this.clearReferencesStopThreads;
+        base.clearReferencesStopTimerThreads = 
this.clearReferencesStopTimerThreads;
+        base.clearReferencesLogFactoryRelease = 
this.clearReferencesLogFactoryRelease;
+        base.clearReferencesHttpClientKeepAliveThread = 
this.clearReferencesHttpClientKeepAliveThread;
+        base.repositoryURLs = this.repositoryURLs.clone();
+        base.jarFiles = this.jarFiles.clone();
+        base.jarRealFiles = this.jarRealFiles.clone();
+        base.jarNames = this.jarNames.clone();
+        base.lastModifiedDates = this.lastModifiedDates.clone();
+        base.paths = this.paths.clone();
+        base.notFoundResources.putAll(this.notFoundResources);
+        base.permissionList.addAll(this.permissionList);
+        base.loaderPC.putAll(this.loaderPC);
+        base.contextName = this.contextName;
+        base.hasExternalRepositories = this.hasExternalRepositories;
+        base.searchExternalFirst = this.searchExternalFirst;
     }
 
+    
    /**
      * Add a new repository to the set of places this ClassLoader can look for
      * classes to be loaded.
@@ -1235,14 +1210,12 @@ public class WebappClassLoader extends U
     @Override
     public String toString() {
 
-        StringBuilder sb = new StringBuilder("WebappClassLoader\r\n");
-        sb.append("  context: ");
+        StringBuilder sb = new StringBuilder(this.getClass().getSimpleName());
+        sb.append("\r\n  context: ");
         sb.append(contextName);
-        sb.append("\r\n");
-        sb.append("  delegate: ");
+        sb.append("\r\n  delegate: ");
         sb.append(delegate);
-        sb.append("\r\n");
-        sb.append("  repositories:\r\n");
+        sb.append("\r\n  repositories:\r\n");
         if (repositories != null) {
             for (int i = 0; i < repositories.length; i++) {
                 sb.append("    ");
@@ -1335,7 +1308,7 @@ public class WebappClassLoader extends U
                 } catch(ClassNotFoundException cnfe) {
                     // Ignore - will search internal repositories next
                 } catch(AccessControlException ace) {
-                    log.warn("WebappClassLoader.findClassInternal(" + name
+                    log.warn("WebappClassLoaderBase.findClassInternal(" + name
                             + ") security exception: " + ace.getMessage(), 
ace);
                     throw new ClassNotFoundException(name, ace);
                 } catch (RuntimeException e) {
@@ -1352,7 +1325,7 @@ public class WebappClassLoader extends U
                         throw cnfe;
                     }
                 } catch(AccessControlException ace) {
-                    log.warn("WebappClassLoader.findClassInternal(" + name
+                    log.warn("WebappClassLoaderBase.findClassInternal(" + name
                             + ") security exception: " + ace.getMessage(), 
ace);
                     throw new ClassNotFoundException(name, ace);
                 } catch (RuntimeException e) {
@@ -1365,7 +1338,7 @@ public class WebappClassLoader extends U
                 try {
                     clazz = super.findClass(name);
                 } catch(AccessControlException ace) {
-                    log.warn("WebappClassLoader.findClassInternal(" + name
+                    log.warn("WebappClassLoaderBase.findClassInternal(" + name
                             + ") security exception: " + ace.getMessage(), 
ace);
                     throw new ClassNotFoundException(name, ace);
                 } catch (RuntimeException e) {
@@ -1863,7 +1836,7 @@ public class WebappClassLoader extends U
 
     /**
      * Get the Permissions for a CodeSource.  If this instance
-     * of WebappClassLoader is for a web application context,
+     * of WebappClassLoaderBase is for a web application context,
      * add read FilePermission or JndiPermissions for the base
      * directory (if unpacked),
      * the context URL, and jar file resources.
@@ -2366,7 +2339,7 @@ public class WebappClassLoader extends U
                                     instance.getClass().getName() +
                                     " because the referenced object was of 
type " +
                                     valueClass.getName() +
-                                    " which was not loaded by this 
WebappClassLoader.");
+                                    " which was not loaded by this web 
application class loader.");
                         }
                     } else {
                         field.set(instance, null);

Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/loader/WebappLoader.java Tue 
Sep  8 12:49:24 2015
@@ -122,7 +122,7 @@ public class WebappLoader extends Lifecy
     /**
      * The class loader being managed by this Loader component.
      */
-    private WebappClassLoader classLoader = null;
+    private WebappClassLoaderBase classLoader = null;
 
 
     /**
@@ -147,7 +147,7 @@ public class WebappLoader extends Lifecy
 
     /**
      * The Java class name of the ClassLoader implementation to be used.
-     * This class should extend WebappClassLoader, otherwise, a different
+     * This class should extend WebappClassLoaderBase, otherwise, a different
      * loader implementation must be used.
      */
     private String loaderClass =
@@ -715,11 +715,11 @@ public class WebappLoader extends Lifecy
     /**
      * Create associated classLoader.
      */
-    private WebappClassLoader createClassLoader()
+    private WebappClassLoaderBase createClassLoader()
         throws Exception {
 
         Class<?> clazz = Class.forName(loaderClass);
-        WebappClassLoader classLoader = null;
+        WebappClassLoaderBase classLoader = null;
 
         if (parentClassLoader == null) {
             parentClassLoader = container.getParentClassLoader();
@@ -727,7 +727,7 @@ public class WebappLoader extends Lifecy
         Class<?>[] argTypes = { ClassLoader.class };
         Object[] args = { parentClassLoader };
         Constructor<?> constr = clazz.getConstructor(argTypes);
-        classLoader = (WebappClassLoader) constr.newInstance(args);
+        classLoader = (WebappClassLoaderBase) constr.newInstance(args);
 
         return classLoader;
 

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/security/SecurityClassLoad.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/security/SecurityClassLoad.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/security/SecurityClassLoad.java 
(original)
+++ 
tomcat/tc7.0.x/trunk/java/org/apache/catalina/security/SecurityClassLoad.java 
Tue Sep  8 12:49:24 2015
@@ -105,7 +105,7 @@ public final class SecurityClassLoad {
         final String basePackage = "org.apache.catalina.loader.";
         loader.loadClass
             (basePackage +
-             "WebappClassLoader$PrivilegedFindResourceByName");
+             "WebappClassLoaderBase$PrivilegedFindResourceByName");
     }
 
 

Modified: 
tomcat/tc7.0.x/trunk/java/org/apache/tomcat/InstrumentableClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/InstrumentableClassLoader.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/InstrumentableClassLoader.java 
(original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/InstrumentableClassLoader.java 
Tue Sep  8 12:49:24 2015
@@ -23,14 +23,14 @@ import java.lang.instrument.ClassFileTra
  * {@link ClassFileTransformer}s. These transformers can instrument
  * (or weave) the byte code of classes loaded through this class loader
  * to alter their behavior. Currently only
- * {@link org.apache.catalina.loader.WebappClassLoader} implements this
+ * {@link org.apache.catalina.loader.WebappClassLoaderBase} implements this
  * interface. This allows web application frameworks or JPA providers
  * bundled with a web application to instrument web application classes
  * as necessary.
  * <p>
  * You should always program against the methods of this interface
  * (whether using reflection or otherwise). The methods in
- * {@code WebappClassLoader} are protected by the default security
+ * {@code WebappClassLoaderBase} are protected by the default security
  * manager if one is in use.
  *
  * @since 8.0, 7.0.64

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderMemoryLeak.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderMemoryLeak.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderMemoryLeak.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderMemoryLeak.java
 Tue Sep  8 12:49:24 2015
@@ -72,7 +72,7 @@ public class TestWebappClassLoaderMemory
 
     /*
      * Get the set of current threads as an array.
-     * Copied from WebappClassLoader
+     * Copied from WebappClassLoaderBase
      */
     private Thread[] getThreads() {
         // Get the current thread group

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderThreadLocalMemoryLeak.java
 Tue Sep  8 12:49:24 2015
@@ -80,14 +80,14 @@ public class TestWebappClassLoaderThread
         LogValidationFilter f = new LogValidationFilter(
                 "The web application [] created a ThreadLocal with key of");
         LogManager.getLogManager().getLogger(
-                "org.apache.catalina.loader.WebappClassLoader").setFilter(f);
+                
"org.apache.catalina.loader.WebappClassLoaderBase").setFilter(f);
 
         // Need to force loading of all web application classes via the web
         // application class loader
         loadClass("TesterCounter",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterLeakingServlet1",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
 
         // This will trigger the ThreadLocal creation
         int rc = getUrl("http://localhost:"; + getPort() + "/leak1",
@@ -136,16 +136,16 @@ public class TestWebappClassLoaderThread
         LogValidationFilter f = new LogValidationFilter(
                 "The web application [] created a ThreadLocal with key of");
         LogManager.getLogManager().getLogger(
-                "org.apache.catalina.loader.WebappClassLoader").setFilter(f);
+                
"org.apache.catalina.loader.WebappClassLoaderBase").setFilter(f);
 
         // Need to force loading of all web application classes via the web
         // application class loader
         loadClass("TesterCounter",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterThreadScopedHolder",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
         loadClass("TesterLeakingServlet2",
-                (WebappClassLoader) ctx.getLoader().getClassLoader());
+                (WebappClassLoaderBase) ctx.getLoader().getClassLoader());
 
         // This will trigger the ThreadLocal creation
         int rc = getUrl("http://localhost:"; + getPort() + "/leak2",
@@ -180,7 +180,7 @@ public class TestWebappClassLoaderThread
      *
      * This method assumes that all classes are in the current package.
      */
-    private void loadClass(String name, WebappClassLoader cl) throws Exception 
{
+    private void loadClass(String name, WebappClassLoaderBase cl) throws 
Exception {
 
         InputStream is = cl.getResourceAsStream(
                 "org/apache/tomcat/unittest/" + name + ".class");

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/loader/TestWebappClassLoaderWeaving.java
 Tue Sep  8 12:49:24 2015
@@ -69,7 +69,7 @@ public class TestWebappClassLoaderWeavin
 
     private Tomcat tomcat;
     private Context context;
-    private WebappClassLoader loader;
+    private WebappClassLoaderBase loader;
 
     @Before
     @Override
@@ -83,9 +83,9 @@ public class TestWebappClassLoaderWeavin
 
         ClassLoader loader = this.context.getLoader().getClassLoader();
         assertNotNull("The class loader should not be null.", loader);
-        assertSame("The class loader is not correct.", 
WebappClassLoader.class, loader.getClass());
+        assertSame("The class loader is not correct.", 
WebappClassLoaderBase.class, loader.getClass());
 
-        this.loader = (WebappClassLoader) loader;
+        this.loader = (WebappClassLoaderBase) loader;
 
     }
 
@@ -250,7 +250,7 @@ public class TestWebappClassLoaderWeavin
         result = invokeDoMethodOnClass(this.loader, "TesterUnweavedClass");
         assertEquals("The second result is not correct.", "Hello, Weaver #2!", 
result);
 
-        WebappClassLoader copiedLoader = this.loader.copyWithoutTransformers();
+        WebappClassLoader copiedLoader = (WebappClassLoader) 
this.loader.copyWithoutTransformers();
 
         result = invokeDoMethodOnClass(copiedLoader, "TesterNeverWeavedClass");
         assertEquals("The third result is not correct.", "This will never be 
weaved.", result);
@@ -309,7 +309,7 @@ public class TestWebappClassLoaderWeavin
 
     }
 
-    private static String invokeDoMethodOnClass(WebappClassLoader loader, 
String className)
+    private static String invokeDoMethodOnClass(WebappClassLoaderBase loader, 
String className)
             throws Exception {
 
         Class<?> c = loader.findClass("org.apache.catalina.loader." + 
className);

Modified: 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcatClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcatClassLoader.java?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcatClassLoader.java
 (original)
+++ 
tomcat/tc7.0.x/trunk/test/org/apache/catalina/startup/TestTomcatClassLoader.java
 Tue Sep  8 12:49:24 2015
@@ -31,7 +31,7 @@ import static org.junit.Assert.assertEqu
 import org.junit.Test;
 
 import org.apache.catalina.Context;
-import org.apache.catalina.loader.WebappClassLoader;
+import org.apache.catalina.loader.WebappClassLoaderBase;
 import org.apache.tomcat.util.buf.ByteChunk;
 
 public class TestTomcatClassLoader extends TomcatBaseTest {
@@ -98,7 +98,7 @@ public class TestTomcatClassLoader exten
                     out.print("SYSTEM,");
                 } else if (custom == cl) {
                     out.print("CUSTOM,");
-                } else if (cl instanceof WebappClassLoader) {
+                } else if (cl instanceof WebappClassLoaderBase) {
                     out.print("WEBAPP,");
                 } else {
                     out.print("OTHER,");

Modified: tomcat/tc7.0.x/trunk/webapps/docs/config/loader.xml
URL: 
http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/config/loader.xml?rev=1701793&r1=1701792&r2=1701793&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/config/loader.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/config/loader.xml Tue Sep  8 12:49:24 2015
@@ -125,7 +125,7 @@
         implementation class to use.  If not specified, the default value is
         <code>org.apache.catalina.loader.WebappClassLoader</code>. Custom
         <strong>loaderClass</strong> implementations must extend
-        <code>org.apache.catalina.loader.WebappClassLoader</code>.</p>
+        <code>org.apache.catalina.loader.WebappClassLoaderBase</code>.</p>
       </attribute>
 
       <attribute name="searchExternalFirst" required="false">



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

Reply via email to