mirror of https://github.com/apache/openjpa.git
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.
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/1.0.x@609766 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
cae90a6cf2
commit
d2264b92bb
|
@ -25,7 +25,9 @@ import java.io.InputStreamReader;
|
|||
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 class Services {
|
|||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue