You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by jl...@apache.org on 2021/04/13 10:27:09 UTC

[tomee-jakarta] 03/03: 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.

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 <jl...@tomitribe.com>
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 <jl...@tomitribe.com>
---
 .../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);