You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Kevin Sutter <kw...@gmail.com> on 2009/01/30 15:51:24 UTC

Re: svn commit: r739054 - /openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceMetaDataFactory.java

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, <aw...@apache.org> 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 {
>
>
>