openjpa-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From p..@apache.org
Subject svn commit: r609766 - /openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
Date Mon, 07 Jan 2008 20:09:09 GMT
Author: pcl
Date: Mon Jan  7 12:09:05 2008
New Revision: 609766

URL: http://svn.apache.org/viewvc?rev=609766&view=rev
Log:
Port of r603666 to 1.0.x. Change Services.getImplementorClasses(Class) and Services.getImplementorClasses(Class,ClassLoader)
to filter out implementations that are not assignable to the Class argument. This allows the
Services call to be more fault-tolerant in environments with odd classloader configurations.

Modified:
    openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java

Modified: openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java?rev=609766&r1=609765&r2=609766&view=diff
==============================================================================
--- openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
(original)
+++ openjpa/branches/1.0.x/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/Services.java
Mon Jan  7 12:09:05 2008
@@ -25,7 +25,9 @@
 import java.net.URL;
 import java.security.AccessController;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Enumeration;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.StringTokenizer;
@@ -145,7 +147,21 @@
 
     public static Class[] getImplementorClasses(Class serviceClass,
         ClassLoader loader) {
-        return getImplementorClasses(serviceClass.getName(), loader);
+        Set invalid = new HashSet();
+        Class[] classes = getImplementorClasses(serviceClass.getName(), loader);
+
+        // filter out any classes that have any classloader issues wrt.
+        // the specified service class.
+        for (int i = 0; i < classes.length; i++)
+            if (!serviceClass.isAssignableFrom(classes[i]))
+                invalid.add(classes[i]);
+        if (invalid.size() != 0) {
+            List list = new ArrayList(Arrays.asList(classes));
+            list.removeAll(invalid);
+            return (Class[]) list.toArray(new Class[list.size()]);
+        } else {
+            return classes;
+        }
     }
 
     /**



Mime
View raw message