You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sirona.apache.org by rm...@apache.org on 2015/03/22 16:04:09 UTC

svn commit: r1668384 - /incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java

Author: rmannibucau
Date: Sun Mar 22 15:04:09 2015
New Revision: 1668384

URL: http://svn.apache.org/r1668384
Log:
SIRONA-44 use as adviced by Emeric Vernat PersistenceProviderResolver to try to guess the provider

Modified:
    incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java

Modified: incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java
URL: http://svn.apache.org/viewvc/incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java?rev=1668384&r1=1668383&r2=1668384&view=diff
==============================================================================
--- incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java (original)
+++ incubator/sirona/trunk/agent/performance/jpa/src/main/java/org/apache/sirona/jpa/SironaPersistence.java Sun Mar 22 15:04:09 2015
@@ -22,12 +22,15 @@ import org.apache.sirona.counters.Unit;
 
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceProviderResolver;
+import javax.persistence.spi.PersistenceProviderResolverHolder;
 import javax.persistence.spi.PersistenceUnitInfo;
 import javax.persistence.spi.ProviderUtil;
 import java.io.Serializable;
 import java.lang.reflect.InvocationHandler;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.util.List;
 import java.util.Map;
 
 import static org.apache.sirona.jpa.JPAProxyFactory.monitor;
@@ -84,7 +87,7 @@ public class SironaPersistence implement
             return null;
         }
         return EntityManagerFactory.class.cast(
-            monitor(PROXY_API, containerEntityManagerFactory, ROLE, true));
+                monitor(PROXY_API, containerEntityManagerFactory, ROLE, true));
     }
 
     @Override
@@ -111,14 +114,28 @@ public class SironaPersistence implement
                                 throw new IllegalStateException(new ClassNotFoundException("Can't instantiate '" + DEFAULT_PROVIDER + "'"));
                             }
                         } else {
-                            for (final String provider : PROVIDERS) {
-                                try {
-                                    delegate = newPersistence(provider);
-                                    if (delegate != null) {
-                                        break;
+                            final PersistenceProviderResolver resolver = PersistenceProviderResolverHolder.getPersistenceProviderResolver();
+                            if (resolver != null) {
+                                final List<PersistenceProvider> instances = resolver.getPersistenceProviders();
+                                if (instances != null) {
+                                    for (final PersistenceProvider p : instances) {
+                                        if (!SironaPersistence.class.isInstance(p)) {
+                                            delegate = p;
+                                            break;
+                                        }
+                                    }
+                                }
+                            }
+                            if (delegate == null) {
+                                for (final String provider : PROVIDERS) {
+                                    try {
+                                        delegate = newPersistence(provider);
+                                        if (delegate != null) {
+                                            break;
+                                        }
+                                    } catch (final Throwable th2) {
+                                        // no-op
                                     }
-                                } catch (final Throwable th2) {
-                                    // no-op
                                 }
                             }
                         }