commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From skitch...@apache.org
Subject svn commit: r370738 - /jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java
Date Fri, 20 Jan 2006 05:53:45 GMT
Author: skitching
Date: Thu Jan 19 21:53:42 2006
New Revision: 370738

URL: http://svn.apache.org/viewcvs?rev=370738&view=rev
Log:
Added comments only.

Modified:
    jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java

Modified: jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java
URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java?rev=370738&r1=370737&r2=370738&view=diff
==============================================================================
--- jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java
(original)
+++ jakarta/commons/proper/logging/trunk/src/java/org/apache/commons/logging/impl/ServletContextCleaner.java
Thu Jan 19 21:53:42 2006
@@ -68,6 +68,33 @@
         // Walk up the tree of classloaders, finding all the available
         // LogFactory classes and releasing any objects associated with
         // the tccl (ie the webapp).
+        //
+        // When there is only one LogFactory in the classpath, and it
+        // is within the webapp being undeployed then there is no problem;
+        // garbage collection works fine.
+        //
+        // When there are multiple LogFactory classes in the classpath but
+        // parent-first classloading is used everywhere, this loop is really
+        // short. The first instance of LogFactory found will
+        // be the highest in the classpath, and then no more will be found.
+        // This is ok, as with this setup this will be the only LogFactory
+        // holding any data associated with the tccl being released.
+        //
+        // When there are multiple LogFactory classes in the classpath and
+        // child-first classloading is used in any classloader, then multiple
+        // LogFactory instances may hold info about this TCCL; whenever the
+        // webapp makes a call into a class loaded via an ancestor classloader
+        // and that class calls LogFactory the tccl gets registered in
+        // the LogFactory instance that is visible from the ancestor
+        // classloader. However the concrete logging library it points
+        // to is expected to have been loaded via the TCCL, so the 
+        // underlying logging lib is only initialised/configured once.
+        // These references from ancestor LogFactory classes down to
+        // TCCL classloaders are held via weak references and so should
+        // be released but there are circumstances where they may not.
+        // Walking up the classloader ancestry ladder releasing
+        // the current tccl at each level tree, though, will definitely
+        // clear any problem references.
         ClassLoader loader = tccl;
         while (loader != null) {
             // Load via the current loader. Note that if the class is not accessable



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


Mime
View raw message