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);