Skip to content

Commit

Permalink
Allow inclusion/exclusion of persistence units
Browse files Browse the repository at this point in the history
  • Loading branch information
tisoft committed Jun 16, 2020
1 parent ed73ae5 commit cd3abf1
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@

import java.nio.charset.Charset;
import java.time.Duration;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalLong;
import java.util.regex.Pattern;

import io.quarkus.runtime.annotations.ConfigDocSection;
import io.quarkus.runtime.annotations.ConfigGroup;
Expand Down Expand Up @@ -148,6 +150,13 @@ public class HibernateOrmConfig {
@ConfigDocSection
public HibernateOrmConfigLog log;

/**
* persistence.xml configuration
*/
@ConfigItem
@ConfigDocSection
public HibernateOrmConfigPersistenceXml persistenceXml;

/**
* Caching configuration
*/
Expand Down Expand Up @@ -360,4 +369,19 @@ public static class HibernateOrmConfigCacheMemory {
@ConfigItem
public OptionalLong objectCount;
}

@ConfigGroup
public static class HibernateOrmConfigPersistenceXml {
/**
* The persistence units to include from persistence.xml files. Default all.
*/
@ConfigItem
public Optional<List<Pattern>> includePersistenceUnit;

/**
* The persistence units to exclude from persistence.xml files. Default none.
*/
@ConfigItem
public Optional<List<Pattern>> excludePersistenceUnit;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ List<HotDeploymentWatchedFileBuildItem> hotDeploymentWatchedFiles(LaunchModeBuil
@BuildStep
public void parsePersistenceXmlDescriptors(
BuildProducer<PersistenceXmlDescriptorBuildItem> persistenceXmlDescriptorBuildItemBuildProducer) {
List<ParsedPersistenceXmlDescriptor> explicitDescriptors = QuarkusPersistenceXmlParser.locatePersistenceUnits();
List<ParsedPersistenceXmlDescriptor> explicitDescriptors = QuarkusPersistenceXmlParser
.locatePersistenceUnits(hibernateConfig.persistenceXml);
for (ParsedPersistenceXmlDescriptor desc : explicitDescriptors) {
persistenceXmlDescriptorBuildItemBuildProducer.produce(new PersistenceXmlDescriptorBuildItem(desc));
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package io.quarkus.hibernate.orm.deployment;

import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;

import javax.persistence.spi.PersistenceUnitTransactionType;

Expand All @@ -24,10 +27,32 @@ final class QuarkusPersistenceXmlParser extends PersistenceXmlParser {
*
* @return the list of ParsedPersistenceXmlDescriptor(s), after discovery and parsing.
*/
public static List<ParsedPersistenceXmlDescriptor> locatePersistenceUnits() {
public static List<ParsedPersistenceXmlDescriptor> locatePersistenceUnits(
HibernateOrmConfig.HibernateOrmConfigPersistenceXml config) {
final QuarkusPersistenceXmlParser parser = new QuarkusPersistenceXmlParser();
parser.doResolve();
return parser.getResolvedPersistenceUnits();

final List<ParsedPersistenceXmlDescriptor> resolvedPersistenceUnits = parser.getResolvedPersistenceUnits();
final List<ParsedPersistenceXmlDescriptor> filteredPersistenceUnits = new ArrayList<>();

resolvedPersistenceUnits.forEach(d -> {
//if it is not explicitly excluded, it is included
boolean include = config.excludePersistenceUnit.map(Collection::stream).orElse(Stream.empty())
.noneMatch(p -> p.matcher(d.getName()).matches());

if (!include) {
//an explicit include overrides an explicit exclude
include = config.includePersistenceUnit.map(Collection::stream).orElse(Stream.empty())
.anyMatch(p -> p.matcher(d.getName()).matches());
}

if (include) {
filteredPersistenceUnits.add(d);
}

});

return filteredPersistenceUnits;
}

private QuarkusPersistenceXmlParser() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.hibernate.orm;

import javax.inject.Inject;
import javax.persistence.EntityManager;

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.hibernate.orm.enhancer.Address;
import io.quarkus.test.QuarkusUnitTest;

public class ExcludePersistenceXmlConfigTest {

@RegisterExtension
static QuarkusUnitTest runner = new QuarkusUnitTest()
.setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class)
.addClass(Address.class)
.addAsManifestResource("META-INF/some-persistence.xml", "persistence.xml")
.addAsResource("application-exclude-persistence-xml.properties"));

@Inject
EntityManager entityManager;

@Test
public void testPersistenceAndConfigTest() {
Assertions.assertNotNull(entityManager);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
quarkus.datasource.db-kind=h2
quarkus.datasource.jdbc.url=jdbc:h2:mem:test

quarkus.hibernate-orm.dialect=org.hibernate.dialect.H2Dialect
quarkus.hibernate-orm.log.sql=true
quarkus.hibernate-orm.database.generation=drop-and-create
quarkus.hibernate-orm.persistenceXml.excludePersistenceUnit=.*

0 comments on commit cd3abf1

Please sign in to comment.