Author: awhite
Date: Thu Jan 29 22:27:00 2009
New Revision: 739054
URL: http://svn.apache.org/viewvc?rev=739054&view=rev
Log:
Use both envLoader and application loader for class loading when parsing
XML metadata files. envLoader first to appease Spring integ.
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java?rev=739054&r1=739053&r2=739054&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java
Thu Jan 29 22:27:00 2009
@@ -48,6 +48,7 @@
import org.apache.openjpa.lib.meta.MetaDataParser;
import org.apache.openjpa.lib.util.J2DoPrivHelper;
import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.MultiClassLoader;
import org.apache.openjpa.lib.util.Options;
import org.apache.openjpa.meta.AbstractCFMetaDataFactory;
import org.apache.openjpa.meta.ClassMetaData;
@@ -237,10 +238,24 @@
* Parse the given XML resource.
*/
private void parseXML(URL xml, Class cls, int mode, ClassLoader envLoader)
{
+ // spring needs to use the envLoader first for all class resolution,
+ // but we must still fall back on application loader
ClassLoader loader = repos.getConfiguration().
- getClassResolverInstance().getClassLoader(cls, envLoader);
+ getClassResolverInstance().getClassLoader(cls, null);
+ if (envLoader != null && envLoader != loader) {
+ MultiClassLoader mult = new MultiClassLoader();
+ mult.addClassLoader(envLoader);
+
+ // loader from resolver is usually a multi loader itself
+ if (loader instanceof MultiClassLoader)
+ mult.addClassLoaders((MultiClassLoader)loader);
+ else
+ mult.addClassLoader(loader);
+ loader = mult;
+ }
+
XMLPersistenceMetaDataParser xmlParser = getXMLParser();
- xmlParser.setClassLoader(envLoader != null ? envLoader : loader);
+ xmlParser.setClassLoader(loader);
xmlParser.setEnvClassLoader(envLoader);
xmlParser.setMode(mode);
try {