From 3480e8babb86d61dc7bb137361a2d831bf50fb86 Mon Sep 17 00:00:00 2001 From: Markus Heberling Date: Tue, 16 Jun 2020 10:10:29 +0200 Subject: [PATCH] Allow skipping of persistence.xml parsing Fixes #6805 --- .../orm/deployment/HibernateOrmProcessor.java | 10 ++-- .../orm/ExcludePersistenceXmlConfigTest.java | 51 +++++++++++++++++++ 2 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/ExcludePersistenceXmlConfigTest.java diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java index c73427df0cfaae..307693194be170 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmProcessor.java @@ -128,7 +128,7 @@ * @author Sanne Grinovero */ public final class HibernateOrmProcessor { - + public static final String SKIP_PARSE_PERSISTENCE_XML = "SKIP_PARSE_PERSISTENCE_XML"; public static final String HIBERNATE_ORM_CONFIG_PREFIX = "quarkus.hibernate-orm."; public static final String NO_SQL_LOAD_SCRIPT_FILE = "no-file"; @@ -176,9 +176,11 @@ List hotDeploymentWatchedFiles(LaunchModeBuil @BuildStep public void parsePersistenceXmlDescriptors( BuildProducer persistenceXmlDescriptorBuildItemBuildProducer) { - List explicitDescriptors = QuarkusPersistenceXmlParser.locatePersistenceUnits(); - for (ParsedPersistenceXmlDescriptor desc : explicitDescriptors) { - persistenceXmlDescriptorBuildItemBuildProducer.produce(new PersistenceXmlDescriptorBuildItem(desc)); + if (!"true".equals(System.getProperty(SKIP_PARSE_PERSISTENCE_XML, "false"))) { + List explicitDescriptors = QuarkusPersistenceXmlParser.locatePersistenceUnits(); + for (ParsedPersistenceXmlDescriptor desc : explicitDescriptors) { + persistenceXmlDescriptorBuildItemBuildProducer.produce(new PersistenceXmlDescriptorBuildItem(desc)); + } } } diff --git a/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/ExcludePersistenceXmlConfigTest.java b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/ExcludePersistenceXmlConfigTest.java new file mode 100644 index 00000000000000..d2ce5a26adff8b --- /dev/null +++ b/extensions/hibernate-orm/deployment/src/test/java/io/quarkus/hibernate/orm/ExcludePersistenceXmlConfigTest.java @@ -0,0 +1,51 @@ +package io.quarkus.hibernate.orm; + +import javax.enterprise.inject.Instance; +import javax.inject.Inject; +import javax.persistence.EntityManager; + +import io.quarkus.hibernate.orm.deployment.HibernateOrmProcessor; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.arc.Arc; +import io.quarkus.hibernate.orm.enhancer.Address; +import io.quarkus.test.QuarkusUnitTest; + +public class ExcludePersistenceXmlConfigTest { + + @RegisterExtension + static QuarkusUnitTest runner = new QuarkusUnitTest(). + setBeforeAllCustomizer(() -> System.setProperty(HibernateOrmProcessor.SKIP_PARSE_PERSISTENCE_XML, "true")). + setAfterAllCustomizer(() -> System.getProperties().remove(HibernateOrmProcessor.SKIP_PARSE_PERSISTENCE_XML)). + setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addClass(Address.class) + .addAsManifestResource("META-INF/some-persistence.xml", "persistence.xml") + .addAsResource("application.properties")); + + @Inject + EntityManager entityManager; + + @Inject + Instance entityManagers; + + @Test + public void testPersistenceAndConfigTest() { + // We have an entity manager + Assertions.assertNotNull(entityManager); + // We have exactly one entity manager + Assertions.assertEquals(false, entityManagers.isAmbiguous()); + Arc.container().requestContext().activate(); + try { + // it is the default entity manager from application.properties, not templatePU from the persistence.xml + Assertions.assertEquals("default", + entityManager.getEntityManagerFactory().getProperties().get("hibernate.ejb.persistenceUnitName")); + } finally { + Arc.container().requestContext().deactivate(); + } + } + +}