You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pp...@apache.org on 2007/02/01 20:36:22 UTC
svn commit: r502326 - in /incubator/openjpa/trunk/openjpa-kernel/src/main:
java/org/apache/openjpa/meta/InterfaceImplGenerator.java
resources/org/apache/openjpa/meta/localizer.properties
Author: ppoddar
Date: Thu Feb 1 11:36:21 2007
New Revision: 502326
URL: http://svn.apache.org/viewvc?view=rev&rev=502326
Log:
Classloader used to generate dynamic implementaion of managed interface uses interfaces' classloader as parent
Modified:
incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java
incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java?view=diff&rev=502326&r1=502325&r2=502326
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/meta/InterfaceImplGenerator.java Thu Feb 1 11:36:21 2007
@@ -48,11 +48,9 @@
private final MetaDataRepository _repos;
private final Map _impls = new WeakHashMap();
private final Project _project = new Project();
- private final BCClassLoader _loader = new BCClassLoader(_project);
-
+
// distinct project / loader for enhanced version of class
private final Project _enhProject = new Project();
- private final BCClassLoader _enhLoader = new BCClassLoader(_enhProject);
/**
* Constructor. Supply repository.
@@ -73,6 +71,8 @@
if (impl != null)
return impl;
+ ClassLoader parentLoader = iface.getClassLoader();
+ BCClassLoader loader = new BCClassLoader(_project, parentLoader);
BCClass bc = _project.loadClass(getClassName(meta));
bc.declareInterface(iface);
ClassMetaData sup = meta.getPCSuperclassMetaData();
@@ -88,14 +88,14 @@
// first load the base class as the enhancer requires the class
// to be available
try {
- meta.setInterfaceImpl(Class.forName(bc.getName(), true, _loader));
+ meta.setInterfaceImpl(Class.forName(bc.getName(), true, loader));
} catch (Throwable t) {
- throw new InternalException(_loc.get("interface-load"), t).
- setFatal(true);
+ throw new InternalException(_loc.get("interface-load", iface,
+ loader), t).setFatal(true);
}
// copy the BCClass into the enhancer project.
bc = _enhProject.loadClass(new ByteArrayInputStream(bc.toByteArray()),
- _loader);
+ loader);
PCEnhancer enhancer = new PCEnhancer(_repos.getConfiguration(), bc,
meta);
@@ -103,12 +103,13 @@
if (result != PCEnhancer.ENHANCE_PC)
throw new InternalException(_loc.get("interface-badenhance",
iface)).setFatal(true);
+ BCClassLoader enhLoader = new BCClassLoader(_enhProject, parentLoader);
try{
// load the class for real.
- impl = Class.forName(bc.getName(), true, _enhLoader);
+ impl = Class.forName(bc.getName(), true, enhLoader);
} catch (Throwable t) {
- throw new InternalException(_loc.get("interface-load2"), t).
- setFatal(true);
+ throw new InternalException(_loc.get("interface-load2", iface,
+ enhLoader), t).setFatal(true);
}
// cache the generated impl.
_impls.put(iface, impl);
Modified: incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties
URL: http://svn.apache.org/viewvc/incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties?view=diff&rev=502326&r1=502325&r2=502326
==============================================================================
--- incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties (original)
+++ incubator/openjpa/trunk/openjpa-kernel/src/main/resources/org/apache/openjpa/meta/localizer.properties Thu Feb 1 11:36:21 2007
@@ -294,3 +294,8 @@
scanning-resource: Scanning resource "{0}" for persistent types.
scan-found-names: Scan of "{1}" found persistent types {0}.
parse-found-names: parsePersistentTypeNames() found {0}.
+interface-load: Dynamic implementation of managed "{0}" can not be defined \
+ using classloader "{1}". See nested exception for details.
+interface-load2: Enhanced dynamic implementaion of managed "{0}" can not be \
+ defined using classloader "{1}". See nested exception for details.
+interface-badenhance: Dynamic implementaion of "{0}" can not be enhanced.
\ No newline at end of file