Author: mikedd
Date: Fri Aug 10 10:33:08 2007
New Revision: 564688
URL: http://svn.apache.org/viewvc?view=rev&rev=564688
Log:
OPENJPA-311
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/GeneratedClasses.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/GeneratedClasses.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/GeneratedClasses.java?view=diff&rev=564688&r1=564687&r2=564688
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/GeneratedClasses.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/util/GeneratedClasses.java
Fri Aug 10 10:33:08 2007
@@ -50,12 +50,9 @@
if (l2 == null)
return l1;
- for (ClassLoader p = (ClassLoader) AccessController.doPrivileged(
- J2DoPrivHelper.getParentAction(l1)); p != null;
- p = (ClassLoader) AccessController.doPrivileged(
- J2DoPrivHelper.getParentAction(p)))
- if (p == l2)
- return l1;
+ if(canLoad(l1, c2)) {
+ return l1;
+ }
return l2;
}
@@ -73,5 +70,23 @@
} catch (Throwable t) {
throw new GeneralException(bc.getName()).setCause(t);
}
+ }
+
+ /**
+ * Return true if the given loader will load the same version of a given
+ * class.
+ *
+ * @param loader Classloader to use.
+ * @param clazz Expected class.
+ * @return true if loader.load(clazz.getName()) == clazz. Otherwise false.
+ */
+ private static boolean canLoad(ClassLoader loader, Class clazz) {
+ Class loaded = null;
+ try {
+ loaded = loader.loadClass(clazz.getName());
+ } catch (ClassNotFoundException e) {
+ // Rely on caller to handle return value = false.
+ }
+ return clazz == loaded;
}
}