This is an automated email from the ASF dual-hosted git repository. jlmonteiro pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/tomee-jakarta.git
commit 4d579785f7554c59b83d0060ec8c1ead81385738 Author: Jean-Louis Monteiro <[email protected]> AuthorDate: Tue Apr 13 12:26:51 2021 +0200 TOMEE-3200 TOMEE-3201 TOMEE-3202 TOMEE-3203 TOMEE-3204 TOMEE-3205 Patch that should ideally go to OpenJPA. Avoid doing (bad) work when it's not supposed. Signed-off-by: Jean-Louis Monteiro <[email protected]> --- .../persistence/PersistenceProviderImpl.java | 54 ++++++++++++++++++---- 1 file changed, 45 insertions(+), 9 deletions(-) diff --git a/transform/src/patch/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java b/transform/src/patch/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java index 8df3d5d..ff4be9d 100644 --- a/transform/src/patch/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java +++ b/transform/src/patch/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java @@ -26,12 +26,12 @@ import java.security.ProtectionDomain; import java.util.HashMap; import java.util.Map; -import javax.persistence.EntityManager; -import javax.persistence.spi.ClassTransformer; -import javax.persistence.spi.LoadState; -import javax.persistence.spi.PersistenceProvider; -import javax.persistence.spi.PersistenceUnitInfo; -import javax.persistence.spi.ProviderUtil; +import jakarta.persistence.EntityManager; +import jakarta.persistence.spi.ClassTransformer; +import jakarta.persistence.spi.LoadState; +import jakarta.persistence.spi.PersistenceProvider; +import jakarta.persistence.spi.PersistenceUnitInfo; +import jakarta.persistence.spi.ProviderUtil; import org.apache.openjpa.conf.BrokerValue; import org.apache.openjpa.conf.OpenJPAConfiguration; @@ -148,7 +148,7 @@ public class PersistenceProviderImpl throw new IllegalArgumentException(poolValue.toString()); } - if (poolValue == null || !((Boolean) poolValue).booleanValue()) + if (poolValue == null || !(Boolean) poolValue) return Bootstrap.newBrokerFactory(cp, loader); else return Bootstrap.getBrokerFactory(cp, loader); @@ -228,7 +228,12 @@ public class PersistenceProviderImpl @Override public void generateSchema(final PersistenceUnitInfo info, final Map map) { final Map runMap = map == null ? new HashMap<>() : new HashMap<>(map); - runMap.put("javax.persistence.schema-generation.database.action", "create"); + + if (!acceptProvider(runMap)) { + return; + } + + runMap.put("jakarta.persistence.schema-generation.database.action", "create"); final OpenJPAEntityManagerFactory factory = createContainerEntityManagerFactory(info, runMap); try { synchronizeMappings(factory); @@ -240,7 +245,12 @@ public class PersistenceProviderImpl @Override public boolean generateSchema(final String persistenceUnitName, final Map map) { final Map runMap = map == null ? new HashMap<>() : new HashMap<>(map); - runMap.put("javax.persistence.schema-generation.database.action", "create"); + + if (!acceptProvider(runMap)) { + return false; + } + + runMap.put("jakarta.persistence.schema-generation.database.action", "create"); final OpenJPAEntityManagerFactory factory = createEntityManagerFactory(persistenceUnitName, runMap); try { final Object obj = synchronizeMappings(factory); @@ -250,6 +260,32 @@ public class PersistenceProviderImpl } } + // if persistence provider is specific, don't do anything + // only allowed to process if persistence provider matches or if not provider is specified + public boolean acceptProvider(final Map properties){ + Object provider = properties.get("jakarta.persistence.provider"); + + // provider is specified, so it has to match + if (provider != null){ + if (provider instanceof Class){ + provider = ((Class)provider).getName(); + } + try{ + if (! ((String)provider).equals(org.apache.openjpa.persistence.PersistenceProviderImpl.class.getName())){ + return false; + } + + }catch(ClassCastException e){ + return false; + // not a recognized provider property value so must be another provider. + } + } + + // no provider specified + return true; + + } + private Object synchronizeMappings(final OpenJPAEntityManagerFactory factory) { if (EntityManagerFactoryImpl.class.isInstance(factory)) { final EntityManagerFactoryImpl entityManagerFactory = EntityManagerFactoryImpl.class.cast(factory);
