Author: skitching Date: Wed Jun 8 04:26:36 2005 New Revision: 189573 URL: http://svn.apache.org/viewcvs?rev=189573&view=rev Log: Added comments only.
Modified: jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MethodUtils.java Modified: jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MethodUtils.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MethodUtils.java?rev=189573&r1=189572&r2=189573&view=diff ============================================================================== --- jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MethodUtils.java (original) +++ jakarta/commons/proper/beanutils/trunk/src/java/org/apache/commons/beanutils/MethodUtils.java Wed Jun 8 04:26:36 2005 @@ -55,7 +55,17 @@ // --------------------------------------------------------- Private Methods - /** Only log warning about accessibility work around once */ + /** + * Only log warning about accessibility work around once. + * <p> + * Note that this is broken when this class is deployed via a shared + * classloader in a container, as the warning message will be emitted + * only once, not once per webapp. However making the warning appear + * once per webapp means having a map keyed by context classloader + * which introduces nasty memory-leak problems. As this warning is + * really optional we can ignore this problem; only one of the webapps + * will get the warning in its logs but that should be good enough. + */ private static boolean loggedAccessibleWarning = false; /** An empty class array */ @@ -64,7 +74,24 @@ private static final Object[] emptyObjectArray = new Object[0]; /** - * Stores a cache of Methods against MethodDescriptors, in a WeakHashMap. + * Stores a cache of MethodDescriptor -> Method in a WeakHashMap. + * <p> + * The keys into this map only ever exist as temporary variables within + * methods of this class, and are never exposed to users of this class. + * This means that the WeakHashMap is used only as a mechanism for + * limiting the size of the cache, ie a way to tell the garbage collector + * that the contents of the cache can be completely garbage-collected + * whenever it needs the memory. Whether this is a good approach to + * this problem is doubtful; something like the commons-collections + * LRUMap may be more appropriate (though of course selecting an + * appropriate size is an issue). + * <p> + * This static variable is safe even when this code is deployed via a + * shared classloader because it is keyed via a MethodDescriptor object + * which has a Class as one of its members and that member is used in + * the MethodDescriptor.equals method. So two components that load the same + * class via different classloaders will generate non-equal MethodDescriptor + * objects and hence end up with different entries in the map. */ private static WeakHashMap cache = new WeakHashMap(); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]