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);
}