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
The following commit(s) were added to refs/heads/OPENJPA-2940 by this push:
new 898a22887 [OPENJPA-2940][WIP] Intermmediate commit
898a22887 is described below
commit 898a228879aaf874f440c651336b01ac19a5fd07
Author: Paulo Cristovão de Araújo Silva Filho <[email protected]>
AuthorDate: Tue Jul 15 16:19:01 2025 -0300
[OPENJPA-2940][WIP] Intermmediate commit
* Implementing emf creation passing PersistenceConfiguration
---
.../openjpa/persistence/simple/AllFieldTypes.java | 15 +++++++++++++
.../simple/TestEntityManagerFactory.java | 26 +++++++++++++++++++++-
.../persistence/PersistenceProviderImpl.java | 21 ++++++++++++-----
3 files changed, 56 insertions(+), 6 deletions(-)
diff --git
a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/AllFieldTypes.java
b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/AllFieldTypes.java
index 36a2c64dc..eb627593c 100644
---
a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/AllFieldTypes.java
+++
b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/AllFieldTypes.java
@@ -32,8 +32,11 @@ import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import java.util.UUID;
import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
import jakarta.persistence.OneToMany;
import jakarta.persistence.OneToOne;
@@ -95,6 +98,9 @@ public class AllFieldTypes {
private LocalDateTime localDateTimeField;
private OffsetTime offsetTimeField;
private OffsetDateTime offsetDateTimeField;
+
+ @GeneratedValue(strategy = GenerationType.UUID)
+ private UUID uniqueId;
public void setShortField(short shortField) {
@@ -417,5 +423,14 @@ public class AllFieldTypes {
public void setOffsetDateTimeField(OffsetDateTime offsetDateTimeField) {
this.offsetDateTimeField = offsetDateTimeField;
}
+
+ public UUID getUniqueId() {
+ return uniqueId;
+ }
+
+ public void setUniqueId(UUID uniqueId) {
+ this.uniqueId = uniqueId;
+ }
+
}
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 526bb6fbe..0903942f2 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
@@ -18,9 +18,10 @@
*/
package org.apache.openjpa.persistence.simple;
+import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
-
+import jakarta.persistence.PersistenceConfiguration;
import junit.framework.TestCase;
public class TestEntityManagerFactory extends TestCase {
@@ -34,4 +35,27 @@ public class TestEntityManagerFactory extends TestCase {
Persistence.createEntityManagerFactory("invalid");
emf.close();
}
+
+ public void testEMFCreation() {
+ PersistenceConfiguration conf = new
PersistenceConfiguration("test");
+ conf.managedClass(AllFieldTypes.class);
+//
conf.property(PersistenceConfiguration.SCHEMAGEN_DATABASE_ACTION,
"drop-and-create");
+ conf.property("openjpa.jdbc.SynchronizeMappings",
"buildSchema(ForeignKeys=true,SchemaAction='drop,add')");
+
+ EntityManagerFactory emf =
Persistence.createEntityManagerFactory(conf);
+ assertNotNull(emf);
+ EntityManager em = emf.createEntityManager();
+ assertNotNull(em);
+
+ AllFieldTypes aft = new AllFieldTypes();
+ em.getTransaction().begin();
+ em.persist(aft);
+ em.getTransaction().commit();
+
+ assertNotNull(aft.getUniqueId());
+
+ em.close();
+ emf.close();
+ }
+
}
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 09e30477d..6b62be7cc 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
@@ -56,7 +56,9 @@ import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.ProtectionDomain;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
/**
@@ -162,7 +164,20 @@ public class PersistenceProviderImpl
return createEntityManagerFactory(name, null, m);
}
- @Override
+ @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 + ")");
+ }
+ return createEntityManagerFactory(config.name(), config.properties());
+ }
+
+ @Override
public OpenJPAEntityManagerFactory
createContainerEntityManagerFactory(PersistenceUnitInfo pui, Map m) {
PersistenceProductDerivation pd = new PersistenceProductDerivation();
try {
@@ -487,8 +502,4 @@ public class PersistenceProviderImpl
return OpenJPAPersistenceUtil.isLoaded(obj, attr);
}
- @Override
- public EntityManagerFactory
createEntityManagerFactory(PersistenceConfiguration configuration) {
- throw new UnsupportedOperationException("Not yet implemented (JPA
3.2)");
- }
}