You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2025/08/13 00:00:18 UTC

(openjpa) 02/02: [OPENJPA-2940][WIP] Fixing createEntityManagerFactory(PersistenceConfiguration) method

This is an automated email from the ASF dual-hosted git repository.

pcristof pushed a commit to branch OPENJPA-2940
in repository https://gitbox.apache.org/repos/asf/openjpa.git

commit 569e3f0972dc12989fc8b1215357b00a61379774
Author: Paulo Cristovão de Araújo Silva Filho <pc...@gmail.com>
AuthorDate: Tue Aug 12 20:57:56 2025 -0300

    [OPENJPA-2940][WIP] Fixing createEntityManagerFactory(PersistenceConfiguration) method
---
 .../TestEntityManagerFactoryLoading.java           |  2 +-
 .../simple/TestEntityManagerFactory.java           |  2 +-
 .../persistence/util/TestPersistenceUnitUtil.java  |  2 +-
 .../persistence/PersistenceProductDerivation.java  | 12 +++++++++--
 .../persistence/PersistenceProviderImpl.java       | 11 +---------
 .../persistence/PersistenceUnitInfoImpl.java       | 25 ++++++++++++++++++++++
 6 files changed, 39 insertions(+), 15 deletions(-)

diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fetchgroups/TestEntityManagerFactoryLoading.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fetchgroups/TestEntityManagerFactoryLoading.java
index 5f1ee1960..34ef982fe 100644
--- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fetchgroups/TestEntityManagerFactoryLoading.java
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/fetchgroups/TestEntityManagerFactoryLoading.java
@@ -51,7 +51,7 @@ public class TestEntityManagerFactoryLoading {
 	
 	@Before
 	public void beforeEach() {
-		PersistenceConfiguration conf = new PersistenceConfiguration("test");
+		PersistenceConfiguration conf = new PersistenceConfiguration("dynamicaly-created-pu");
 		conf.property(PersistenceConfiguration.SCHEMAGEN_DATABASE_ACTION, "drop-and-create");
 		conf.managedClass(FGManager.class);
 		conf.managedClass(FGDepartment.class);
diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestEntityManagerFactory.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestEntityManagerFactory.java
index 49c452cb4..8af389132 100644
--- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestEntityManagerFactory.java
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestEntityManagerFactory.java
@@ -37,7 +37,7 @@ public class TestEntityManagerFactory extends TestCase {
     }
 	
 	public void testEMFCreation() {
-		PersistenceConfiguration conf = new PersistenceConfiguration("non-existent-PU");
+		PersistenceConfiguration conf = new PersistenceConfiguration("dynamicaly-created-pu");
 		conf.managedClass(AllFieldTypes.class);
 		conf.property(PersistenceConfiguration.SCHEMAGEN_DATABASE_ACTION, "drop-and-create");
 		
diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
index 167446ad4..93872e351 100644
--- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
@@ -59,7 +59,7 @@ public class TestPersistenceUnitUtil {
 	
 	@BeforeClass
 	public static void beforeAll() {
-		PersistenceConfiguration conf = new PersistenceConfiguration("test");
+		PersistenceConfiguration conf = new PersistenceConfiguration("dynamicaly-created-pu");
 		conf.property(PersistenceConfiguration.SCHEMAGEN_DATABASE_ACTION, "drop-and-create");
 		Stream.of(EagerEntity.class, LazyEmbed.class,
 				LazyEntity.class, EagerEmbed.class, RelEntity.class, EagerEmbedRel.class,
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
index a5fa09946..330f3acec 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProductDerivation.java
@@ -34,6 +34,7 @@ import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.Set;
 
+import jakarta.persistence.PersistenceConfiguration;
 import jakarta.persistence.SharedCacheMode;
 import jakarta.persistence.ValidationMode;
 import jakarta.persistence.spi.PersistenceUnitInfo;
@@ -296,7 +297,7 @@ public class PersistenceProductDerivation
         }
         return true;
     }
-
+    
     /**
      * Load configuration from the given persistence unit with the specified
      * user properties.
@@ -321,6 +322,13 @@ public class PersistenceProductDerivation
         return cp;
     }
 
+    public ConfigurationProvider load(PersistenceConfiguration config, Map props) throws IOException {
+    	ConfigurationProviderImpl cp = new ConfigurationProviderImpl();
+    	// convert config into pinfo
+    	PersistenceUnitInfoImpl pinfo = PersistenceUnitInfoImpl.convert(config);
+    	return load((PersistenceUnitInfo) pinfo, props);
+    }
+    
     /**
      * Load configuration from the given resource and unit names, which may
      * be null.
@@ -654,7 +662,7 @@ public class PersistenceProductDerivation
             _puNameCollisions.put(puName, new PUNameCollision(puName, file1, file2));
         }
     }
-
+    
     /**
      * Custom configuration provider.
      */
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
index 55f64a01a..6e917a226 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceProviderImpl.java
@@ -166,16 +166,7 @@ public class PersistenceProviderImpl
 
 	@Override
 	public EntityManagerFactory createEntityManagerFactory(PersistenceConfiguration config) {
-		List<Class<?>> managedClasses = config.managedClasses();
-		if (managedClasses != null && !managedClasses.isEmpty()) {
-			String managedClassesList = managedClasses.stream().map(Class::getName).collect(Collectors.joining(";"));
-			String old = config.properties().containsKey("openjpa.MetaDataFactory")
-					? "," + config.properties().get("openjpa.MetaDataFactory").toString()
-					: "";
-			config.property("openjpa.MetaDataFactory", "jpa(Types=" + managedClassesList + old + ")");
-		}
-		config.property("openjpa.Id", config.name());
-		return createEntityManagerFactory(null, config.properties());
+		return createContainerEntityManagerFactory((PersistenceUnitInfo) PersistenceUnitInfoImpl.convert(config), config.properties());
 	}
 
 	@Override
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java
index 4acc8e4b4..691873ef9 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceUnitInfoImpl.java
@@ -32,7 +32,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
+import java.util.stream.Collectors;
 
+import jakarta.persistence.PersistenceConfiguration;
 import jakarta.persistence.SharedCacheMode;
 import jakarta.persistence.ValidationMode;
 import jakarta.persistence.spi.ClassTransformer;
@@ -616,4 +618,27 @@ public class PersistenceUnitInfoImpl
     	throw new UnsupportedOperationException("Not yet implemented (JPA 3.2)");
 	}
 	
+	public static PersistenceUnitInfoImpl convert(PersistenceConfiguration config) {
+		PersistenceUnitInfoImpl pinfo = new PersistenceUnitInfoImpl();
+		pinfo.setJtaDataSourceName(config.jtaDataSource());
+		pinfo.setNonJtaDataSourceName(config.nonJtaDataSource());
+		pinfo.setPersistenceProviderClassName(config.provider());
+		pinfo.setPersistenceUnitName(config.name());
+		pinfo.setSharedCacheMode(config.sharedCacheMode());
+		pinfo.setTransactionType(config.transactionType() == jakarta.persistence.PersistenceUnitTransactionType.JTA ? 
+				PersistenceUnitTransactionType.JTA : PersistenceUnitTransactionType.RESOURCE_LOCAL);
+		pinfo.setValidationMode(config.validationMode());
+		List<Class<?>> managedClasses = config.managedClasses();
+		if (managedClasses != null && !managedClasses.isEmpty()) {
+			String managedClassesList = managedClasses.stream().map(Class::getName).collect(Collectors.joining(";"));
+			String old = config.properties().containsKey("openjpa.MetaDataFactory")
+					? "," + config.properties().get("openjpa.MetaDataFactory").toString()
+					: "";
+			config.property("openjpa.MetaDataFactory", "jpa(Types=" + managedClassesList + old + ")");
+		}
+		config.property("openjpa.noPersistenceXMLResource", true);
+		pinfo.setPersistenceUnitName(config.name());
+		return pinfo;
+	}
+	
 }