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 2011/10/22 23:16:00 UTC

svn commit: r1187800 - /tomcat/trunk/java/org/apache/catalina/loader/

Author: markt
Date: Sat Oct 22 21:15:59 2011
New Revision: 1187800

URL: http://svn.apache.org/viewvc?rev=1187800&view=rev
Log:
Whitespace removal from /java/org/apache/catalina/loader

Modified:
    tomcat/trunk/java/org/apache/catalina/loader/Constants.java
    tomcat/trunk/java/org/apache/catalina/loader/JdbcLeakPrevention.java
    tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
    tomcat/trunk/java/org/apache/catalina/loader/ResourceEntry.java
    tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoaderMBean.java
    tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
    tomcat/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml

Modified: tomcat/trunk/java/org/apache/catalina/loader/Constants.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/Constants.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/Constants.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/Constants.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: tomcat/trunk/java/org/apache/catalina/loader/JdbcLeakPrevention.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/JdbcLeakPrevention.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/JdbcLeakPrevention.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/JdbcLeakPrevention.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -32,7 +32,7 @@ import java.util.List;
  * classloading hacks involved - see {@link WebappClassLoader#clearReferences()}
  * for details - but the short version is do not just create a new instance of
  * this class with the new keyword.
- * 
+ *
  * Since this class is loaded by {@link WebappClassLoader}, it can not refer to
  * any internal Tomcat classes as that will cause the security manager to
  * complain.

Modified: tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/LocalStrings.properties Sat Oct 22 21:15:59 2011
@@ -47,7 +47,7 @@ webappClassLoader.clearRmiFail=Failed to
 webappClassLoader.checkThreadLocalsForLeaks.badKey=Unable to determine string representation of key of type [{0}]
 webappClassLoader.checkThreadLocalsForLeaks.badValue=Unable to determine string representation of value of type [{0}]
 webappClassLoader.checkThreadLocalsForLeaks.unknown=Unknown
-webappClassLoader.checkThreadLocalsForLeaks=The web application [{0}] created a ThreadLocal with key of type [{1}] (value [{2}]) and a value of type [{3}] (value [{4}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak. 
+webappClassLoader.checkThreadLocalsForLeaks=The web application [{0}] created a ThreadLocal with key of type [{1}] (value [{2}]) and a value of type [{3}] (value [{4}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
 webappClassLoader.checkThreadLocalsForLeaksDebug=The web application [{0}] created a ThreadLocal with key of type [{1}] (value [{2}]). The ThreadLocal has been correctly set to null and the key will be removed by GC.
 webappClassLoader.checkThreadLocalsForLeaksFail=Failed to check for ThreadLocal references for web application [{0}]
 webappClassLoader.checkThreadsHttpClient=Found HttpClient keep-alive thread using web application class loader. Fixed by switching thread to the parent class loader.
@@ -56,7 +56,7 @@ webappClassLoader.stopTimerThreadFail=Fa
 webappClassLoader.validationErrorJarPath=Unable to validate JAR entry with name {0}
 webappClassLoader.warnRequestThread=The web application [{0}] is still processing a request that has yet to finish. This is very likely to create a memory leak. You can control the time allowed for requests to finish by using the unloadDelay attribute of the standard Context implementation.
 webappClassLoader.warnThread=The web application [{0}] appears to have started a thread named [{1}] but has failed to stop it. This is very likely to create a memory leak.
-webappClassLoader.warnTimerThread=The web application [{0}] appears to have started a TimerThread named [{1}] via the java.util.Timer API but has failed to stop it. To prevent a memory leak, the timer (and hence the associated thread) has been forcibly canceled. 
+webappClassLoader.warnTimerThread=The web application [{0}] appears to have started a TimerThread named [{1}] via the java.util.Timer API but has failed to stop it. To prevent a memory leak, the timer (and hence the associated thread) has been forcibly canceled.
 webappClassLoader.wrongVersion=(unable to load class {0})
 webappLoader.addRepository=Adding repository {0}
 webappLoader.deploy=Deploying class repositories to work directory {0}

Modified: tomcat/trunk/java/org/apache/catalina/loader/ResourceEntry.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/ResourceEntry.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/ResourceEntry.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/ResourceEntry.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoader.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoaderMBean.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoaderMBean.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoaderMBean.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/StandardClassLoaderMBean.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

Modified: tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/VirtualWebappLoader.java Sat Oct 22 21:15:59 2011
@@ -41,7 +41,7 @@ import org.apache.catalina.LifecycleExce
  *
  * <p>The <code>*.jar</code> suffix can be used to include all JAR files in a
  * certain directory. If a file or a directory does not exist, it will be
- * skipped. 
+ * skipped.
  * </p>
  *
  *

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=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -81,22 +81,22 @@ import org.apache.tomcat.util.res.String
 /**
  * Specialized web application class loader.
  * <p>
- * This class loader is a full reimplementation of the 
+ * This class loader is a full reimplementation of the
  * <code>URLClassLoader</code> from the JDK. It is designed to be fully
  * compatible with a normal <code>URLClassLoader</code>, although its internal
  * behavior may be completely different.
  * <p>
- * <strong>IMPLEMENTATION NOTE</strong> - This class loader faithfully follows 
- * the delegation model recommended in the specification. The system class 
- * loader will be queried first, then the local repositories, and only then 
- * delegation to the parent class loader will occur. This allows the web 
+ * <strong>IMPLEMENTATION NOTE</strong> - This class loader faithfully follows
+ * the delegation model recommended in the specification. The system class
+ * loader will be queried first, then the local repositories, and only then
+ * delegation to the parent class loader will occur. This allows the web
  * application to override any shared class except the classes from J2SE.
  * Special handling is provided from the JAXP XML parser interfaces, the JNDI
- * interfaces, and the classes from the servlet API, which are never loaded 
+ * interfaces, and the classes from the servlet API, which are never loaded
  * from the webapp repository.
  * <p>
- * <strong>IMPLEMENTATION NOTE</strong> - Due to limitations in Jasper 
- * compilation technology, any repository which contains classes from 
+ * <strong>IMPLEMENTATION NOTE</strong> - Due to limitations in Jasper
+ * compilation technology, any repository which contains classes from
  * the servlet API will be ignored by the class loader.
  * <p>
  * <strong>IMPLEMENTATION NOTE</strong> - The class loader generates source
@@ -135,7 +135,7 @@ public class WebappClassLoader
         new ArrayList<String>();
 
     private static final String JVN_THREAD_GROUP_SYSTEM = "system";
-    
+
     static {
         JVM_THREAD_GROUP_NAMES.add(JVN_THREAD_GROUP_SYSTEM);
         JVM_THREAD_GROUP_NAMES.add("RMI Runtime");
@@ -159,7 +159,7 @@ public class WebappClassLoader
 
     }
 
-    
+
     protected static final class PrivilegedGetClassLoader
         implements PrivilegedAction<ClassLoader> {
 
@@ -170,9 +170,9 @@ public class WebappClassLoader
         }
 
         @Override
-        public ClassLoader run() {       
+        public ClassLoader run() {
             return clazz.getClassLoader();
-        }           
+        }
     }
 
 
@@ -206,13 +206,13 @@ public class WebappClassLoader
     protected static final StringManager sm =
         StringManager.getManager(Constants.Package);
 
-    
+
     /**
      * Use anti JAR locking code, which does URL rerouting when accessing
      * resources.
      */
-    boolean antiJARLocking = false; 
-    
+    boolean antiJARLocking = false;
+
     // ----------------------------------------------------------- Constructors
 
 
@@ -243,9 +243,9 @@ public class WebappClassLoader
     public WebappClassLoader(ClassLoader parent) {
 
         super(new URL[0], parent);
-                
+
         this.parent = getParent();
-        
+
         system = getSystemClassLoader();
         securityManager = System.getSecurityManager();
 
@@ -439,7 +439,7 @@ public class WebappClassLoader
      * some issues reported with log4j when this option is true. Applications
      * without memory leaks using recent JVMs should operate correctly with this
      * option set to <code>false</code>. If not specified, the default value of
-     * <code>false</code> will be used. 
+     * <code>false</code> will be used.
      */
     private boolean clearReferencesStatic = false;
 
@@ -478,7 +478,7 @@ public class WebappClassLoader
      * expire however, on a busy system that might not happen for some time.
      */
     private boolean clearReferencesHttpClientKeepAliveThread = true;
-    
+
     /**
      * Name of associated context used with logging and JMX to associate with
      * the right web application. Particularly useful for the clear references
@@ -552,8 +552,8 @@ public class WebappClassLoader
     public boolean getAntiJARLocking() {
         return antiJARLocking;
     }
-    
-    
+
+
     /**
      * @param antiJARLocking The antiJARLocking to set.
      */
@@ -662,7 +662,7 @@ public class WebappClassLoader
         this.loaderDir = new File(workDir, "loader");
         if (loaderDir == null) {
             canonicalLoaderDir = null;
-        } else { 
+        } else {
             try {
                 canonicalLoaderDir = loaderDir.getCanonicalPath();
                 if (!canonicalLoaderDir.endsWith(File.separator)) {
@@ -779,7 +779,7 @@ public class WebappClassLoader
              clearReferencesHttpClientKeepAliveThread;
      }
 
-     
+
     // ------------------------------------------------------- Reloader Methods
 
 
@@ -809,7 +809,7 @@ public class WebappClassLoader
             repositoryURLs = null;
         } catch (MalformedURLException e) {
             IllegalArgumentException iae = new IllegalArgumentException
-                ("Invalid repository: " + repository); 
+                ("Invalid repository: " + repository);
             iae.initCause(e);
             throw iae;
         }
@@ -940,7 +940,7 @@ public class WebappClassLoader
     /**
      * Return a String array of the current repositories for this class
      * loader.  If there are no repositories, a zero-length array is
-     * returned.For security reason, returns a clone of the Array (since 
+     * returned.For security reason, returns a clone of the Array (since
      * String are immutable).
      */
     public String[] findRepositories() {
@@ -975,7 +975,7 @@ public class WebappClassLoader
                     ((ResourceAttributes) resources.getAttributes(paths[i]))
                     .getLastModified();
                 if (lastModified != lastModifiedDates[i]) {
-                    if( log.isDebugEnabled() ) 
+                    if( log.isDebugEnabled() )
                         log.debug("  Resource '" + paths[i]
                                   + "' was modified; Date is now: "
                                   + new java.util.Date(lastModified) + " Was: "
@@ -1005,7 +1005,7 @@ public class WebappClassLoader
                         continue;
                     if (!name.equals(jarNames[i])) {
                         // Missing JAR
-                        log.info("    Additional JARs have been added : '" 
+                        log.info("    Additional JARs have been added : '"
                                  + name + "'");
                         return (true);
                     }
@@ -1189,7 +1189,7 @@ public class WebappClassLoader
         // Return the class we have located
         if (log.isTraceEnabled())
             log.debug("      Returning class " + clazz);
-        
+
         if (log.isTraceEnabled()) {
             ClassLoader cl;
             if (Globals.IS_SECURITY_ENABLED){
@@ -1383,13 +1383,13 @@ public class WebappClassLoader
         // (2) Search local repositories
         url = findResource(name);
         if (url != null) {
-            // Locating the repository for special handling in the case 
+            // Locating the repository for special handling in the case
             // of a JAR
             if (antiJARLocking) {
                 ResourceEntry entry = resourceEntries.get(name);
                 try {
                     String repository = entry.codeBase.toString();
-                    if ((repository.endsWith(".jar")) 
+                    if ((repository.endsWith(".jar"))
                             && (!(name.endsWith(".class")))) {
                         // Copy binary content to the work directory if not present
                         File resourceFile = new File(loaderDir, name);
@@ -1781,7 +1781,7 @@ public class WebappClassLoader
 
 
     /**
-     * Get the lifecycle listeners associated with this lifecycle. If this 
+     * Get the lifecycle listeners associated with this lifecycle. If this
      * Lifecycle has no listeners registered, a zero-length array is returned.
      */
     @Override
@@ -1803,7 +1803,7 @@ public class WebappClassLoader
 
     /**
      * Obtain the current state of the source component.
-     * 
+     *
      * @return The current state of the source component.
      */
     @Override
@@ -1826,7 +1826,7 @@ public class WebappClassLoader
         // NOOP
     }
 
-    
+
     /**
      * Start the class loader.
      *
@@ -1864,9 +1864,9 @@ public class WebappClassLoader
         // Clearing references should be done before setting started to
         // false, due to possible side effects
         clearReferences();
-        
+
         started = false;
-        
+
         int length = files.length;
         for (int i = 0; i < length; i++) {
             files[i] = null;
@@ -1913,16 +1913,16 @@ public class WebappClassLoader
     public void destroy() {
         // NOOP
     }
-    
+
 
     /**
-     * Used to periodically signal to the classloader to release 
+     * Used to periodically signal to the classloader to release
      * JAR resources.
      */
     public void closeJARs(boolean force) {
         if (jarFiles.length > 0) {
                 synchronized (jarFiles) {
-                    if (force || (System.currentTimeMillis() 
+                    if (force || (System.currentTimeMillis()
                                   > (lastJarAccessed + 90000))) {
                         for (int i = 0; i < jarFiles.length; i++) {
                             try {
@@ -1944,7 +1944,7 @@ public class WebappClassLoader
 
     // ------------------------------------------------------ Protected Methods
 
-    
+
     /**
      * Clear references.
      */
@@ -1955,10 +1955,10 @@ public class WebappClassLoader
 
         // Stop any threads the web application started
         clearReferencesThreads();
-        
+
         // Check for leaks triggered by ThreadLocals loaded by this class loader
         checkThreadLocalsForLeaks();
-        
+
         // Clear RMI Targets loaded by this class loader
         clearReferencesRmiTargets();
 
@@ -1967,15 +1967,15 @@ public class WebappClassLoader
         if (clearReferencesStatic) {
             clearReferencesStaticFinal();
         }
-        
+
          // Clear the IntrospectionUtils cache.
         IntrospectionUtils.clear();
-        
+
         // Clear the classloader reference in common-logging
         if (clearReferencesLogFactoryRelease) {
             org.apache.juli.logging.LogFactory.release(this);
         }
-        
+
         // Clear the resource bundle cache
         // This shouldn't be necessary, the cache uses weak references but
         // it has caused leaks. Oddly, using the leak detection code in
@@ -1996,7 +1996,7 @@ public class WebappClassLoader
      * if it checked the context class loader) b) using reflection would
      * create a dependency on the DriverManager implementation which can,
      * and has, changed.
-     * 
+     *
      * We can't just create an instance of JdbcLeakPrevention as it will be
      * loaded by the common class loader (since it's .class file is in the
      * $CATALINA_HOME/lib directory). This would fail DriverManager's check
@@ -2004,7 +2004,7 @@ public class WebappClassLoader
      * our parent class loader but define the class with this class loader
      * so the JdbcLeakPrevention looks like a webapp class to the
      * DriverManager.
-     * 
+     *
      * If only apps cleaned up after themselves...
      */
     private final void clearReferencesJdbc() {
@@ -2030,7 +2030,7 @@ public class WebappClassLoader
                 defineClass("org.apache.catalina.loader.JdbcLeakPrevention",
                     classBytes, 0, offset, this.getClass().getProtectionDomain());
             Object obj = lpClass.newInstance();
-            @SuppressWarnings("unchecked") // clearJdbcDriverRegistrations() returns List<String> 
+            @SuppressWarnings("unchecked") // clearJdbcDriverRegistrations() returns List<String>
             List<String> driverNames = (List<String>) obj.getClass().getMethod(
                     "clearJdbcDriverRegistrations").invoke(obj);
             for (String name : driverNames) {
@@ -2056,7 +2056,7 @@ public class WebappClassLoader
 
 
     private final void clearReferencesStaticFinal() {
-        
+
         @SuppressWarnings("unchecked") // resourceEntries is HashMap<String, ResourceEntry>
         Collection<ResourceEntry> values =
             ((HashMap<String,ResourceEntry>) resourceEntries.clone()).values();
@@ -2092,7 +2092,7 @@ public class WebappClassLoader
                     for (int i = 0; i < fields.length; i++) {
                         Field field = fields[i];
                         int mods = field.getModifiers();
-                        if (field.getType().isPrimitive() 
+                        if (field.getType().isPrimitive()
                                 || (field.getName().indexOf("$") != -1)) {
                             continue;
                         }
@@ -2107,14 +2107,14 @@ public class WebappClassLoader
                                 } else {
                                     field.set(null, null);
                                     if (log.isDebugEnabled()) {
-                                        log.debug("Set field " + field.getName() 
+                                        log.debug("Set field " + field.getName()
                                                 + " to null in class " + clazz.getName());
                                     }
                                 }
                             } catch (Throwable t) {
                                 ExceptionUtils.handleThrowable(t);
                                 if (log.isDebugEnabled()) {
-                                    log.debug("Could not set field " + field.getName() 
+                                    log.debug("Could not set field " + field.getName()
                                             + " to null in class " + clazz.getName(), t);
                                 }
                             }
@@ -2128,7 +2128,7 @@ public class WebappClassLoader
                 }
             }
         }
-        
+
     }
 
 
@@ -2140,7 +2140,7 @@ public class WebappClassLoader
         for (int i = 0; i < fields.length; i++) {
             Field field = fields[i];
             int mods = field.getModifiers();
-            if (field.getType().isPrimitive() 
+            if (field.getType().isPrimitive()
                     || (field.getName().indexOf("$") != -1)) {
                 continue;
             }
@@ -2156,16 +2156,16 @@ public class WebappClassLoader
                     if (!loadedByThisOrChild(valueClass)) {
                         if (log.isDebugEnabled()) {
                             log.debug("Not setting field " + field.getName() +
-                                    " to null in object of class " + 
+                                    " to null in object of class " +
                                     instance.getClass().getName() +
                                     " because the referenced object was of type " +
-                                    valueClass.getName() + 
+                                    valueClass.getName() +
                                     " which was not loaded by this WebappClassLoader.");
                         }
                     } else {
                         field.set(instance, null);
                         if (log.isDebugEnabled()) {
-                            log.debug("Set field " + field.getName() 
+                            log.debug("Set field " + field.getName()
                                     + " to null in class " + instance.getClass().getName());
                         }
                     }
@@ -2173,8 +2173,8 @@ public class WebappClassLoader
             } catch (Throwable t) {
                 ExceptionUtils.handleThrowable(t);
                 if (log.isDebugEnabled()) {
-                    log.debug("Could not set field " + field.getName() 
-                            + " to null in object instance of class " 
+                    log.debug("Could not set field " + field.getName()
+                            + " to null in object instance of class "
                             + instance.getClass().getName(), t);
                 }
             }
@@ -2185,7 +2185,7 @@ public class WebappClassLoader
     @SuppressWarnings("deprecation") // thread.stop()
     private void clearReferencesThreads() {
         Thread[] threads = getThreads();
-        
+
         // Iterate over the set of threads
         for (Thread thread : threads) {
             if (thread != null) {
@@ -2195,7 +2195,7 @@ public class WebappClassLoader
                     if (thread == Thread.currentThread()) {
                         continue;
                     }
-                    
+
                     // JVM controlled threads
                     ThreadGroup tg = thread.getThreadGroup();
                     if (tg != null &&
@@ -2208,11 +2208,11 @@ public class WebappClassLoader
                             log.debug(sm.getString(
                                     "webappClassLoader.checkThreadsHttpClient"));
                         }
-                    
+
                         // Don't warn about remaining JVM controlled threads
                         continue;
                     }
-                   
+
                     // Skip threads that have already died
                     if (!thread.isAlive()) {
                         continue;
@@ -2233,13 +2233,13 @@ public class WebappClassLoader
                         log.error(sm.getString("webappClassLoader.warnThread",
                                 contextName, thread.getName()));
                     }
-                    
+
                     // Don't try an stop the threads unless explicitly
                     // configured to do so
                     if (!clearReferencesStopThreads) {
                         continue;
                     }
-                    
+
                     // If the thread has been started via an executor, try
                     // shutting down the executor
                     try {
@@ -2247,7 +2247,7 @@ public class WebappClassLoader
                             thread.getClass().getDeclaredField("target");
                         targetField.setAccessible(true);
                         Object target = targetField.get(thread);
-                        
+
                         if (target != null &&
                                 target.getClass().getCanonicalName().equals(
                                 "java.util.concurrent.ThreadPoolExecutor.Worker")) {
@@ -2287,21 +2287,21 @@ public class WebappClassLoader
         }
     }
 
-    
+
     /*
      * Look at a threads stack trace to see if it is a request thread or not. It
      * isn't perfect, but it should be good-enough for most cases.
      */
     private boolean isRequestThread(Thread thread) {
-        
+
         StackTraceElement[] elements = thread.getStackTrace();
-        
+
         if (elements == null || elements.length == 0) {
             // Must have stopped already. Too late to ignore it. Assume not a
             // request processing thread.
             return false;
         }
-        
+
         // Step through the methods in reverse order looking for calls to any
         // CoyoteAdapter method. All request threads will have this unless
         // Tomcat has been heavily modified - in which case there isn't much we
@@ -2315,33 +2315,33 @@ public class WebappClassLoader
         }
         return false;
     }
-    
-    
+
+
     private void clearReferencesStopTimerThread(Thread thread) {
-        
+
         // Need to get references to:
         // - newTasksMayBeScheduled field
         // - queue field
         // - queue.clear()
-        
+
         try {
             Field newTasksMayBeScheduledField =
                 thread.getClass().getDeclaredField("newTasksMayBeScheduled");
             newTasksMayBeScheduledField.setAccessible(true);
             Field queueField = thread.getClass().getDeclaredField("queue");
             queueField.setAccessible(true);
-    
+
             Object queue = queueField.get(thread);
-            
+
             Method clearMethod = queue.getClass().getDeclaredMethod("clear");
             clearMethod.setAccessible(true);
-            
+
             synchronized(queue) {
                 newTasksMayBeScheduledField.setBoolean(thread, false);
                 clearMethod.invoke(queue);
                 queue.notify();  // In case queue was already empty.
             }
-            
+
             log.error(sm.getString("webappClassLoader.warnTimerThread",
                     contextName, thread.getName()));
 
@@ -2382,7 +2382,7 @@ public class WebappClassLoader
                 Class.forName("java.lang.ThreadLocal$ThreadLocalMap");
             Field tableField = tlmClass.getDeclaredField("table");
             tableField.setAccessible(true);
-            
+
             for (int i = 0; i < threads.length; i++) {
                 Object threadLocalMap;
                 if (threads[i] != null) {
@@ -2410,7 +2410,7 @@ public class WebappClassLoader
         } catch (IllegalAccessException e) {
             log.warn(sm.getString("webappClassLoader.checkThreadLocalsForLeaksFail",
                     contextName), e);
-        }       
+        }
     }
 
 
@@ -2493,7 +2493,7 @@ public class WebappClassLoader
         }
         return name;
     }
-    
+
     /**
      * @param o object to test, may be null
      * @return <code>true</code> if o has been loaded by the current classloader
@@ -2520,18 +2520,18 @@ public class WebappClassLoader
         }
         return false;
     }
-        
+
     /*
      * Get the set of current threads as an array.
      */
     private Thread[] getThreads() {
-        // Get the current thread group 
+        // Get the current thread group
         ThreadGroup tg = Thread.currentThread( ).getThreadGroup( );
         // Find the root thread group
         while (tg.getParent() != null) {
             tg = tg.getParent();
         }
-        
+
         int threadCountGuess = tg.activeCount() + 50;
         Thread[] threads = new Thread[threadCountGuess];
         int threadCountActual = tg.enumerate(threads);
@@ -2540,10 +2540,10 @@ public class WebappClassLoader
             threadCountGuess *=2;
             threads = new Thread[threadCountGuess];
             // Note tg.enumerate(Thread[]) silently ignores any threads that
-            // can't fit into the array 
+            // can't fit into the array
             threadCountActual = tg.enumerate(threads);
         }
-        
+
         return threads;
     }
 
@@ -2569,7 +2569,7 @@ public class WebappClassLoader
             if (objTable == null) {
                 return;
             }
-            
+
             // Iterate over the values in the table
             if (objTable instanceof Map<?,?>) {
                 Iterator<?> iter = ((Map<?,?>) objTable).values().iterator();
@@ -2589,7 +2589,7 @@ public class WebappClassLoader
             if (implTable == null) {
                 return;
             }
-            
+
             // Iterate over the values in the table
             if (implTable instanceof Map<?,?>) {
                 Iterator<?> iter = ((Map<?,?>) implTable).values().iterator();
@@ -2618,8 +2618,8 @@ public class WebappClassLoader
                     contextName), e);
         }
     }
-    
-    
+
+
     /**
      * Clear the {@link ResourceBundle} cache of any bundles loaded by this
      * class loader or any class loader where this loader is a parent class
@@ -2627,7 +2627,7 @@ public class WebappClassLoader
      * are complications around the
      * {@link org.apache.jasper.servlet.JasperLoader} that mean a reflection
      * based approach is more likely to be complete.
-     * 
+     *
      * The ResourceBundle is using WeakReferences so it shouldn't be pinning the
      * class loader in memory. However, it is. Therefore clear ou the
      * references.
@@ -2643,20 +2643,20 @@ public class WebappClassLoader
             // Java 5 uses SoftCache extends Abstract Map
             // So use Map and it *should* work with both
             Map<?,?> cacheList = (Map<?,?>) cacheListField.get(null);
-            
+
             // Get the keys (loader references are in the key)
             Set<?> keys = cacheList.keySet();
-            
+
             Field loaderRefField = null;
-            
+
             // Iterate over the keys looking at the loader instances
             Iterator<?> keysIter = keys.iterator();
-            
+
             int countRemoved = 0;
-            
+
             while (keysIter.hasNext()) {
                 Object key = keysIter.next();
-                
+
                 if (loaderRefField == null) {
                     loaderRefField =
                         key.getClass().getDeclaredField("loaderRef");
@@ -2664,19 +2664,19 @@ public class WebappClassLoader
                 }
                 WeakReference<?> loaderRef =
                     (WeakReference<?>) loaderRefField.get(key);
-                
+
                 ClassLoader loader = (ClassLoader) loaderRef.get();
-                
+
                 while (loader != null && loader != this) {
                     loader = loader.getParent();
                 }
-                
+
                 if (loader != null) {
                     keysIter.remove();
                     countRemoved++;
                 }
             }
-            
+
             if (countRemoved > 0 && log.isDebugEnabled()) {
                 log.debug(sm.getString(
                         "webappClassLoader.clearReferencesResourceBundlesCount",
@@ -2775,9 +2775,9 @@ public class WebappClassLoader
             int pos = name.lastIndexOf('.');
             if (pos != -1)
                 packageName = name.substring(0, pos);
-        
+
             Package pkg = null;
-        
+
             if (packageName != null) {
                 pkg = getPackage(packageName);
                 // Define the package (if null)
@@ -2796,7 +2796,7 @@ public class WebappClassLoader
                     pkg = getPackage(packageName);
                 }
             }
-    
+
             if (securityManager != null) {
 
                 // Checking sealing
@@ -2813,12 +2813,12 @@ public class WebappClassLoader
                             ("Sealing violation loading " + name + " : Package "
                              + packageName + " is sealed.");
                 }
-    
+
             }
 
             try {
                 clazz = defineClass(name, entry.binaryContent, 0,
-                        entry.binaryContent.length, 
+                        entry.binaryContent.length,
                         new CodeSource(entry.codeBase, entry.certificates));
             } catch (UnsupportedClassVersionError ucve) {
                 throw new UnsupportedClassVersionError(
@@ -2833,7 +2833,7 @@ public class WebappClassLoader
             entry.manifest = null;
             entry.certificates = null;
         }
-        
+
         return clazz;
 
     }
@@ -2850,10 +2850,10 @@ public class WebappClassLoader
             entry.codeBase = getURL(new File(file, path), false);
         } catch (MalformedURLException e) {
             return null;
-        }   
+        }
         return entry;
     }
-    
+
 
     /**
      * Find specified resource in local repositories.
@@ -2906,7 +2906,7 @@ public class WebappClassLoader
                 if (canonicalPath != null) {
                     // we create the ResourceEntry based on the information returned
                     // by the DirContext rather than just using the path to the
-                    // repository. This allows to have smart DirContext implementations 
+                    // repository. This allows to have smart DirContext implementations
                     // that "virtualize" the docbase (e.g. Eclipse WTP)
                     entry = findResourceInternal(new File(canonicalPath), "");
                 } else {
@@ -2937,7 +2937,7 @@ public class WebappClassLoader
 
                         int j;
 
-                        long[] result2 = 
+                        long[] result2 =
                             new long[lastModifiedDates.length + 1];
                         for (j = 0; j < lastModifiedDates.length; j++) {
                             result2[j] = lastModifiedDates[j];
@@ -2973,11 +2973,11 @@ public class WebappClassLoader
                     return null;
                 }
                 for (i = 0; (entry == null) && (i < jarFilesLength); i++) {
-    
+
                     jarEntry = jarFiles[i].getJarEntry(path);
-    
+
                     if (jarEntry != null) {
-    
+
                         entry = new ResourceEntry();
                         try {
                             entry.codeBase = getURL(jarRealFiles[i], false);
@@ -2995,7 +2995,7 @@ public class WebappClassLoader
                         } catch (IOException e) {
                             return null;
                         }
-    
+
                         // Extract resources contained in JAR to the workdir
                         if (antiJARLocking && !(path.endsWith(".class"))) {
                             byte[] buf = new byte[1024];
@@ -3006,7 +3006,7 @@ public class WebappClassLoader
                                     jarFiles[i].entries();
                                 while (entries.hasMoreElements()) {
                                     JarEntry jarEntry2 =  entries.nextElement();
-                                    if (!(jarEntry2.isDirectory()) 
+                                    if (!(jarEntry2.isDirectory())
                                         && (!jarEntry2.getName().endsWith
                                             (".class"))) {
                                         resourceFile = new File
@@ -3065,25 +3065,25 @@ public class WebappClassLoader
                                 }
                             }
                         }
-    
+
                     }
-    
+
                 }
-    
+
                 if (entry == null) {
                     synchronized (notFoundResources) {
                         notFoundResources.put(name, name);
                     }
                     return null;
                 }
-    
+
                 if (binaryStream != null) {
-    
+
                     byte[] binaryContent = new byte[contentLength];
-    
+
                     int pos = 0;
                     try {
-    
+
                         while (true) {
                             int n = binaryStream.read(binaryContent, pos,
                                                       binaryContent.length - pos);
@@ -3108,13 +3108,13 @@ public class WebappClassLoader
                         }
                     }
                     entry.binaryContent = binaryContent;
-    
-                    // The certificates are only available after the JarEntry 
+
+                    // The certificates are only available after the JarEntry
                     // associated input stream has been fully read
                     if (jarEntry != null) {
                         entry.certificates = jarEntry.getCertificates();
                     }
-    
+
                 }
             } finally {
                 if (binaryStream != null) {
@@ -3150,7 +3150,7 @@ public class WebappClassLoader
     protected boolean isPackageSealed(String name, Manifest man) {
 
         String path = name.replace('.', '/') + '/';
-        Attributes attr = man.getAttributes(path); 
+        Attributes attr = man.getAttributes(path);
         String sealed = null;
         if (attr != null) {
             sealed = attr.getValue(Name.SEALED);
@@ -3209,8 +3209,8 @@ public class WebappClassLoader
     protected void refreshPolicy() {
 
         try {
-            // The policy file may have been modified to adjust 
-            // permissions, so we're reloading it when loading or 
+            // The policy file may have been modified to adjust
+            // permissions, so we're reloading it when loading or
             // reloading a Context
             Policy policy = Policy.getPolicy();
             policy.refresh();
@@ -3224,7 +3224,7 @@ public class WebappClassLoader
 
     /**
      * Filter classes.
-     * 
+     *
      * @param name class name
      * @return true if the class should be filtered
      */
@@ -3252,12 +3252,12 @@ public class WebappClassLoader
 
 
     /**
-     * Validate a classname. As per SRV.9.7.2, we must restrict loading of 
-     * classes from J2SE (java.*) and most classes of the servlet API 
+     * Validate a classname. As per SRV.9.7.2, we must restrict loading of
+     * classes from J2SE (java.*) and most classes of the servlet API
      * (javax.servlet.*). That should enhance robustness and prevent a number
      * of user error (where an older version of servlet.jar would be present
      * in /WEB-INF/lib).
-     * 
+     *
      * @param name class name
      * @return true if the name is valid
      */
@@ -3319,7 +3319,7 @@ public class WebappClassLoader
                 log.debug(" Checking for " + name);
             JarEntry jarEntry = jarFile.getJarEntry(name);
             if (jarEntry != null) {
-                log.info("validateJarFile(" + jarfile + 
+                log.info("validateJarFile(" + jarfile +
                     ") - jar not loaded. See Servlet Spec 2.3, "
                     + "section 9.7.2. Offending class: " + name);
                 jarFile.close();
@@ -3347,7 +3347,7 @@ public class WebappClassLoader
         if(encoded) {
             return getURI(realFile);
         }
-        
+
         return realFile.toURI().toURL();
     }
 

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=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Sat Oct 22 21:15:59 2011
@@ -5,9 +5,9 @@
  * The ASF licenses this file to You under the Apache License, Version 2.0
  * (the "License"); you may not use this file except in compliance with
  * the License.  You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -139,7 +139,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 WebappClassLoader, otherwise, a different
      * loader implementation must be used.
      */
     private String loaderClass =
@@ -418,7 +418,7 @@ public class WebappLoader extends Lifecy
     /**
      * Return the set of repositories defined for this class loader.
      * If none are defined, a zero-length array is returned.
-     * For security reason, returns a clone of the Array (since 
+     * For security reason, returns a clone of the Array (since
      * String are immutable).
      */
     @Override
@@ -459,7 +459,7 @@ public class WebappLoader extends Lifecy
     }
 
 
-    /** 
+    /**
      * Classpath, as set in org.apache.catalina.jsp_classpath context
      * property
      *
@@ -536,7 +536,7 @@ public class WebappLoader extends Lifecy
             setState(LifecycleState.STARTING);
             return;
         }
-        
+
         // Register a stream handler factory for the JNDI protocol
         URLStreamHandlerFactory streamHandlerFactory =
                 DirContextURLStreamHandlerFactory.getInstance();
@@ -550,7 +550,7 @@ public class WebappLoader extends Lifecy
             } catch (Throwable t) {
                 ExceptionUtils.handleThrowable(t);
                 // This is likely a dual registration
-                log.info("Dual registration of jndi stream handler: " 
+                log.info("Dual registration of jndi stream handler: "
                          + t.getMessage());
             }
         }
@@ -595,7 +595,7 @@ public class WebappLoader extends Lifecy
             String contextName = ctx.getName();
             if (!contextName.startsWith("/")) {
                 contextName = "/" + contextName;
-            }   
+            }
             ObjectName cloname = new ObjectName
                 (MBeanUtils.getDomain(ctx) + ":type=WebappClassLoader,context="
                  + contextName + ",host=" + ctx.getParent().getName());
@@ -643,7 +643,7 @@ public class WebappLoader extends Lifecy
             String contextName = ctx.getName();
             if (!contextName.startsWith("/")) {
                 contextName = "/" + contextName;
-            }   
+            }
             ObjectName cloname = new ObjectName
                 (MBeanUtils.getDomain(ctx) + ":type=WebappClassLoader,context="
                  + contextName + ",host=" + ctx.getParent().getName());
@@ -733,7 +733,7 @@ public class WebappLoader extends Lifecy
                 classLoader.addPermission
                     (new FilePermission(workDirPath, "read,write"));
                 classLoader.addPermission
-                    (new FilePermission(workDirPath + File.separator + "-", 
+                    (new FilePermission(workDirPath + File.separator + "-",
                                         "read,write,delete"));
             } catch (IOException e) {
                 // Ignore
@@ -808,7 +808,7 @@ public class WebappLoader extends Lifecy
     /**
      * Configure the repositories for our class loader, based on the
      * associated Context.
-     * @throws IOException 
+     * @throws IOException
      */
     private void setRepositories() throws IOException {
 
@@ -827,7 +827,7 @@ public class WebappLoader extends Lifecy
             log.info("No work dir for " + servletContext);
         }
 
-        if( log.isDebugEnabled() && workDir != null) 
+        if( log.isDebugEnabled() && workDir != null)
             log.debug(sm.getString("webappLoader.deploy", workDir.getAbsolutePath()));
 
         classLoader.setWorkDir(workDir);
@@ -959,12 +959,12 @@ public class WebappLoader extends Lifecy
                     ioe.initCause(e);
                     throw ioe;
                 }
-                
+
                 if (!(obj instanceof Resource))
                     continue;
-                    
+
                 Resource jarResource = (Resource) obj;
-                    
+
                 if (copyJars) {
                     if (!copy(jarResource.streamContent(),
                               new FileOutputStream(destFile))) {
@@ -978,10 +978,10 @@ public class WebappLoader extends Lifecy
                     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 
+                    // Should ignore and continue loading other jar files
                     // in the dir
                 }
-                    
+
                 loaderRepositories.add( filename );
             }
         }
@@ -1003,7 +1003,7 @@ public class WebappLoader extends Lifecy
             return;
 
         if (container instanceof StandardContext) {
-            String baseClasspath = 
+            String baseClasspath =
                 ((StandardContext) container).getCompilerClasspath();
             if (baseClasspath != null) {
                 servletContext.setAttribute(Globals.CLASS_PATH_ATTR,
@@ -1023,7 +1023,7 @@ public class WebappLoader extends Lifecy
                 if( cp==null ) {
                     log.info( "Unknown loader " + loader + " " + loader.getClass());
                 } else {
-                    if (n > 0) 
+                    if (n > 0)
                         classpath.append(File.pathSeparator);
                     classpath.append(cp);
                     n++;
@@ -1160,19 +1160,19 @@ public class WebappLoader extends Lifecy
 
     @Override
     protected String getObjectNameKeyProperties() {
-        
+
         StringBuilder name = new StringBuilder("type=Loader");
-        
+
         if (container instanceof Context) {
             name.append(",context=");
             Context context = (Context) container;
-            
+
             String contextName = context.getName();
             if (!contextName.startsWith("/")) {
                 name.append("/");
-            }   
+            }
             name.append(contextName);
-            
+
             name.append(",host=");
             name.append(context.getParent().getName());
         } else {
@@ -1180,7 +1180,7 @@ public class WebappLoader extends Lifecy
             name.append(",container=");
             name.append(container.getName());
         }
-        
+
         return name.toString();
     }
 

Modified: tomcat/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml?rev=1187800&r1=1187799&r2=1187800&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/loader/mbeans-descriptors.xml Sat Oct 22 21:15:59 2011
@@ -22,7 +22,7 @@
                domain="Catalina"
                 group="Loader"
                  type="org.apache.catalina.loader.WebappLoader">
-                 
+
     <attribute   name="className"
           description="Fully qualified class name of the managed object"
                  type="java.lang.String"
@@ -46,7 +46,7 @@
 
     <attribute   name="repositoriesString"
           description="Extra repositories managed by this loader"
-             writeable="false" 
+             writeable="false"
                  type="java.lang.String"/>
 
     <attribute   name="stateName"
@@ -101,7 +101,7 @@
 
     <attribute   name="repositoriesString"
           description="Extra repositories managed by this loader"
-             writeable="false" 
+             writeable="false"
                  type="java.lang.String"/>
 
     <attribute   name="stateName"
@@ -166,7 +166,7 @@
 
     <attribute   name="jarPath"
           description="The jarPath of this loader"
-             writeable="false" 
+             writeable="false"
                  type="java.lang.String"/>
 
   </mbean>



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