You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by cu...@apache.org on 2014/12/10 15:11:45 UTC

svn commit: r1644414 - in /openjpa/trunk: openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java

Author: curtisr7
Date: Wed Dec 10 14:11:45 2014
New Revision: 1644414

URL: http://svn.apache.org/r1644414
Log:
OPENJPA-2542: Use bundle classloader AND PersistenceUnitInfo classloader when creating a BrokerFactory.

Modified:
    openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java
    openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java

Modified: openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java?rev=1644414&r1=1644413&r2=1644414&view=diff
==============================================================================
--- openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java (original)
+++ openjpa/trunk/openjpa-lib/src/main/java/org/apache/openjpa/lib/util/MultiClassLoader.java Wed Dec 10 14:11:45 2014
@@ -68,6 +68,12 @@ public class MultiClassLoader extends Cl
         addClassLoaders(other);
     }
 
+    public MultiClassLoader(ClassLoader... loaders) {
+        for (ClassLoader loader : loaders) {
+            addClassLoader(loader);
+        }
+    }
+
     /**
      * Returns true if the list contains the given class loader or marker.
      */

Modified: openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
URL: http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java?rev=1644414&r1=1644413&r2=1644414&view=diff
==============================================================================
--- openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java (original)
+++ openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java Wed Dec 10 14:11:45 2014
@@ -44,6 +44,7 @@ import org.apache.openjpa.lib.conf.Confi
 import org.apache.openjpa.lib.conf.Configurations;
 import org.apache.openjpa.lib.log.Log;
 import org.apache.openjpa.lib.util.Localizer;
+import org.apache.openjpa.lib.util.MultiClassLoader;
 import org.apache.openjpa.meta.AbstractCFMetaDataFactory;
 import org.apache.openjpa.meta.MetaDataModes;
 import org.apache.openjpa.meta.MetaDataRepository;
@@ -180,14 +181,14 @@ public class PersistenceProviderImpl
                 cp.addProperty("openjpa." + BrokerValue.KEY, getDefaultBrokerAlias());
             }
 
-            // OPENJPA-1491 If running under OSGi, use the Bundle's ClassLoader instead of the application one
-            BrokerFactory factory;
+
+            ClassLoader loader = pui.getClassLoader();
             if (BundleUtils.runningUnderOSGi()) {
-                factory = getBrokerFactory(cp, poolValue, BundleUtils.getBundleClassLoader());
-            } else {
-                factory = getBrokerFactory(cp, poolValue, pui.getClassLoader());
+                // OPENJPA-1491 : If running under OSGi, use the Bundle's ClassLoader instead of the application one
+                // OPENJPA-2542 : Also try to load from app loader in the case of a user implemented interface/config 
+                loader = new MultiClassLoader(BundleUtils.getBundleClassLoader(), loader);
             }
-
+            BrokerFactory factory = getBrokerFactory(cp, poolValue, loader);
             OpenJPAConfiguration conf = factory.getConfiguration();
             setPersistenceEnvironmentInfo(conf, pui);
             _log = conf.getLog(OpenJPAConfiguration.LOG_RUNTIME);