Hi Abe, Along these lines, have you looked at OPENJPA-767 ( https://issues.apache.org/jira/browse/OPENJPA-767)? I had created a sandbox for this experimentation some time back. I had come across this one issue with using the proper classloader when loading our OpenJPA runtime in an OSGi environment. Have you hit a similar situation with your Spring integration? And, what other type of changes have you put in to support Spring? Thanks!
Kevin On Thu, Jan 29, 2009 at 4:27 PM, <[email protected]> wrote: > 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 { > > >
