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
}
}
}