You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/03/17 20:02:32 UTC

svn commit: r924421 - /myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java

Author: werpu
Date: Wed Mar 17 19:02:32 2010
New Revision: 924421

URL: http://svn.apache.org/viewvc?rev=924421&view=rev
Log:
https://issues.apache.org/jira/browse/MYFACES-2612

fixed...




Modified:
    myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java

Modified: myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java
URL: http://svn.apache.org/viewvc/myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java?rev=924421&r1=924420&r2=924421&view=diff
==============================================================================
--- myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java (original)
+++ myfaces/shared/trunk_4.0.x/core/src/main/java/org/apache/myfaces/shared/util/ClassUtils.java Wed Mar 17 19:02:32 2010
@@ -24,12 +24,7 @@ import java.lang.reflect.Array;
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -125,18 +120,26 @@ public final class ClassUtils
 
     //~ Methods ------------------------------------------------------------------------------------
 
-    public static void addClassLoadingExtension(ClassLoaderExtension extension, boolean top) {
-        /**
-               * now at the first look this looks somewhat strange
-               * but to avoid synchronzed access we assign new native
-               * arrays to our static variable
-               * since primitive assignments are atomic in java and
-               * an array  falls under the category primitive I assume we can
-               * work the lisp way of immutable data structures
-               */
+    public synchronized static void addClassLoadingExtension(ClassLoaderExtension extension, boolean top) {
+      /**
+       * now at the first look this looks somewhat strange
+       * but to get the best performance access we assign new native
+       * arrays to our static variable
+       * 
+       * we have to synchronized nevertheless because if two threads try to register
+       * loaders at the same time none of them should get lost
+       */
         ClassLoaderExtension [] retVal = new ClassLoaderExtension[classLoadingExtensions.length+1];
         ArrayList extensions = new ArrayList(classLoadingExtensions.length+1);
+
+        if(!top) {
+            extensions.addAll(Arrays.asList(classLoadingExtensions));
+        }
         extensions.add(extension);
+        if(top) {
+            extensions.addAll(Arrays.asList(classLoadingExtensions));
+        }    
+
         classLoadingExtensions = (ClassLoaderExtension []) extensions.toArray(retVal);
     }