From 0eb0ce984ae2a1b3fc8a5d335ed0f97a8b1a8d6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 12 Feb 2024 12:33:18 +0100 Subject: [PATCH 1/4] Fix @ConfigDocIgnore being (partially) ignored for documentation generation It was taken into account in ExtensionAnnotationProcessor, but not in ConfigDocItemFinder. Don't ask me what the difference is, or why there are two places where we parse such annotations, but I know we did end up with supposedly "ignored" config properties in the generated asciidoc. --- .../annotation/processor/generate_doc/ConfigDocItemFinder.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/processor/src/main/java/io/quarkus/annotation/processor/generate_doc/ConfigDocItemFinder.java b/core/processor/src/main/java/io/quarkus/annotation/processor/generate_doc/ConfigDocItemFinder.java index a06ba2bad84fd..7e550d58ad3ff 100644 --- a/core/processor/src/main/java/io/quarkus/annotation/processor/generate_doc/ConfigDocItemFinder.java +++ b/core/processor/src/main/java/io/quarkus/annotation/processor/generate_doc/ConfigDocItemFinder.java @@ -2,6 +2,7 @@ import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_DOC_DEFAULT; import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_DOC_ENUM_VALUE; +import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_DOC_IGNORE; import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_DOC_MAP_KEY; import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_DOC_SECTION; import static io.quarkus.annotation.processor.Constants.ANNOTATION_CONFIG_ITEM; @@ -246,6 +247,8 @@ private List recursivelyFindConfigItems(Element element, String r : annotationMirror.getElementValues().values().iterator().next().getValue().toString(); } else if (annotationName.equals(ANNOTATION_CONFIG_WITH_UNNAMED_KEY)) { unnamedMapKey = true; + } else if (annotationName.equals(ANNOTATION_CONFIG_DOC_IGNORE)) { + generateDocumentation = false; } } From 8abb590da8008a3d8638424f5139ba6f2b249490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 12 Feb 2024 10:04:09 +0100 Subject: [PATCH 2/4] Switch Hibernate ORM/Reactive/Envers extensions to @ConfigMapping --- .../HibernateEnversDisabledProcessor.java | 2 +- .../deployment/HibernateEnversEnabled.java | 2 +- .../deployment/HibernateEnversProcessor.java | 4 +- .../HibernateEnversBuildTimeConfig.java | 31 +- ...eEnversBuildTimeConfigPersistenceUnit.java | 96 +++--- .../envers/HibernateEnversRecorder.java | 46 +-- .../orm/deployment/HibernateConfigUtil.java | 10 +- .../orm/deployment/HibernateOrmConfig.java | 105 +++--- .../HibernateOrmConfigPersistenceUnit.java | 323 ++++++++---------- .../orm/deployment/HibernateOrmEnabled.java | 2 +- .../orm/deployment/HibernateOrmProcessor.java | 130 +++---- .../dev/HibernateOrmDevServicesProcessor.java | 2 +- .../metrics/HibernateOrmMetricsProcessor.java | 2 +- .../FastBootHibernatePersistenceProvider.java | 47 ++- .../runtime/HibernateOrmDisabledRecorder.java | 2 +- .../runtime/HibernateOrmRuntimeConfig.java | 43 ++- ...ernateOrmRuntimeConfigPersistenceUnit.java | 132 +++---- .../hibernate/orm/runtime/JPAConfig.java | 7 +- .../deployment/HibernateReactiveEnabled.java | 2 +- .../HibernateReactiveProcessor.java | 69 ++-- ...tHibernateReactivePersistenceProvider.java | 45 ++- 21 files changed, 520 insertions(+), 582 deletions(-) diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java index b2894c347c577..8421fe871d5de 100644 --- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java +++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java @@ -39,7 +39,7 @@ public void disableHibernateEnversStaticInit(HibernateEnversRecorder recorder, public void checkNoExplicitActiveTrue(HibernateEnversBuildTimeConfig buildTimeConfig) { for (var entry : buildTimeConfig.getAllPersistenceUnitConfigsAsMap().entrySet()) { var config = entry.getValue(); - if (config.active.isPresent() && config.active.get()) { + if (config.active().isPresent() && config.active().get()) { var puName = entry.getKey(); String enabledPropertyKey = HibernateEnversBuildTimeConfig.extensionPropertyKey("enabled"); String activePropertyKey = HibernateEnversBuildTimeConfig.persistenceUnitPropertyKey(puName, "active"); diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversEnabled.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversEnabled.java index 5451c0d2828e3..035673f2b66eb 100644 --- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversEnabled.java +++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversEnabled.java @@ -18,7 +18,7 @@ public class HibernateEnversEnabled implements BooleanSupplier { @Override public boolean getAsBoolean() { - return config.enabled; + return config.enabled(); } } diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java index a3b4d43cd46a4..bbad18e193117 100644 --- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java +++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java @@ -41,9 +41,9 @@ public void registerEnversReflections(BuildProducer re .methods().build()); for (HibernateEnversBuildTimeConfigPersistenceUnit pu : buildTimeConfig.getAllPersistenceUnitConfigsAsMap().values()) { - pu.revisionListener.ifPresent( + pu.revisionListener().ifPresent( s -> reflectiveClass.produce(ReflectiveClassBuildItem.builder(s).methods().fields().build())); - pu.auditStrategy.ifPresent( + pu.auditStrategy().ifPresent( s -> reflectiveClass.produce(ReflectiveClassBuildItem.builder(s).methods().fields().build())); } } diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java index 5c48492b5508e..36dda59900664 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java @@ -6,12 +6,15 @@ import io.quarkus.hibernate.orm.runtime.PersistenceUnitUtil; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigDocSection; -import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithParentName; +@ConfigMapping(prefix = "quarkus.hibernate-envers") @ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) -public class HibernateEnversBuildTimeConfig { +public interface HibernateEnversBuildTimeConfig { /** * Whether Hibernate Envers is enabled during the build. * @@ -23,37 +26,35 @@ public class HibernateEnversBuildTimeConfig { * * @asciidoclet */ - @ConfigItem(defaultValue = "true") - public boolean enabled; + @WithDefault("true") + boolean enabled(); /** * Configuration for the default persistence unit. */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateEnversBuildTimeConfigPersistenceUnit defaultPersistenceUnit; + @WithParentName + HibernateEnversBuildTimeConfigPersistenceUnit defaultPersistenceUnit(); /** * Configuration for additional named persistence units. */ @ConfigDocSection + @WithParentName @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; + Map namedPersistenceUnits(); - public Map getAllPersistenceUnitConfigsAsMap() { + default Map getAllPersistenceUnitConfigsAsMap() { Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); + map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); + map.putAll(namedPersistenceUnits()); return map; } - public static String extensionPropertyKey(String radical) { + static String extensionPropertyKey(String radical) { return "quarkus.hibernate-envers." + radical; } - public static String persistenceUnitPropertyKey(String persistenceUnitName, String radical) { + static String persistenceUnitPropertyKey(String persistenceUnitName, String radical) { StringBuilder keyBuilder = new StringBuilder("quarkus.hibernate-envers."); if (!PersistenceUnitUtil.isDefaultPersistenceUnit(persistenceUnitName)) { keyBuilder.append("\"").append(persistenceUnitName).append("\"."); diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfigPersistenceUnit.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfigPersistenceUnit.java index 8645657bd5037..bdf85ee85615f 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfigPersistenceUnit.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfigPersistenceUnit.java @@ -2,11 +2,12 @@ import java.util.Optional; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; +import io.smallrye.config.WithDefault; @ConfigGroup -public class HibernateEnversBuildTimeConfigPersistenceUnit { +public interface HibernateEnversBuildTimeConfigPersistenceUnit { /** * Whether Hibernate Envers should be active for this persistence unit at runtime. @@ -24,164 +25,163 @@ public class HibernateEnversBuildTimeConfigPersistenceUnit { * * @asciidoclet */ - @ConfigItem(defaultValueDocumentation = "'true' if Hibernate ORM is enabled; 'false' otherwise") - public Optional active = Optional.empty(); + @ConfigDocDefault("'true' if Hibernate ORM is enabled; 'false' otherwise") + Optional active(); /** * Enable store_data_at_delete feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#STORE_DATA_AT_DELETE}. */ - @ConfigItem(defaultValue = "false") - public boolean storeDataAtDelete; + @WithDefault("false") + boolean storeDataAtDelete(); /** * Defines a suffix for historical data table. Defaults to {@literal _AUD}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_TABLE_SUFFIX}. */ - @ConfigItem(defaultValue = "_AUD") - public Optional auditTableSuffix; + @WithDefault("_AUD") + Optional auditTableSuffix(); /** * Defines a prefix for historical data table. Default is the empty string. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_TABLE_PREFIX}. */ - @ConfigItem(defaultValue = "") - public Optional auditTablePrefix; + @WithDefault("") + Optional auditTablePrefix(); /** * Revision field name. Defaults to {@literal REV}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#REVISION_FIELD_NAME}. */ - @ConfigItem(defaultValue = "REV") - public Optional revisionFieldName; + @WithDefault("REV") + Optional revisionFieldName(); /** * Revision type field name. Defaults to {@literal REVTYPE}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#REVISION_TYPE_FIELD_NAME}. */ - @ConfigItem(defaultValue = "REVTYPE") - public Optional revisionTypeFieldName; + @WithDefault("REVTYPE") + Optional revisionTypeFieldName(); /** * Enable the revision_on_collection_change feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#REVISION_ON_COLLECTION_CHANGE}. */ - @ConfigItem(defaultValue = "true") - public boolean revisionOnCollectionChange; + @WithDefault("true") + boolean revisionOnCollectionChange(); /** * Enable the do_not_audit_optimistic_locking_field feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD}. */ - @ConfigItem(defaultValue = "true") - public boolean doNotAuditOptimisticLockingField; + @WithDefault("true") + boolean doNotAuditOptimisticLockingField(); /** * Defines the default schema of where audit tables are to be created. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#DEFAULT_SCHEMA}. */ - @ConfigItem(defaultValue = "") - public Optional defaultSchema; + @WithDefault("") + Optional defaultSchema(); /** * Defines the default catalog of where audit tables are to be created. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#DEFAULT_CATALOG}. */ - @ConfigItem(defaultValue = "") - public Optional defaultCatalog; + @WithDefault("") + Optional defaultCatalog(); /** * Enables the track_entities_changed_in_revision feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#TRACK_ENTITIES_CHANGED_IN_REVISION}. */ - @ConfigItem(defaultValue = "false") - public boolean trackEntitiesChangedInRevision; + @WithDefault("false") + boolean trackEntitiesChangedInRevision(); /** * Enables the use_revision_entity_with_native_id feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#USE_REVISION_ENTITY_WITH_NATIVE_ID}. */ - @ConfigItem(defaultValue = "true") - public boolean useRevisionEntityWithNativeId; + @WithDefault("true") + boolean useRevisionEntityWithNativeId(); /** * Enables the global_with_modified_flag feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#GLOBAL_WITH_MODIFIED_FLAG}. */ - @ConfigItem(defaultValue = "false") - public boolean globalWithModifiedFlag; + @WithDefault("false") + boolean globalWithModifiedFlag(); /** * Defines the suffix to be used for modified flag columns. Defaults to {@literal _MOD}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#MODIFIED_FLAG_SUFFIX} */ - @ConfigItem(defaultValue = "_MOD") - public Optional modifiedFlagSuffix; + @WithDefault("_MOD") + Optional modifiedFlagSuffix(); /** * Defines the fully qualified class name of a user defined revision listener. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#REVISION_LISTENER}. */ - @ConfigItem - public Optional revisionListener; + Optional revisionListener(); /** * Defines the fully qualified class name of the audit strategy to be used. * * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_STRATEGY}. */ - @ConfigItem(defaultValue = "org.hibernate.envers.strategy.DefaultAuditStrategy") - public Optional auditStrategy; + @WithDefault("org.hibernate.envers.strategy.DefaultAuditStrategy") + Optional auditStrategy(); /** * Defines the property name for the audit entity's composite primary key. Defaults to {@literal originalId}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#ORIGINAL_ID_PROP_NAME}. */ - @ConfigItem(defaultValue = "originalId") - public Optional originalIdPropName; + @WithDefault("originalId") + Optional originalIdPropName(); /** * Defines the column name that holds the end revision number in audit entities. Defaults to {@literal REVEND}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_STRATEGY_VALIDITY_END_REV_FIELD_NAME}. */ - @ConfigItem(defaultValue = "REVEND") - public Optional auditStrategyValidityEndRevFieldName; + @WithDefault("REVEND") + Optional auditStrategyValidityEndRevFieldName(); /** * Enables the audit_strategy_validity_store_revend_timestamp feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP}. */ - @ConfigItem(defaultValue = "false") - public boolean auditStrategyValidityStoreRevendTimestamp; + @WithDefault("false") + boolean auditStrategyValidityStoreRevendTimestamp(); /** * Defines the column name of the revision end timestamp in the audit tables. Defaults to {@literal REVEND_TSTMP}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME}. */ - @ConfigItem(defaultValue = "REVEND_TSTMP") - public Optional auditStrategyValidityRevendTimestampFieldName; + @WithDefault("REVEND_TSTMP") + Optional auditStrategyValidityRevendTimestampFieldName(); /** * Defines the name of the column used for storing collection ordinal values for embeddable elements. * Defaults to {@literal SETORDINAL}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#EMBEDDABLE_SET_ORDINAL_FIELD_NAME}. */ - @ConfigItem(defaultValue = "SETORDINAL") - public Optional embeddableSetOrdinalFieldName; + @WithDefault("SETORDINAL") + Optional embeddableSetOrdinalFieldName(); /** * Enables the allow_identifier_reuse feature. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#ALLOW_IDENTIFIER_REUSE}. */ - @ConfigItem(defaultValue = "false") - public boolean allowIdentifierReuse; + @WithDefault("false") + boolean allowIdentifierReuse(); /** * Defines the naming strategy to be used for modified columns. * Defaults to {@literal org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy}. * Maps to {@link org.hibernate.envers.configuration.EnversSettings#MODIFIED_COLUMN_NAMING_STRATEGY}. */ - @ConfigItem(defaultValue = "org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy") - public Optional modifiedColumnNamingStrategy; + @WithDefault("org.hibernate.envers.boot.internal.LegacyModifiedColumnNamingStrategy") + Optional modifiedColumnNamingStrategy(); } diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java index 6bcc24e51088f..8d19a86da7b6e 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java @@ -36,43 +36,43 @@ public void contributeBootProperties(BiConsumer propertyCollecto // Leave Envers unconfigured, but still activate it. return; } - if (puConfig.active.isPresent() && !puConfig.active.get()) { + if (puConfig.active().isPresent() && !puConfig.active().get()) { propertyCollector.accept(EnversService.INTEGRATION_ENABLED, "false"); // Do not process other properties: Hibernate Envers is inactive anyway. return; } - addConfig(propertyCollector, EnversSettings.STORE_DATA_AT_DELETE, puConfig.storeDataAtDelete); - addConfig(propertyCollector, EnversSettings.AUDIT_TABLE_SUFFIX, puConfig.auditTableSuffix); - addConfig(propertyCollector, EnversSettings.AUDIT_TABLE_PREFIX, puConfig.auditTablePrefix); - addConfig(propertyCollector, EnversSettings.REVISION_FIELD_NAME, puConfig.revisionFieldName); - addConfig(propertyCollector, EnversSettings.REVISION_TYPE_FIELD_NAME, puConfig.revisionTypeFieldName); + addConfig(propertyCollector, EnversSettings.STORE_DATA_AT_DELETE, puConfig.storeDataAtDelete()); + addConfig(propertyCollector, EnversSettings.AUDIT_TABLE_SUFFIX, puConfig.auditTableSuffix()); + addConfig(propertyCollector, EnversSettings.AUDIT_TABLE_PREFIX, puConfig.auditTablePrefix()); + addConfig(propertyCollector, EnversSettings.REVISION_FIELD_NAME, puConfig.revisionFieldName()); + addConfig(propertyCollector, EnversSettings.REVISION_TYPE_FIELD_NAME, puConfig.revisionTypeFieldName()); addConfig(propertyCollector, EnversSettings.REVISION_ON_COLLECTION_CHANGE, - puConfig.revisionOnCollectionChange); + puConfig.revisionOnCollectionChange()); addConfig(propertyCollector, EnversSettings.DO_NOT_AUDIT_OPTIMISTIC_LOCKING_FIELD, - puConfig.doNotAuditOptimisticLockingField); - addConfig(propertyCollector, EnversSettings.DEFAULT_SCHEMA, puConfig.defaultSchema); - addConfig(propertyCollector, EnversSettings.DEFAULT_CATALOG, puConfig.defaultCatalog); + puConfig.doNotAuditOptimisticLockingField()); + addConfig(propertyCollector, EnversSettings.DEFAULT_SCHEMA, puConfig.defaultSchema()); + addConfig(propertyCollector, EnversSettings.DEFAULT_CATALOG, puConfig.defaultCatalog()); addConfig(propertyCollector, EnversSettings.TRACK_ENTITIES_CHANGED_IN_REVISION, - puConfig.trackEntitiesChangedInRevision); + puConfig.trackEntitiesChangedInRevision()); addConfig(propertyCollector, EnversSettings.USE_REVISION_ENTITY_WITH_NATIVE_ID, - puConfig.useRevisionEntityWithNativeId); - addConfig(propertyCollector, EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, puConfig.globalWithModifiedFlag); - addConfig(propertyCollector, EnversSettings.MODIFIED_FLAG_SUFFIX, puConfig.modifiedFlagSuffix); - addConfigIfPresent(propertyCollector, EnversSettings.REVISION_LISTENER, puConfig.revisionListener); - addConfigIfPresent(propertyCollector, EnversSettings.AUDIT_STRATEGY, puConfig.auditStrategy); - addConfigIfPresent(propertyCollector, EnversSettings.ORIGINAL_ID_PROP_NAME, puConfig.originalIdPropName); + puConfig.useRevisionEntityWithNativeId()); + addConfig(propertyCollector, EnversSettings.GLOBAL_WITH_MODIFIED_FLAG, puConfig.globalWithModifiedFlag()); + addConfig(propertyCollector, EnversSettings.MODIFIED_FLAG_SUFFIX, puConfig.modifiedFlagSuffix()); + addConfigIfPresent(propertyCollector, EnversSettings.REVISION_LISTENER, puConfig.revisionListener()); + addConfigIfPresent(propertyCollector, EnversSettings.AUDIT_STRATEGY, puConfig.auditStrategy()); + addConfigIfPresent(propertyCollector, EnversSettings.ORIGINAL_ID_PROP_NAME, puConfig.originalIdPropName()); addConfigIfPresent(propertyCollector, EnversSettings.AUDIT_STRATEGY_VALIDITY_END_REV_FIELD_NAME, - puConfig.auditStrategyValidityEndRevFieldName); + puConfig.auditStrategyValidityEndRevFieldName()); addConfig(propertyCollector, EnversSettings.AUDIT_STRATEGY_VALIDITY_STORE_REVEND_TIMESTAMP, - puConfig.auditStrategyValidityStoreRevendTimestamp); + puConfig.auditStrategyValidityStoreRevendTimestamp()); addConfigIfPresent(propertyCollector, EnversSettings.AUDIT_STRATEGY_VALIDITY_REVEND_TIMESTAMP_FIELD_NAME, - puConfig.auditStrategyValidityRevendTimestampFieldName); + puConfig.auditStrategyValidityRevendTimestampFieldName()); addConfigIfPresent(propertyCollector, EnversSettings.EMBEDDABLE_SET_ORDINAL_FIELD_NAME, - puConfig.embeddableSetOrdinalFieldName); - addConfig(propertyCollector, EnversSettings.ALLOW_IDENTIFIER_REUSE, puConfig.allowIdentifierReuse); + puConfig.embeddableSetOrdinalFieldName()); + addConfig(propertyCollector, EnversSettings.ALLOW_IDENTIFIER_REUSE, puConfig.allowIdentifierReuse()); addConfigIfPresent(propertyCollector, EnversSettings.MODIFIED_COLUMN_NAMING_STRATEGY, - puConfig.modifiedColumnNamingStrategy); + puConfig.modifiedColumnNamingStrategy()); } public static void addConfig(BiConsumer propertyCollector, String configPath, T value) { diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateConfigUtil.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateConfigUtil.java index 6e593f48a71de..861a6f9d099ab 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateConfigUtil.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateConfigUtil.java @@ -17,17 +17,17 @@ public class HibernateConfigUtil { public static Map getCacheConfigEntries(HibernateOrmConfigPersistenceUnit config) { Map cacheRegionsConfigEntries = new HashMap<>(); - for (Map.Entry regionEntry : config.cache.entrySet()) { + for (Map.Entry regionEntry : config.cache().entrySet()) { String regionName = regionEntry.getKey(); HibernateOrmConfigPersistenceUnitCache cacheConfig = regionEntry.getValue(); - if (cacheConfig.expiration.maxIdle.isPresent()) { + if (cacheConfig.expiration().maxIdle().isPresent()) { cacheRegionsConfigEntries.put(getCacheConfigKey(regionName, EXPIRATION_MAX_IDLE), - String.valueOf(cacheConfig.expiration.maxIdle.get().getSeconds())); + String.valueOf(cacheConfig.expiration().maxIdle().get().getSeconds())); } - if (cacheConfig.memory.objectCount.isPresent()) { + if (cacheConfig.memory().objectCount().isPresent()) { cacheRegionsConfigEntries.put(getCacheConfigKey(regionName, MEMORY_OBJECT_COUNT), - String.valueOf(cacheConfig.memory.objectCount.getAsLong())); + String.valueOf(cacheConfig.memory().objectCount().getAsLong())); } } diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java index e2be11c863d71..dc14eadbfe3fd 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java @@ -9,12 +9,17 @@ import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigRoot; -import io.quarkus.runtime.annotations.ConvertWith; - +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithConverter; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithDefaults; +import io.smallrye.config.WithName; +import io.smallrye.config.WithParentName; + +@ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot -public class HibernateOrmConfig { +public interface HibernateOrmConfig { /** * Whether Hibernate ORM is enabled *during the build*. @@ -25,49 +30,46 @@ public class HibernateOrmConfig { * * @asciidoclet */ - @ConfigItem(defaultValue = "true") - public boolean enabled; + @WithDefault("true") + boolean enabled(); /** * Database related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigDatabase database; + HibernateOrmConfigDatabase database(); /** * Configuration for the default persistence unit. */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateOrmConfigPersistenceUnit defaultPersistenceUnit; + @WithParentName + HibernateOrmConfigPersistenceUnit defaultPersistenceUnit(); /** * Additional named persistence units. */ @ConfigDocSection + @WithParentName + @WithDefaults @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; + Map namedPersistenceUnits(); /** * Configuration for the {@code persistence.xml} handling. */ - @ConfigItem - public HibernateOrmConfigPersistenceXml persistenceXml; + HibernateOrmConfigPersistenceXml persistenceXml(); /** * Logging configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigLog log; + HibernateOrmConfigLog log(); /** * Whether statistics collection is enabled. If 'metrics.enabled' is true, then the default here is * considered true, otherwise the default is false. */ - @ConfigItem - public Optional statistics; + Optional statistics(); /** * Whether session metrics should be appended into the server log for each Hibernate session. This @@ -75,73 +77,69 @@ public class HibernateOrmConfig { * (which means both `statistics` and `log-session-metrics` need to be enabled for the session metrics * to appear in the log). */ - @ConfigItem - public Optional logSessionMetrics; + Optional logSessionMetrics(); /** * Configuration related to metrics. */ - @ConfigItem - public HibernateOrmConfigMetric metrics; + HibernateOrmConfigMetric metrics(); - public boolean isAnyNonPersistenceXmlPropertySet() { + default boolean isAnyNonPersistenceXmlPropertySet() { // Do NOT include persistenceXml in here. - return defaultPersistenceUnit.isAnyPropertySet() || - !persistenceUnits.isEmpty() || - log.isAnyPropertySet() || - statistics.isPresent() || - logSessionMetrics.isPresent() || - metrics.isAnyPropertySet(); + return defaultPersistenceUnit().isAnyPropertySet() || + !namedPersistenceUnits().isEmpty() || + log().isAnyPropertySet() || + statistics().isPresent() || + logSessionMetrics().isPresent() || + metrics().isAnyPropertySet(); } - public Map getAllPersistenceUnitConfigsAsMap() { + default Map getAllPersistenceUnitConfigsAsMap() { Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); + map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); + map.putAll(namedPersistenceUnits()); return map; } @ConfigGroup - public static class HibernateOrmConfigPersistenceXml { + interface HibernateOrmConfigPersistenceXml { /** * If {@code true}, Quarkus will ignore any {@code persistence.xml} file in the classpath * and rely exclusively on the Quarkus configuration. */ - @ConfigItem - public boolean ignore; + @WithDefault("false") + boolean ignore(); } @ConfigGroup - public static class HibernateOrmConfigLog { + interface HibernateOrmConfigLog { /** * Logs SQL bind parameter. *

* Setting it to true is obviously not recommended in production. */ - @ConfigItem @Deprecated - public boolean bindParam; + @WithDefault("false") + boolean bindParam(); /** * Logs SQL bind parameters. *

* Setting it to true is obviously not recommended in production. */ - @ConfigItem - public boolean bindParameters; + @WithDefault("false") + boolean bindParameters(); - public boolean isAnyPropertySet() { - return bindParam || bindParameters; + default boolean isAnyPropertySet() { + return bindParam() || bindParameters(); } } @ConfigGroup - public static class HibernateOrmConfigDatabase { + interface HibernateOrmConfigDatabase { /** * When set, attempts to exchange data with the database * as the given version of Hibernate ORM would have, @@ -165,22 +163,23 @@ public static class HibernateOrmConfigDatabase { * * @asciidoclet */ - @ConfigItem(name = "orm-compatibility.version", defaultValue = "latest") - @ConvertWith(DatabaseOrmCompatibilityVersion.Converter.class) - public DatabaseOrmCompatibilityVersion ormCompatibilityVersion; + @WithName("orm-compatibility.version") + @WithDefault("latest") + @WithConverter(DatabaseOrmCompatibilityVersion.Converter.class) + DatabaseOrmCompatibilityVersion ormCompatibilityVersion(); } @ConfigGroup - public static class HibernateOrmConfigMetric { + interface HibernateOrmConfigMetric { /** * Whether metrics are published if a metrics extension is enabled. */ - @ConfigItem - public boolean enabled; + @WithDefault("false") + boolean enabled(); - public boolean isAnyPropertySet() { - return enabled; + default boolean isAnyPropertySet() { + return enabled(); } } diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfigPersistenceUnit.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfigPersistenceUnit.java index f87622b5957a0..bdf64462f2836 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfigPersistenceUnit.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfigPersistenceUnit.java @@ -2,7 +2,6 @@ import java.nio.charset.Charset; import java.time.Duration; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -13,38 +12,38 @@ import org.hibernate.annotations.TimeZoneStorageType; import org.hibernate.id.enhanced.StandardOptimizerDescriptor; +import io.quarkus.runtime.annotations.ConfigDocDefault; +import io.quarkus.runtime.annotations.ConfigDocIgnore; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; -import io.quarkus.runtime.annotations.ConvertWith; import io.quarkus.runtime.configuration.TrimmedStringConverter; +import io.smallrye.config.WithConverter; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithName; +import io.smallrye.config.WithParentName; @ConfigGroup -public class HibernateOrmConfigPersistenceUnit { +public interface HibernateOrmConfigPersistenceUnit { /** * The name of the datasource which this persistence unit uses. *

* If undefined, it will use the default datasource. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional datasource; + @WithConverter(TrimmedStringConverter.class) + Optional datasource(); /** * The packages in which the entities affected to this persistence unit are located. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional> packages; + Optional> packages(); /** * Dialect related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitDialect dialect; + HibernateOrmConfigPersistenceUnitDialect dialect(); // @formatter:off /** @@ -83,9 +82,8 @@ public class HibernateOrmConfigPersistenceUnit { * @asciidoclet */ // @formatter:on - @ConfigItem(defaultValueDocumentation = "import.sql in DEV, TEST ; no-file otherwise") - @ConvertWith(TrimmedStringConverter.class) - public Optional> sqlLoadScript; + @ConfigDocDefault("import.sql in DEV, TEST ; no-file otherwise") + Optional> sqlLoadScript(); /** * The size of the batches used when loading entities and collections. @@ -95,9 +93,9 @@ public class HibernateOrmConfigPersistenceUnit { * @deprecated {@link #fetch} should be used to configure fetching properties. * @asciidoclet */ - @ConfigItem(defaultValueDocumentation = "16") + @ConfigDocDefault("16") @Deprecated - public OptionalInt batchFetchSize; + OptionalInt batchFetchSize(); /** * The maximum depth of outer join fetch tree for single-ended associations (one-to-one, many-to-one). @@ -107,27 +105,24 @@ public class HibernateOrmConfigPersistenceUnit { * @deprecated {@link #fetch} should be used to configure fetching properties. * @asciidoclet */ - @ConfigItem @Deprecated - public OptionalInt maxFetchDepth; + OptionalInt maxFetchDepth(); /** * Pluggable strategy contract for applying physical naming rules for database object names. * * Class name of the Hibernate PhysicalNamingStrategy implementation */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional physicalNamingStrategy; + @WithConverter(TrimmedStringConverter.class) + Optional physicalNamingStrategy(); /** * Pluggable strategy for applying implicit naming rules when an explicit name is not given. * * Class name of the Hibernate ImplicitNamingStrategy implementation */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional implicitNamingStrategy; + @WithConverter(TrimmedStringConverter.class) + Optional implicitNamingStrategy(); /** * Class name of a custom @@ -145,9 +140,8 @@ public class HibernateOrmConfigPersistenceUnit { * * @asciidoclet */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional metadataBuilderContributor; + @WithConverter(TrimmedStringConverter.class) + Optional metadataBuilderContributor(); /** * XML files to configure the entity mapping, e.g. {@code META-INF/my-orm.xml}. @@ -155,64 +149,55 @@ public class HibernateOrmConfigPersistenceUnit { * Defaults to `META-INF/orm.xml` if it exists. * Pass `no-file` to force Hibernate ORM to ignore `META-INF/orm.xml`. */ - @ConfigItem(defaultValueDocumentation = "META-INF/orm.xml if it exists; no-file otherwise") - @ConvertWith(TrimmedStringConverter.class) - public Optional> mappingFiles; + @ConfigDocDefault("META-INF/orm.xml if it exists; no-file otherwise") + Optional> mappingFiles(); /** * Mapping configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitMapping mapping; + HibernateOrmConfigPersistenceUnitMapping mapping(); /** * Query related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitQuery query; + HibernateOrmConfigPersistenceUnitQuery query(); /** * Database related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitDatabase database; + HibernateOrmConfigPersistenceUnitDatabase database(); /** * JDBC related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitJdbc jdbc; + HibernateOrmConfigPersistenceUnitJdbc jdbc(); /** * Fetching logic configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitFetch fetch; + HibernateOrmConfigPersistenceUnitFetch fetch(); /** * Caching configuration */ - @ConfigItem @ConfigDocSection - public Map cache; + Map cache(); /** * Discriminator related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitDiscriminator discriminator; + HibernateOrmConfigPersistenceUnitDiscriminator discriminator(); /** * Config related to identifier quoting. */ - @ConfigItem(defaultValue = "none") - public HibernateOrmConfigPersistenceUnitQuoteIdentifiers quoteIdentifiers; + HibernateOrmConfigPersistenceUnitQuoteIdentifiers quoteIdentifiers(); /** * The default in Quarkus is for 2nd level caching to be enabled, @@ -222,14 +207,13 @@ public class HibernateOrmConfigPersistenceUnit { *

* Set this to false to disable all 2nd level caches. */ - @ConfigItem(defaultValue = "true") - public boolean secondLevelCachingEnabled; + @WithDefault("true") + boolean secondLevelCachingEnabled(); /** * Bean Validation configuration. */ - @ConfigItem - public HibernateOrmConfigPersistenceValidation validation; + HibernateOrmConfigPersistenceValidation validation(); /** * Defines the method for multi-tenancy (DATABASE, NONE, SCHEMA). The complete list of allowed values is available in the @@ -239,56 +223,54 @@ public class HibernateOrmConfigPersistenceUnit { * * @asciidoclet */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional multitenant; + @WithConverter(TrimmedStringConverter.class) + Optional multitenant(); /** * Defines the name of the datasource to use in case of SCHEMA approach. The datasource of the persistence unit will be used * if not set. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional multitenantSchemaDatasource; + @WithConverter(TrimmedStringConverter.class) + Optional multitenantSchemaDatasource(); /** * If hibernate is not auto generating the schema, and Quarkus is running in development mode * then Quarkus will attempt to validate the database after startup and print a log message if * there are any problems. */ - @ConfigItem(defaultValue = "true") - public boolean validateInDevMode; + @WithDefault("true") + boolean validateInDevMode(); - @ConfigItem(generateDocumentation = false) + @ConfigDocIgnore @ConfigDocMapKey("full-property-key") - public Map unsupportedProperties = new HashMap<>(); - - public boolean isAnyPropertySet() { - return datasource.isPresent() || - packages.isPresent() || - dialect.isAnyPropertySet() || - sqlLoadScript.isPresent() || - batchFetchSize.isPresent() || - maxFetchDepth.isPresent() || - physicalNamingStrategy.isPresent() || - implicitNamingStrategy.isPresent() || - metadataBuilderContributor.isPresent() || - mapping.isAnyPropertySet() || - query.isAnyPropertySet() || - database.isAnyPropertySet() || - jdbc.isAnyPropertySet() || - !cache.isEmpty() || - !secondLevelCachingEnabled || - multitenant.isPresent() || - multitenantSchemaDatasource.isPresent() || - fetch.isAnyPropertySet() || - discriminator.isAnyPropertySet() || - quoteIdentifiers.isAnyPropertySet() || - !unsupportedProperties.isEmpty(); + Map unsupportedProperties(); + + default boolean isAnyPropertySet() { + return datasource().isPresent() || + packages().isPresent() || + dialect().isAnyPropertySet() || + sqlLoadScript().isPresent() || + batchFetchSize().isPresent() || + maxFetchDepth().isPresent() || + physicalNamingStrategy().isPresent() || + implicitNamingStrategy().isPresent() || + metadataBuilderContributor().isPresent() || + mapping().isAnyPropertySet() || + query().isAnyPropertySet() || + database().isAnyPropertySet() || + jdbc().isAnyPropertySet() || + !cache().isEmpty() || + !secondLevelCachingEnabled() || + multitenant().isPresent() || + multitenantSchemaDatasource().isPresent() || + fetch().isAnyPropertySet() || + discriminator().isAnyPropertySet() || + quoteIdentifiers().isAnyPropertySet() || + !unsupportedProperties().isEmpty(); } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitDialect { + interface HibernateOrmConfigPersistenceUnitDialect { /** * Class name of the Hibernate ORM dialect. @@ -313,9 +295,10 @@ public static class HibernateOrmConfigPersistenceUnitDialect { * * @asciidoclet */ - @ConfigItem(name = ConfigItem.PARENT, defaultValueDocumentation = "selected automatically for most popular databases") - @ConvertWith(TrimmedStringConverter.class) - public Optional dialect; + @WithParentName + @ConfigDocDefault("selected automatically for most popular databases") + @WithConverter(TrimmedStringConverter.class) + Optional dialect(); /** * The storage engine to use when the dialect supports multiple storage engines. @@ -324,12 +307,11 @@ public static class HibernateOrmConfigPersistenceUnitDialect { * * @asciidoclet */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional storageEngine; + @WithConverter(TrimmedStringConverter.class) + Optional storageEngine(); - public boolean isAnyPropertySet() { - return dialect.isPresent() || storageEngine.isPresent(); + default boolean isAnyPropertySet() { + return dialect().isPresent() || storageEngine().isPresent(); } } @@ -337,21 +319,19 @@ public boolean isAnyPropertySet() { * Mapping-related configuration. */ @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitMapping { + interface HibernateOrmConfigPersistenceUnitMapping { /** * Timezone configuration. */ - @ConfigItem - public Timezone timezone; + Timezone timezone(); /** * Optimizer configuration. */ - @ConfigItem - public Id id; + Id id(); @ConfigGroup - public static class Timezone { + interface Timezone { /** * How to store timezones in the database by default * for properties of type `OffsetDateTime` and `ZonedDateTime`. @@ -391,20 +371,20 @@ public static class Timezone { * * @asciidoclet */ - @ConfigItem(name = "default-storage", defaultValueDocumentation = "default") - public Optional timeZoneDefaultStorage; + @WithName("default-storage") + @ConfigDocDefault("default") + Optional timeZoneDefaultStorage(); } @ConfigGroup - public static class Id { + interface Id { /** * Optimizer configuration. */ - @ConfigItem - public Optimizer optimizer; + Optimizer optimizer(); @ConfigGroup - public static class Optimizer { + interface Optimizer { /** * The optimizer to apply to identifier generators * whose optimizer is not configured explicitly. @@ -418,24 +398,25 @@ public static class Optimizer { * * @asciidoclet */ - @ConfigItem(name = "default", defaultValueDocumentation = "pooled-lo") + @WithName("default") + @ConfigDocDefault("pooled-lo") // Note this needs to be a build-time property due to // org.hibernate.boot.internal.InFlightMetadataCollectorImpl.handleIdentifierValueBinding // which may call (indirectly) org.hibernate.id.enhanced.SequenceStructure.buildSequence // whose output depends on org.hibernate.id.enhanced.SequenceStructure.applyIncrementSizeToSourceValues // which is determined by the optimizer. - public Optional idOptimizerDefault; + Optional idOptimizerDefault(); } } - public boolean isAnyPropertySet() { - return timezone.timeZoneDefaultStorage.isPresent() - || id.optimizer.idOptimizerDefault.isPresent(); + default boolean isAnyPropertySet() { + return timezone().timeZoneDefaultStorage().isPresent() + || id().optimizer().idOptimizerDefault().isPresent(); } } - public enum IdOptimizerType { + enum IdOptimizerType { /** * Assumes the value retrieved from the table/sequence is the lower end of the pool. * @@ -489,11 +470,11 @@ public enum IdOptimizerType { } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitQuery { + interface HibernateOrmConfigPersistenceUnitQuery { - private static final int DEFAULT_QUERY_PLAN_CACHE_MAX_SIZE = 2048; + int DEFAULT_QUERY_PLAN_CACHE_MAX_SIZE = 2048; - public enum NullOrdering { + enum NullOrdering { NONE, FIRST, LAST @@ -503,8 +484,8 @@ public enum NullOrdering { * The maximum size of the query plan cache. * see #{@value org.hibernate.cfg.AvailableSettings#QUERY_PLAN_CACHE_MAX_SIZE} */ - @ConfigItem(defaultValue = "2048") - public int queryPlanCacheMaxSize; + @WithDefault("2048") + int queryPlanCacheMaxSize(); /** * Default precedence of null values in `ORDER BY` clauses. @@ -513,114 +494,107 @@ public enum NullOrdering { * * @asciidoclet */ - @ConfigItem(defaultValue = "none") - public NullOrdering defaultNullOrdering; + @WithDefault("none") + NullOrdering defaultNullOrdering(); /** * Enables IN clause parameter padding which improves statement caching. */ - @ConfigItem(defaultValue = "true") - public boolean inClauseParameterPadding; + @WithDefault("true") + boolean inClauseParameterPadding(); - public boolean isAnyPropertySet() { - return queryPlanCacheMaxSize != DEFAULT_QUERY_PLAN_CACHE_MAX_SIZE - || defaultNullOrdering != NullOrdering.NONE - || !inClauseParameterPadding; + default boolean isAnyPropertySet() { + return queryPlanCacheMaxSize() != DEFAULT_QUERY_PLAN_CACHE_MAX_SIZE + || defaultNullOrdering() != NullOrdering.NONE + || !inClauseParameterPadding(); } } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitDatabase { + interface HibernateOrmConfigPersistenceUnitDatabase { - private static final String DEFAULT_CHARSET = "UTF-8"; + String DEFAULT_CHARSET = "UTF-8"; /** * The charset of the database. *

* Used for DDL generation and also for the SQL import scripts. */ - @ConfigItem(defaultValue = DEFAULT_CHARSET) - public Charset charset; + @WithDefault(DEFAULT_CHARSET) + Charset charset(); /** * Whether Hibernate should quote all identifiers. * * @deprecated {@link #quoteIdentifiers} should be used to configure quoting strategy. */ - @ConfigItem @Deprecated - public boolean globallyQuotedIdentifiers; + @WithDefault("false") + boolean globallyQuotedIdentifiers(); - public boolean isAnyPropertySet() { - return !DEFAULT_CHARSET.equals(charset.name()) - || globallyQuotedIdentifiers; + default boolean isAnyPropertySet() { + return !DEFAULT_CHARSET.equals(charset().name()) + || globallyQuotedIdentifiers(); } } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitJdbc { + interface HibernateOrmConfigPersistenceUnitJdbc { /** * The time zone pushed to the JDBC driver. * * See `quarkus.hibernate-orm.mapping.timezone.default-storage`. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional timezone; + @WithConverter(TrimmedStringConverter.class) + Optional timezone(); /** * How many rows are fetched at a time by the JDBC driver. */ - @ConfigItem - public OptionalInt statementFetchSize; + OptionalInt statementFetchSize(); /** * The number of updates (inserts, updates and deletes) that are sent by the JDBC driver at one time for execution. */ - @ConfigItem - public OptionalInt statementBatchSize; + OptionalInt statementBatchSize(); - public boolean isAnyPropertySet() { - return timezone.isPresent() || statementFetchSize.isPresent() || statementBatchSize.isPresent(); + default boolean isAnyPropertySet() { + return timezone().isPresent() || statementFetchSize().isPresent() || statementBatchSize().isPresent(); } } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitCache { + interface HibernateOrmConfigPersistenceUnitCache { /** * The cache expiration configuration. */ - @ConfigItem - public HibernateOrmConfigPersistenceUnitCacheExpiration expiration; + HibernateOrmConfigPersistenceUnitCacheExpiration expiration(); /** * The cache memory storage configuration. */ - @ConfigItem - public HibernateOrmConfigPersistenceUnitCacheMemory memory; + HibernateOrmConfigPersistenceUnitCacheMemory memory(); } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitCacheExpiration { + interface HibernateOrmConfigPersistenceUnitCacheExpiration { /** * The maximum time before an object of the cache is considered expired. */ - @ConfigItem - public Optional maxIdle; + Optional maxIdle(); } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitCacheMemory { + interface HibernateOrmConfigPersistenceUnitCacheMemory { /** * The maximum number of objects kept in memory in the cache. */ - @ConfigItem - public OptionalLong objectCount; + OptionalLong objectCount(); } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitFetch { + interface HibernateOrmConfigPersistenceUnitFetch { /** * The size of the batches used when loading entities and collections. * @@ -628,8 +602,8 @@ public static class HibernateOrmConfigPersistenceUnitFetch { * * @asciidoclet */ - @ConfigItem(defaultValueDocumentation = "16") - public OptionalInt batchSize; + @ConfigDocDefault("16") + OptionalInt batchSize(); /** * The maximum depth of outer join fetch tree for single-ended associations (one-to-one, many-to-one). @@ -638,17 +612,16 @@ public static class HibernateOrmConfigPersistenceUnitFetch { * * @asciidoclet */ - @ConfigItem - public OptionalInt maxDepth; + OptionalInt maxDepth(); - public boolean isAnyPropertySet() { - return batchSize.isPresent() || maxDepth.isPresent(); + default boolean isAnyPropertySet() { + return batchSize().isPresent() || maxDepth().isPresent(); } } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitQuoteIdentifiers { + interface HibernateOrmConfigPersistenceUnitQuoteIdentifiers { /** * Identifiers can be quoted using one of the available strategies. @@ -660,11 +633,11 @@ public static class HibernateOrmConfigPersistenceUnitQuoteIdentifiers { * only * identifiers deemed SQL keywords by the Hibernate ORM dialect. */ - @ConfigItem(defaultValue = "none") - public IdentifierQuotingStrategy strategy; + @WithDefault("none") + IdentifierQuotingStrategy strategy(); - public boolean isAnyPropertySet() { - return strategy != IdentifierQuotingStrategy.NONE; + default boolean isAnyPropertySet() { + return strategy() != IdentifierQuotingStrategy.NONE; } } @@ -674,21 +647,21 @@ public boolean isAnyPropertySet() { * Separated in a group configuration, in case it is necessary to add the another existing hibernate discriminator property. */ @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitDiscriminator { + interface HibernateOrmConfigPersistenceUnitDiscriminator { /** * Existing applications rely (implicitly or explicitly) on Hibernate ignoring any DiscriminatorColumn declarations on * joined inheritance hierarchies. This setting allows these applications to maintain the legacy behavior of * DiscriminatorColumn annotations being ignored when paired with joined inheritance. */ - @ConfigItem - public boolean ignoreExplicitForJoined; + @WithDefault("false") + boolean ignoreExplicitForJoined(); - public boolean isAnyPropertySet() { - return ignoreExplicitForJoined; + default boolean isAnyPropertySet() { + return ignoreExplicitForJoined(); } } - public enum IdentifierQuotingStrategy { + enum IdentifierQuotingStrategy { NONE, ALL, ALL_EXCEPT_COLUMN_DEFINITIONS, @@ -696,13 +669,13 @@ public enum IdentifierQuotingStrategy { } @ConfigGroup - public static class HibernateOrmConfigPersistenceValidation { + interface HibernateOrmConfigPersistenceValidation { /** * Enables the Bean Validation integration. */ - @ConfigItem(defaultValue = "true") - public boolean enabled; + @WithDefault("true") + boolean enabled(); } } diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmEnabled.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmEnabled.java index b5ed9ddb3183c..7e9d0c63c4304 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmEnabled.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmEnabled.java @@ -16,7 +16,7 @@ public class HibernateOrmEnabled implements BooleanSupplier { @Override public boolean getAsBoolean() { - return config.enabled; + return config.enabled(); } } 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 2ad2bb9e78ac7..192f56c3cdee4 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 @@ -204,8 +204,8 @@ void includeArchivesHostingEntityPackagesInIndex(HibernateOrmConfig hibernateOrm BuildProducer additionalApplicationArchiveMarkers) { for (HibernateOrmConfigPersistenceUnit persistenceUnit : hibernateOrmConfig.getAllPersistenceUnitConfigsAsMap() .values()) { - if (persistenceUnit.packages.isPresent()) { - for (String pakkage : persistenceUnit.packages.get()) { + if (persistenceUnit.packages().isPresent()) { + for (String pakkage : persistenceUnit.packages().get()) { additionalApplicationArchiveMarkers .produce(new AdditionalApplicationArchiveMarkerBuildItem(pakkage.replace('.', '/'))); } @@ -218,7 +218,7 @@ void includeArchivesHostingEntityPackagesInIndex(HibernateOrmConfig hibernateOrm @BuildStep(onlyIf = IsDevelopment.class) void warnOfSchemaProblems(HibernateOrmConfig config, HibernateOrmRecorder recorder) { for (var e : config.getAllPersistenceUnitConfigsAsMap().entrySet()) { - if (e.getValue().validateInDevMode) { + if (e.getValue().validateInDevMode()) { recorder.doValidation(e.getKey()); } } @@ -323,7 +323,7 @@ public void configurationDescriptorBuilding( getMultiTenancyStrategy( Optional.ofNullable(persistenceXmlDescriptorBuildItem.getDescriptor() .getProperties().getProperty("hibernate.multiTenancy"))), //FIXME this property is meaningless in Hibernate ORM 6 - hibernateOrmConfig.database.ormCompatibilityVersion, Collections.emptyMap()), + hibernateOrmConfig.database().ormCompatibilityVersion(), Collections.emptyMap()), null, jpaModel.getXmlMappings(persistenceXmlDescriptorBuildItem.getDescriptor().getName()), false, true, capabilities)); @@ -383,7 +383,7 @@ public void contributeQuarkusConfigToJpaModel( HibernateOrmConfigPersistenceUnit config = entry.getValue(); jpaModelPuContributions.produce(new JpaModelPersistenceUnitContributionBuildItem( name, null, Collections.emptySet(), - config.mappingFiles.orElse(Collections.emptySet()))); + config.mappingFiles().orElse(Collections.emptySet()))); } } @@ -743,7 +743,7 @@ public void multitenancy(HibernateOrmRecorder recorder, @BuildStep public void produceLoggingCategories(HibernateOrmConfig hibernateOrmConfig, BuildProducer categories) { - if (hibernateOrmConfig.log.bindParam || hibernateOrmConfig.log.bindParameters) { + if (hibernateOrmConfig.log().bindParam() || hibernateOrmConfig.log().bindParameters()) { categories.produce(new LogCategoryBuildItem("org.hibernate.orm.jdbc.bind", Level.TRACE, true)); } } @@ -820,7 +820,7 @@ private void handleHibernateORMWithNoPersistenceXml( BuildProducer persistenceUnitDescriptors, List dbKindMetadataBuildItems) { if (!descriptors.isEmpty()) { - if (hibernateOrmConfig.isAnyNonPersistenceXmlPropertySet() || !hibernateOrmConfig.persistenceUnits.isEmpty()) { + if (hibernateOrmConfig.isAnyNonPersistenceXmlPropertySet()) { throw new ConfigurationException( "A legacy persistence.xml file is present in the classpath, but Hibernate ORM is also configured through the Quarkus config file.\n" + "Legacy persistence.xml files and Quarkus configuration cannot be used at the same time.\n" @@ -848,8 +848,8 @@ private void handleHibernateORMWithNoPersistenceXml( .filter(i -> i.isDefault()) .findFirst(); boolean enableDefaultPersistenceUnit = (defaultJdbcDataSource.isPresent() - && hibernateOrmConfig.persistenceUnits.isEmpty()) - || hibernateOrmConfig.defaultPersistenceUnit.isAnyPropertySet(); + && hibernateOrmConfig.namedPersistenceUnits().isEmpty()) + || hibernateOrmConfig.defaultPersistenceUnit().isAnyPropertySet(); Map> modelClassesAndPackagesPerPersistencesUnits = getModelClassesAndPackagesPerPersistenceUnits( hibernateOrmConfig, jpaModel, index.getIndex(), enableDefaultPersistenceUnit); @@ -861,15 +861,15 @@ private void handleHibernateORMWithNoPersistenceXml( if (enableDefaultPersistenceUnit) { producePersistenceUnitDescriptorFromConfig( hibernateOrmConfig, PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, - hibernateOrmConfig.defaultPersistenceUnit, + hibernateOrmConfig.defaultPersistenceUnit(), modelClassesAndPackagesForDefaultPersistenceUnit, jpaModel.getXmlMappings(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME), jdbcDataSources, applicationArchivesBuildItem, launchMode, capabilities, systemProperties, nativeImageResources, hotDeploymentWatchedFiles, persistenceUnitDescriptors, storageEngineCollector, dbKindMetadataBuildItems); } else if (!modelClassesAndPackagesForDefaultPersistenceUnit.isEmpty() - && (!hibernateOrmConfig.defaultPersistenceUnit.datasource.isPresent() - || DataSourceUtil.isDefault(hibernateOrmConfig.defaultPersistenceUnit.datasource.get())) + && (!hibernateOrmConfig.defaultPersistenceUnit().datasource().isPresent() + || DataSourceUtil.isDefault(hibernateOrmConfig.defaultPersistenceUnit().datasource().get())) && !defaultJdbcDataSource.isPresent()) { String persistenceUnitName = PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME; String dataSourceName = DataSourceUtil.DEFAULT_DATASOURCE_NAME; @@ -877,7 +877,7 @@ private void handleHibernateORMWithNoPersistenceXml( DataSourceUtil.dataSourceNotConfigured(dataSourceName)); } - for (Entry persistenceUnitEntry : hibernateOrmConfig.persistenceUnits + for (Entry persistenceUnitEntry : hibernateOrmConfig.namedPersistenceUnits() .entrySet()) { producePersistenceUnitDescriptorFromConfig( hibernateOrmConfig, persistenceUnitEntry.getKey(), persistenceUnitEntry.getValue(), @@ -936,54 +936,55 @@ private static void producePersistenceUnitDescriptorFromConfig( descriptor.setTransactionType(PersistenceUnitTransactionType.JTA); - MultiTenancyStrategy multiTenancyStrategy = getMultiTenancyStrategy(persistenceUnitConfig.multitenant); + MultiTenancyStrategy multiTenancyStrategy = getMultiTenancyStrategy(persistenceUnitConfig.multitenant()); collectDialectConfig(persistenceUnitName, persistenceUnitConfig, dbKindMetadataBuildItems, jdbcDataSource, multiTenancyStrategy, systemProperties, descriptor.getProperties()::setProperty, storageEngineCollector); // Physical Naming Strategy - persistenceUnitConfig.physicalNamingStrategy.ifPresent( + persistenceUnitConfig.physicalNamingStrategy().ifPresent( namingStrategy -> descriptor.getProperties() .setProperty(AvailableSettings.PHYSICAL_NAMING_STRATEGY, namingStrategy)); // Implicit Naming Strategy - persistenceUnitConfig.implicitNamingStrategy.ifPresent( + persistenceUnitConfig.implicitNamingStrategy().ifPresent( namingStrategy -> descriptor.getProperties() .setProperty(AvailableSettings.IMPLICIT_NAMING_STRATEGY, namingStrategy)); // Metadata builder contributor - persistenceUnitConfig.metadataBuilderContributor.ifPresent( + persistenceUnitConfig.metadataBuilderContributor().ifPresent( className -> descriptor.getProperties() .setProperty(EntityManagerFactoryBuilderImpl.METADATA_BUILDER_CONTRIBUTOR, className)); // Mapping - if (persistenceUnitConfig.mapping.timezone.timeZoneDefaultStorage.isPresent()) { + if (persistenceUnitConfig.mapping().timezone().timeZoneDefaultStorage().isPresent()) { descriptor.getProperties().setProperty(AvailableSettings.TIMEZONE_DEFAULT_STORAGE, - persistenceUnitConfig.mapping.timezone.timeZoneDefaultStorage.get().name()); + persistenceUnitConfig.mapping().timezone().timeZoneDefaultStorage().get().name()); } descriptor.getProperties().setProperty(AvailableSettings.PREFERRED_POOLED_OPTIMIZER, - persistenceUnitConfig.mapping.id.optimizer.idOptimizerDefault + persistenceUnitConfig.mapping().id().optimizer().idOptimizerDefault() .orElse(HibernateOrmConfigPersistenceUnit.IdOptimizerType.POOLED_LO).configName); //charset descriptor.getProperties().setProperty(AvailableSettings.HBM2DDL_CHARSET_NAME, - persistenceUnitConfig.database.charset.name()); + persistenceUnitConfig.database().charset().name()); // Quoting strategy - if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL - || persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS - || persistenceUnitConfig.database.globallyQuotedIdentifiers) { + if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ALL + || persistenceUnitConfig.quoteIdentifiers() + .strategy() == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS + || persistenceUnitConfig.database().globallyQuotedIdentifiers()) { descriptor.getProperties().setProperty(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, "true"); } - if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS) { + if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS) { descriptor.getProperties().setProperty( AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS_SKIP_COLUMN_DEFINITIONS, "true"); - } else if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ONLY_KEYWORDS) { + } else if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ONLY_KEYWORDS) { descriptor.getProperties().setProperty(AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED, "true"); } // Query - int batchSize = firstPresent(persistenceUnitConfig.fetch.batchSize, persistenceUnitConfig.batchFetchSize) + int batchSize = firstPresent(persistenceUnitConfig.fetch().batchSize(), persistenceUnitConfig.batchFetchSize()) .orElse(16); if (batchSize > 0) { descriptor.getProperties().setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE, @@ -991,49 +992,49 @@ private static void producePersistenceUnitDescriptorFromConfig( descriptor.getProperties().setProperty(AvailableSettings.BATCH_FETCH_STYLE, BatchFetchStyle.PADDED.toString()); } - if (persistenceUnitConfig.fetch.maxDepth.isPresent()) { - setMaxFetchDepth(descriptor, persistenceUnitConfig.fetch.maxDepth); - } else if (persistenceUnitConfig.maxFetchDepth.isPresent()) { - setMaxFetchDepth(descriptor, persistenceUnitConfig.maxFetchDepth); + if (persistenceUnitConfig.fetch().maxDepth().isPresent()) { + setMaxFetchDepth(descriptor, persistenceUnitConfig.fetch().maxDepth()); + } else if (persistenceUnitConfig.maxFetchDepth().isPresent()) { + setMaxFetchDepth(descriptor, persistenceUnitConfig.maxFetchDepth()); } descriptor.getProperties().setProperty(AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, Integer.toString( - persistenceUnitConfig.query.queryPlanCacheMaxSize)); + persistenceUnitConfig.query().queryPlanCacheMaxSize())); descriptor.getProperties().setProperty(AvailableSettings.DEFAULT_NULL_ORDERING, - persistenceUnitConfig.query.defaultNullOrdering.name().toLowerCase(Locale.ROOT)); + persistenceUnitConfig.query().defaultNullOrdering().name().toLowerCase(Locale.ROOT)); descriptor.getProperties().setProperty(AvailableSettings.IN_CLAUSE_PARAMETER_PADDING, - String.valueOf(persistenceUnitConfig.query.inClauseParameterPadding)); + String.valueOf(persistenceUnitConfig.query().inClauseParameterPadding())); // Disable sequence validations: they are reportedly slow, and people already get the same validation from normal schema validation descriptor.getProperties().put(AvailableSettings.SEQUENCE_INCREMENT_SIZE_MISMATCH_STRATEGY, SequenceMismatchStrategy.NONE); // JDBC - persistenceUnitConfig.jdbc.timezone.ifPresent( + persistenceUnitConfig.jdbc().timezone().ifPresent( timezone -> descriptor.getProperties().setProperty(AvailableSettings.JDBC_TIME_ZONE, timezone)); - persistenceUnitConfig.jdbc.statementFetchSize.ifPresent( + persistenceUnitConfig.jdbc().statementFetchSize().ifPresent( fetchSize -> descriptor.getProperties().setProperty(AvailableSettings.STATEMENT_FETCH_SIZE, String.valueOf(fetchSize))); - persistenceUnitConfig.jdbc.statementBatchSize.ifPresent( + persistenceUnitConfig.jdbc().statementBatchSize().ifPresent( fetchSize -> descriptor.getProperties().setProperty(AvailableSettings.STATEMENT_BATCH_SIZE, String.valueOf(fetchSize))); // Statistics - if (hibernateOrmConfig.metrics.enabled - || (hibernateOrmConfig.statistics.isPresent() && hibernateOrmConfig.statistics.get())) { + if (hibernateOrmConfig.metrics().enabled() + || (hibernateOrmConfig.statistics().isPresent() && hibernateOrmConfig.statistics().get())) { descriptor.getProperties().setProperty(AvailableSettings.GENERATE_STATISTICS, "true"); //When statistics are enabled, the default in Hibernate ORM is to also log them after each // session; turn that off by default as it's very noisy: descriptor.getProperties().setProperty(AvailableSettings.LOG_SESSION_METRICS, - String.valueOf(hibernateOrmConfig.logSessionMetrics.orElse(false))); + String.valueOf(hibernateOrmConfig.logSessionMetrics().orElse(false))); } // sql-load-scripts - List importFiles = getSqlLoadScript(persistenceUnitConfig.sqlLoadScript, launchMode); + List importFiles = getSqlLoadScript(persistenceUnitConfig.sqlLoadScript(), launchMode); if (!importFiles.isEmpty()) { for (String importFile : importFiles) { @@ -1044,19 +1045,19 @@ private static void producePersistenceUnitDescriptorFromConfig( throw new ConfigurationException( "Unable to interpret path referenced in '" + HibernateOrmRuntimeConfig.puPropertyKey(persistenceUnitName, "sql-load-script") + "=" - + String.join(",", persistenceUnitConfig.sqlLoadScript.get()) + + String.join(",", persistenceUnitConfig.sqlLoadScript().get()) + "': " + e.getMessage()); } if (loadScriptPath != null && !Files.isDirectory(loadScriptPath)) { // enlist resource if present nativeImageResources.produce(new NativeImageResourceBuildItem(importFile)); - } else if (persistenceUnitConfig.sqlLoadScript.isPresent()) { + } else if (persistenceUnitConfig.sqlLoadScript().isPresent()) { //raise exception if explicit file is not present (i.e. not the default) throw new ConfigurationException( "Unable to find file referenced in '" + HibernateOrmRuntimeConfig.puPropertyKey(persistenceUnitName, "sql-load-script") + "=" - + String.join(",", persistenceUnitConfig.sqlLoadScript.get()) + + String.join(",", persistenceUnitConfig.sqlLoadScript().get()) + "'. Remove property or add file to your path."); } // in dev mode we want to make sure that we watch for changes to file even if it doesn't currently exist @@ -1065,7 +1066,7 @@ private static void producePersistenceUnitDescriptorFromConfig( } // only set the found import files if configured - if (persistenceUnitConfig.sqlLoadScript.isPresent()) { + if (persistenceUnitConfig.sqlLoadScript().isPresent()) { descriptor.getProperties().setProperty(AvailableSettings.HBM2DDL_IMPORT_FILES, String.join(",", importFiles)); } } else { @@ -1074,7 +1075,7 @@ private static void producePersistenceUnitDescriptorFromConfig( } // Caching - if (persistenceUnitConfig.secondLevelCachingEnabled) { + if (persistenceUnitConfig.secondLevelCachingEnabled()) { Properties p = descriptor.getProperties(); //Only set these if the user isn't making an explicit choice: p.putIfAbsent(USE_DIRECT_REFERENCE_CACHE_ENTRIES, Boolean.TRUE); @@ -1097,7 +1098,7 @@ private static void producePersistenceUnitDescriptorFromConfig( // Hibernate Validator integration: we force the callback mode to have bootstrap errors reported rather than validation ignored // if there is any issue when bootstrapping Hibernate Validator. if (capabilities.isPresent(Capability.HIBERNATE_VALIDATOR)) { - if (persistenceUnitConfig.validation.enabled) { + if (persistenceUnitConfig.validation().enabled()) { descriptor.getProperties().setProperty(AvailableSettings.JAKARTA_VALIDATION_MODE, ValidationMode.CALLBACK.name()); } else { @@ -1107,7 +1108,7 @@ private static void producePersistenceUnitDescriptorFromConfig( // Discriminator Column descriptor.getProperties().setProperty(AvailableSettings.IGNORE_EXPLICIT_DISCRIMINATOR_COLUMNS_FOR_JOINED_SUBCLASS, - String.valueOf(persistenceUnitConfig.discriminator.ignoreExplicitForJoined)); + String.valueOf(persistenceUnitConfig.discriminator().ignoreExplicitForJoined())); persistenceUnitDescriptors.produce( new PersistenceUnitDescriptorBuildItem(descriptor, @@ -1117,9 +1118,9 @@ private static void producePersistenceUnitDescriptorFromConfig( jdbcDataSource.map(JdbcDataSourceBuildItem::getDbKind), jdbcDataSource.flatMap(JdbcDataSourceBuildItem::getDbVersion), multiTenancyStrategy, - hibernateOrmConfig.database.ormCompatibilityVersion, - persistenceUnitConfig.unsupportedProperties), - persistenceUnitConfig.multitenantSchemaDatasource.orElse(null), + hibernateOrmConfig.database().ormCompatibilityVersion(), + persistenceUnitConfig.unsupportedProperties()), + persistenceUnitConfig.multitenantSchemaDatasource().orElse(null), xmlMappings, false, false, capabilities)); } @@ -1130,7 +1131,7 @@ private static void collectDialectConfig(String persistenceUnitName, MultiTenancyStrategy multiTenancyStrategy, BuildProducer systemProperties, BiConsumer puPropertiesCollector, Set storageEngineCollector) { - Optional explicitDialect = persistenceUnitConfig.dialect.dialect; + Optional explicitDialect = persistenceUnitConfig.dialect().dialect(); Optional dbKind = jdbcDataSource.map(JdbcDataSourceBuildItem::getDbKind); Optional explicitDbMinVersion = jdbcDataSource.flatMap(JdbcDataSourceBuildItem::getDbVersion); if (multiTenancyStrategy != MultiTenancyStrategy.DATABASE && jdbcDataSource.isEmpty()) { @@ -1182,14 +1183,14 @@ private static void collectDialectConfig(String persistenceUnitName, persistenceUnitName)); } - if (persistenceUnitConfig.dialect.storageEngine.isPresent()) { + if (persistenceUnitConfig.dialect().storageEngine().isPresent()) { // Only actually set the storage engines if MySQL or MariaDB if (isMySQLOrMariaDB(dialect.get())) { // The storage engine has to be set as a system property. // We record it so that we can later run checks (because we can only set a single value) - storageEngineCollector.add(persistenceUnitConfig.dialect.storageEngine.get()); + storageEngineCollector.add(persistenceUnitConfig.dialect().storageEngine().get()); systemProperties.produce(new SystemPropertyBuildItem(AvailableSettings.STORAGE_ENGINE, - persistenceUnitConfig.dialect.storageEngine.get())); + persistenceUnitConfig.dialect().storageEngine().get())); } else { LOG.warnf("The storage engine set through configuration property '%1$s' is being ignored" + " because the database is neither MySQL nor MariaDB.", @@ -1224,8 +1225,8 @@ private static void collectDialectConfigForPersistenceXml(String persistenceUnit private static Optional findJdbcDataSource(String persistenceUnitName, HibernateOrmConfigPersistenceUnit persistenceUnitConfig, List jdbcDataSources) { - if (persistenceUnitConfig.datasource.isPresent()) { - String dataSourceName = persistenceUnitConfig.datasource.get(); + if (persistenceUnitConfig.datasource().isPresent()) { + String dataSourceName = persistenceUnitConfig.datasource().get(); return Optional.of(jdbcDataSources.stream() .filter(i -> dataSourceName.equals(i.getName())) .findFirst() @@ -1293,22 +1294,23 @@ public static Map> getModelClassesAndPackagesPerPersistenceU // handle the default persistence unit if (enableDefaultPersistenceUnit) { - if (!hibernateOrmConfig.defaultPersistenceUnit.packages.isPresent()) { + if (!hibernateOrmConfig.defaultPersistenceUnit().packages().isPresent()) { throw new ConfigurationException("Packages must be configured for the default persistence unit."); } - for (String packageName : hibernateOrmConfig.defaultPersistenceUnit.packages.get()) { + for (String packageName : hibernateOrmConfig.defaultPersistenceUnit().packages().get()) { packageRules.computeIfAbsent(normalizePackage(packageName), p -> new HashSet<>()) .add(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME); } } // handle the named persistence units - for (Entry candidatePersistenceUnitEntry : hibernateOrmConfig.persistenceUnits + for (Entry candidatePersistenceUnitEntry : hibernateOrmConfig + .namedPersistenceUnits() .entrySet()) { String candidatePersistenceUnitName = candidatePersistenceUnitEntry.getKey(); - Set candidatePersistenceUnitPackages = candidatePersistenceUnitEntry.getValue().packages + Set candidatePersistenceUnitPackages = candidatePersistenceUnitEntry.getValue().packages() .orElseThrow(() -> new ConfigurationException(String.format(Locale.ROOT, "Packages must be configured for persistence unit '%s'.", candidatePersistenceUnitName))); @@ -1333,7 +1335,7 @@ public static Map> getModelClassesAndPackagesPerPersistenceU .add(persistenceUnitName); } } - } else if (!hibernateOrmConfig.persistenceUnits.isEmpty()) { + } else if (!hibernateOrmConfig.namedPersistenceUnits().isEmpty()) { throw new ConfigurationException( "Multiple persistence units are defined but the entities are not mapped to them. You should either use the .packages Quarkus configuration property or package-level @PersistenceUnit annotations."); } else { @@ -1441,7 +1443,7 @@ private static String normalizePackage(String pakkage) { private static boolean hasPackagesInQuarkusConfig(HibernateOrmConfig hibernateOrmConfig) { for (HibernateOrmConfigPersistenceUnit persistenceUnitConfig : hibernateOrmConfig.getAllPersistenceUnitConfigsAsMap() .values()) { - if (persistenceUnitConfig.packages.isPresent()) { + if (persistenceUnitConfig.packages().isPresent()) { return true; } } @@ -1480,7 +1482,7 @@ private static Collection getPackageLevelPersistenceUnitAnno * @return true if we're expected to ignore them */ private boolean shouldIgnorePersistenceXmlResources(HibernateOrmConfig config) { - return config.persistenceXml.ignore || Boolean.getBoolean("SKIP_PARSE_PERSISTENCE_XML"); + return config.persistenceXml().ignore() || Boolean.getBoolean("SKIP_PARSE_PERSISTENCE_XML"); } /** diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java index c47ba9e566607..018d81dafbf22 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java @@ -38,7 +38,7 @@ void devServicesAutoGenerateByDefault(List s for (Map.Entry entry : config.getAllPersistenceUnitConfigsAsMap() .entrySet()) { - Optional dataSourceName = entry.getValue().datasource; + Optional dataSourceName = entry.getValue().datasource(); List propertyKeysIndicatingDataSourceConfigured = DataSourceUtil .dataSourcePropertyKeys(dataSourceName.orElse(null), "username"); diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/metrics/HibernateOrmMetricsProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/metrics/HibernateOrmMetricsProcessor.java index 155c09b7e3957..d5567e1bca318 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/metrics/HibernateOrmMetricsProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/metrics/HibernateOrmMetricsProcessor.java @@ -33,7 +33,7 @@ public void metrics(HibernateOrmConfig config, // IF Hibernate metrics and Hibernate statistics are enabled // then define a consumer. It will only be invoked if metrics is enabled - if (config.metrics.enabled && config.statistics.orElse(true) && metricsConfiguration.isPresent()) { + if (config.metrics().enabled() && config.statistics().orElse(true) && metricsConfiguration.isPresent()) { datasourceMetrics.produce(new MetricsFactoryConsumerBuildItem(metricsRecorder.consumeMetricsFactory())); } } diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java index f98ba87694899..33421e472dba0 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java @@ -147,8 +147,6 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String throw new PersistenceException("No name provided and multiple persistence units found"); } - Map puConfigMap = hibernateOrmRuntimeConfig - .getAllPersistenceUnitConfigsAsMap(); for (RuntimePersistenceUnitDescriptor persistenceUnit : units) { log.debugf( "Checking persistence-unit [name=%s, explicit-provider=%s] against incoming persistence unit name [%s]", @@ -174,9 +172,8 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String "Attempting to boot a blocking Hibernate ORM instance on a reactive RecordedState"); } final PrevalidatedQuarkusMetadata metadata = recordedState.getMetadata(); - var puConfig = puConfigMap.getOrDefault(persistenceUnit.getConfigurationName(), - new HibernateOrmRuntimeConfigPersistenceUnit()); - if (puConfig.active.isPresent() && !puConfig.active.get()) { + var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(persistenceUnit.getConfigurationName()); + if (puConfig.active().isPresent() && !puConfig.active().get()) { throw new IllegalStateException( "Attempting to boot a deactivated Hibernate ORM persistence unit"); } @@ -228,7 +225,7 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde // Allow detection of driver/database capabilities on runtime init (was disabled during static init) runtimeSettingsBuilder.put("hibernate.temp.use_jdbc_metadata_defaults", "true"); - if (!persistenceUnitConfig.unsupportedProperties.isEmpty()) { + if (!persistenceUnitConfig.unsupportedProperties().isEmpty()) { log.warnf("Persistence-unit [%s] sets unsupported properties." + " These properties may not work correctly, and even if they do," + " that may change when upgrading to a newer version of Quarkus (even just a micro/patch version)." @@ -237,9 +234,9 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde + " and more importantly so that the configuration property is tested regularly." + " Unsupported properties being set: %s", persistenceUnitName, - persistenceUnitConfig.unsupportedProperties.keySet()); + persistenceUnitConfig.unsupportedProperties().keySet()); } - for (Map.Entry entry : persistenceUnitConfig.unsupportedProperties.entrySet()) { + for (Map.Entry entry : persistenceUnitConfig.unsupportedProperties().entrySet()) { var key = entry.getKey(); if (runtimeSettingsBuilder.get(key) != null) { log.warnf("Persistence-unit [%s] sets property '%s' to a custom value through '%s'," @@ -266,7 +263,7 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde persistenceUnitName, HibernateOrmRuntimeConfig.puPropertyKey(persistenceUnitName, "database.orm-compatibility.version"), databaseOrmCompatibilityVersion.externalRepresentation, - persistenceUnitConfig.unsupportedProperties.keySet()); + persistenceUnitConfig.unsupportedProperties().keySet()); } for (Map.Entry entry : databaseOrmCompatibilitySettings.entrySet()) { var key = entry.getKey(); @@ -403,12 +400,12 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste Builder runtimeSettingsBuilder) { // Database runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, - persistenceUnitConfig.database.generation.generation); + persistenceUnitConfig.database().generation().generation()); runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_CREATE_SCHEMAS, - String.valueOf(persistenceUnitConfig.database.generation.createSchemas)); + String.valueOf(persistenceUnitConfig.database().generation().createSchemas())); - if (persistenceUnitConfig.database.generation.haltOnError) { + if (persistenceUnitConfig.database().generation().haltOnError()) { runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_HALT_ON_ERROR, "true"); } @@ -416,41 +413,41 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_SCRIPTS_CREATE_APPEND, "false"); runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_ACTION, - persistenceUnitConfig.scripts.generation.generation); + persistenceUnitConfig.scripts().generation().generation()); - if (persistenceUnitConfig.scripts.generation.createTarget.isPresent()) { + if (persistenceUnitConfig.scripts().generation().createTarget().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_SCRIPTS_CREATE_TARGET, - persistenceUnitConfig.scripts.generation.createTarget.get()); + persistenceUnitConfig.scripts().generation().createTarget().get()); } - if (persistenceUnitConfig.scripts.generation.dropTarget.isPresent()) { + if (persistenceUnitConfig.scripts().generation().dropTarget().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_SCRIPTS_DROP_TARGET, - persistenceUnitConfig.scripts.generation.dropTarget.get()); + persistenceUnitConfig.scripts().generation().dropTarget().get()); } - persistenceUnitConfig.database.defaultCatalog.ifPresent( + persistenceUnitConfig.database().defaultCatalog().ifPresent( catalog -> runtimeSettingsBuilder.put(AvailableSettings.DEFAULT_CATALOG, catalog)); - persistenceUnitConfig.database.defaultSchema.ifPresent( + persistenceUnitConfig.database().defaultSchema().ifPresent( schema -> runtimeSettingsBuilder.put(AvailableSettings.DEFAULT_SCHEMA, schema)); // Logging - if (persistenceUnitConfig.log.sql) { + if (persistenceUnitConfig.log().sql()) { runtimeSettingsBuilder.put(AvailableSettings.SHOW_SQL, "true"); - if (persistenceUnitConfig.log.formatSql) { + if (persistenceUnitConfig.log().formatSql()) { runtimeSettingsBuilder.put(AvailableSettings.FORMAT_SQL, "true"); } } - if (persistenceUnitConfig.log.jdbcWarnings.isPresent()) { + if (persistenceUnitConfig.log().jdbcWarnings().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.LOG_JDBC_WARNINGS, - persistenceUnitConfig.log.jdbcWarnings.get().toString()); + persistenceUnitConfig.log().jdbcWarnings().get().toString()); } - if (persistenceUnitConfig.log.queriesSlowerThanMs.isPresent()) { + if (persistenceUnitConfig.log().queriesSlowerThanMs().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.LOG_SLOW_QUERY, - persistenceUnitConfig.log.queriesSlowerThanMs.get()); + persistenceUnitConfig.log().queriesSlowerThanMs().get()); } } diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java index a60b25ffc1216..59dedf1cf96e1 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java @@ -11,7 +11,7 @@ public class HibernateOrmDisabledRecorder { public void checkNoExplicitActiveTrue(HibernateOrmRuntimeConfig runtimeConfig) { for (var entry : runtimeConfig.getAllPersistenceUnitConfigsAsMap().entrySet()) { var config = entry.getValue(); - if (config.active.isPresent() && config.active.get()) { + if (config.active().isPresent() && config.active().get()) { var puName = entry.getKey(); String enabledPropertyKey = HibernateOrmRuntimeConfig.extensionPropertyKey("enabled"); String activePropertyKey = HibernateOrmRuntimeConfig.puPropertyKey(puName, "active"); diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java index 5392edca301b1..1751db32640cb 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java @@ -5,49 +5,56 @@ import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigDocSection; -import io.quarkus.runtime.annotations.ConfigItem; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefaults; +import io.smallrye.config.WithParentName; +@ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot(phase = ConfigPhase.RUN_TIME) -public class HibernateOrmRuntimeConfig { +public interface HibernateOrmRuntimeConfig { /** * Configuration for the default persistence unit. */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateOrmRuntimeConfigPersistenceUnit defaultPersistenceUnit; + @WithParentName + HibernateOrmRuntimeConfigPersistenceUnit defaultPersistenceUnit(); /** * Additional named persistence units. */ @ConfigDocSection + @WithParentName + @WithDefaults @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; + Map namedPersistenceUnits(); - public Map getAllPersistenceUnitConfigsAsMap() { + default Map getAllPersistenceUnitConfigsAsMap() { Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); + map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); + map.putAll(namedPersistenceUnits()); return map; } - public static String extensionPropertyKey(String radical) { + default HibernateOrmRuntimeConfigPersistenceUnit getPersistenceUnitOrDefault(String name) { + if (PersistenceUnitUtil.isDefaultPersistenceUnit(name)) { + // This is never null + return defaultPersistenceUnit(); + } else { + // See @WithDefaults on namedPersistenceUnits(): this never returns null + return namedPersistenceUnits().get(name); + } + } + + static String extensionPropertyKey(String radical) { return "quarkus.hibernate-orm." + radical; } - public static String puPropertyKey(String puName, String radical) { + static String puPropertyKey(String puName, String radical) { String prefix = PersistenceUnitUtil.isDefaultPersistenceUnit(puName) ? "quarkus.hibernate-orm." : "quarkus.hibernate-orm.\"" + puName + "\"."; return prefix + radical; } - - public boolean isAnyPropertySet() { - return defaultPersistenceUnit.isAnyPropertySet() || - !persistenceUnits.isEmpty(); - } } diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfigPersistenceUnit.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfigPersistenceUnit.java index a272afe7f6cac..15ff20cea6f62 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfigPersistenceUnit.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfigPersistenceUnit.java @@ -1,18 +1,19 @@ package io.quarkus.hibernate.orm.runtime; -import java.util.HashMap; import java.util.Map; import java.util.Optional; +import io.quarkus.runtime.annotations.ConfigDocDefault; import io.quarkus.runtime.annotations.ConfigDocMapKey; import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigGroup; -import io.quarkus.runtime.annotations.ConfigItem; -import io.quarkus.runtime.annotations.ConvertWith; import io.quarkus.runtime.configuration.TrimmedStringConverter; +import io.smallrye.config.WithConverter; +import io.smallrye.config.WithDefault; +import io.smallrye.config.WithParentName; @ConfigGroup -public class HibernateOrmRuntimeConfigPersistenceUnit { +public interface HibernateOrmRuntimeConfigPersistenceUnit { /** * Whether this persistence unit should be active at runtime. @@ -28,29 +29,26 @@ public class HibernateOrmRuntimeConfigPersistenceUnit { * * @asciidoclet */ - @ConfigItem(defaultValueDocumentation = "'true' if Hibernate ORM is enabled; 'false' otherwise") - public Optional active = Optional.empty(); + @ConfigDocDefault("'true' if Hibernate ORM is enabled; 'false' otherwise") + Optional active(); /** * Database related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitDatabase database = new HibernateOrmConfigPersistenceUnitDatabase(); + HibernateOrmConfigPersistenceUnitDatabase database(); /** * Database scripts related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitScripts scripts = new HibernateOrmConfigPersistenceUnitScripts(); + HibernateOrmConfigPersistenceUnitScripts scripts(); /** * Logging configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigPersistenceUnitLog log = new HibernateOrmConfigPersistenceUnitLog(); + HibernateOrmConfigPersistenceUnitLog log(); /** * Properties that should be passed on directly to Hibernate ORM. @@ -72,63 +70,43 @@ public class HibernateOrmRuntimeConfigPersistenceUnit { * * @asciidoclet */ - @ConfigItem @ConfigDocMapKey("full-property-key") - public Map unsupportedProperties = new HashMap<>(); - - public boolean isAnyPropertySet() { - return database.isAnyPropertySet() || - scripts.isAnyPropertySet() || - log.isAnyPropertySet() || - !unsupportedProperties.isEmpty(); - } + Map unsupportedProperties(); @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitDatabase { + interface HibernateOrmConfigPersistenceUnitDatabase { /** * Schema generation configuration. */ - @ConfigItem - public HibernateOrmConfigPersistenceUnitDatabaseGeneration generation = new HibernateOrmConfigPersistenceUnitDatabaseGeneration(); + HibernateOrmConfigPersistenceUnitDatabaseGeneration generation(); /** * The default catalog to use for the database objects. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional defaultCatalog = Optional.empty(); + @WithConverter(TrimmedStringConverter.class) + Optional defaultCatalog(); /** * The default schema to use for the database objects. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional defaultSchema = Optional.empty(); - - public boolean isAnyPropertySet() { - return generation.isAnyPropertySet() - || defaultCatalog.isPresent() - || defaultSchema.isPresent(); - } + @WithConverter(TrimmedStringConverter.class) + Optional defaultSchema(); + } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitScripts { + interface HibernateOrmConfigPersistenceUnitScripts { /** * Schema generation configuration. */ - @ConfigItem - public HibernateOrmConfigPersistenceUnitScriptGeneration generation = new HibernateOrmConfigPersistenceUnitScriptGeneration(); + HibernateOrmConfigPersistenceUnitScriptGeneration generation(); - public boolean isAnyPropertySet() { - return generation.isAnyPropertySet(); - } } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitDatabaseGeneration { + interface HibernateOrmConfigPersistenceUnitDatabaseGeneration { /** * Select whether the database schema is generated or not. @@ -140,94 +118,80 @@ public static class HibernateOrmConfigPersistenceUnitDatabaseGeneration { * * Accepted values: `none`, `create`, `drop-and-create`, `drop`, `update`, `validate`. */ - @ConfigItem(name = ConfigItem.PARENT, defaultValue = "none") - @ConvertWith(TrimmedStringConverter.class) - public String generation = "none"; + @WithParentName + @WithDefault("none") + @WithConverter(TrimmedStringConverter.class) + String generation(); /** * If Hibernate ORM should create the schemas automatically (for databases supporting them). */ - @ConfigItem - public boolean createSchemas = false; + @WithDefault("false") + boolean createSchemas(); /** * Whether we should stop on the first error when applying the schema. */ - @ConfigItem - public boolean haltOnError = false; - - public boolean isAnyPropertySet() { - return !"none".equals(generation) - || createSchemas - || haltOnError; - } + @WithDefault("false") + boolean haltOnError(); + } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitScriptGeneration { + interface HibernateOrmConfigPersistenceUnitScriptGeneration { /** * Select whether the database schema DDL files are generated or not. * * Accepted values: `none`, `create`, `drop-and-create`, `drop`, `update`, `validate`. */ - @ConfigItem(name = ConfigItem.PARENT, defaultValue = "none") - @ConvertWith(TrimmedStringConverter.class) - public String generation = "none"; + @WithParentName + @WithDefault("none") + @WithConverter(TrimmedStringConverter.class) + String generation(); /** * Filename or URL where the database create DDL file should be generated. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional createTarget = Optional.empty(); + @WithConverter(TrimmedStringConverter.class) + Optional createTarget(); /** * Filename or URL where the database drop DDL file should be generated. */ - @ConfigItem - @ConvertWith(TrimmedStringConverter.class) - public Optional dropTarget = Optional.empty(); - - public boolean isAnyPropertySet() { - return !"none".equals(generation) - || createTarget.isPresent() - || dropTarget.isPresent(); - } + @WithConverter(TrimmedStringConverter.class) + Optional dropTarget(); + } @ConfigGroup - public static class HibernateOrmConfigPersistenceUnitLog { + interface HibernateOrmConfigPersistenceUnitLog { /** * Show SQL logs and format them nicely. *

* Setting it to true is obviously not recommended in production. */ - @ConfigItem - public boolean sql = false; + @WithDefault("false") + boolean sql(); /** * Format the SQL logs if SQL log is enabled */ - @ConfigItem(defaultValue = "true") - public boolean formatSql = true; + @WithDefault("true") + boolean formatSql(); /** * Whether JDBC warnings should be collected and logged. */ - @ConfigItem(defaultValueDocumentation = "depends on dialect") - public Optional jdbcWarnings = Optional.empty(); + @ConfigDocDefault("depends on dialect") + Optional jdbcWarnings(); /** * If set, Hibernate will log queries that took more than specified number of milliseconds to execute. */ - @ConfigItem - public Optional queriesSlowerThanMs = Optional.empty(); + Optional queriesSlowerThanMs(); - public boolean isAnyPropertySet() { - return sql || !formatSql || jdbcWarnings.isPresent() || queriesSlowerThanMs.isPresent(); - } } } diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java index f7c05f7530e44..33ca898e198a6 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java @@ -29,13 +29,10 @@ public class JPAConfig { @Inject public JPAConfig(HibernateOrmRuntimeConfig hibernateOrmRuntimeConfig) { - Map puConfigMap = hibernateOrmRuntimeConfig - .getAllPersistenceUnitConfigsAsMap(); for (RuntimePersistenceUnitDescriptor descriptor : PersistenceUnitsHolder.getPersistenceUnitDescriptors()) { String puName = descriptor.getName(); - var puConfig = puConfigMap.getOrDefault(descriptor.getConfigurationName(), - new HibernateOrmRuntimeConfigPersistenceUnit()); - if (puConfig.active.isPresent() && !puConfig.active.get()) { + var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(descriptor.getConfigurationName()); + if (puConfig.active().isPresent() && !puConfig.active().get()) { LOGGER.infof("Hibernate ORM persistence unit '%s' was deactivated through configuration properties", puName); deactivatedPersistenceUnitNames.add(puName); diff --git a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveEnabled.java b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveEnabled.java index b99f73e8ee4e8..459f04197e42e 100644 --- a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveEnabled.java +++ b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveEnabled.java @@ -24,7 +24,7 @@ public class HibernateReactiveEnabled implements BooleanSupplier { @Override public boolean getAsBoolean() { - return config.enabled; + return config.enabled(); } } diff --git a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java index d8c2130bf2445..7a4abf1fe751e 100644 --- a/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java +++ b/extensions/hibernate-reactive/deployment/src/main/java/io/quarkus/hibernate/reactive/deployment/HibernateReactiveProcessor.java @@ -163,7 +163,7 @@ public void buildReactivePersistenceUnit( DataSourceBuildTimeConfig defaultDataSourceBuildTimeConfig = dataSourcesBuildTimeConfig.dataSources() .get(DataSourceUtil.DEFAULT_DATASOURCE_NAME); - Optional explicitDialect = hibernateOrmConfig.defaultPersistenceUnit.dialect.dialect; + Optional explicitDialect = hibernateOrmConfig.defaultPersistenceUnit().dialect().dialect(); Optional explicitDbMinVersion = defaultDataSourceBuildTimeConfig.dbVersion(); Optional dbKindOptional = DefaultDataSourceDbKindBuildItem.resolve( defaultDataSourceBuildTimeConfig.dbKind(), @@ -173,7 +173,7 @@ public void buildReactivePersistenceUnit( curateOutcomeBuildItem); if (dbKindOptional.isPresent()) { - HibernateOrmConfigPersistenceUnit persistenceUnitConfig = hibernateOrmConfig.defaultPersistenceUnit; + HibernateOrmConfigPersistenceUnit persistenceUnitConfig = hibernateOrmConfig.defaultPersistenceUnit(); ParsedPersistenceXmlDescriptor reactivePU = generateReactivePersistenceUnit( hibernateOrmConfig, index, persistenceUnitConfig, jpaModel, dbKindOptional, explicitDialect, explicitDbMinVersion, applicationArchivesBuildItem, @@ -189,8 +189,8 @@ public void buildReactivePersistenceUnit( new RecordedConfig(Optional.of(DataSourceUtil.DEFAULT_DATASOURCE_NAME), dbKindOptional, Optional.empty(), io.quarkus.hibernate.orm.runtime.migration.MultiTenancyStrategy.NONE, - hibernateOrmConfig.database.ormCompatibilityVersion, - persistenceUnitConfig.unsupportedProperties), + hibernateOrmConfig.database().ormCompatibilityVersion(), + persistenceUnitConfig.unsupportedProperties()), null, jpaModel.getXmlMappings(reactivePU.getName()), true, false, capabilities)); @@ -258,7 +258,7 @@ private static ParsedPersistenceXmlDescriptor generateReactivePersistenceUnit( desc.setTransactionType(PersistenceUnitTransactionType.RESOURCE_LOCAL); setDialectAndStorageEngine(dbKindOptional, explicitDialect, explicitDbMinVersion, dbKindDialectBuildItems, - persistenceUnitConfig.dialect.storageEngine, systemProperties, desc); + persistenceUnitConfig.dialect().storageEngine(), systemProperties, desc); desc.setExcludeUnlistedClasses(true); Map> modelClassesAndPackagesPerPersistencesUnits = HibernateOrmProcessor @@ -282,44 +282,45 @@ private static ParsedPersistenceXmlDescriptor generateReactivePersistenceUnit( } // Physical Naming Strategy - persistenceUnitConfig.physicalNamingStrategy.ifPresent( + persistenceUnitConfig.physicalNamingStrategy().ifPresent( namingStrategy -> desc.getProperties() .setProperty(AvailableSettings.PHYSICAL_NAMING_STRATEGY, namingStrategy)); // Implicit Naming Strategy - persistenceUnitConfig.implicitNamingStrategy.ifPresent( + persistenceUnitConfig.implicitNamingStrategy().ifPresent( namingStrategy -> desc.getProperties() .setProperty(AvailableSettings.IMPLICIT_NAMING_STRATEGY, namingStrategy)); // Mapping - if (persistenceUnitConfig.mapping.timezone.timeZoneDefaultStorage.isPresent()) { + if (persistenceUnitConfig.mapping().timezone().timeZoneDefaultStorage().isPresent()) { desc.getProperties().setProperty(AvailableSettings.TIMEZONE_DEFAULT_STORAGE, - persistenceUnitConfig.mapping.timezone.timeZoneDefaultStorage.get().name()); + persistenceUnitConfig.mapping().timezone().timeZoneDefaultStorage().get().name()); } desc.getProperties().setProperty(AvailableSettings.PREFERRED_POOLED_OPTIMIZER, - persistenceUnitConfig.mapping.id.optimizer.idOptimizerDefault + persistenceUnitConfig.mapping().id().optimizer().idOptimizerDefault() .orElse(HibernateOrmConfigPersistenceUnit.IdOptimizerType.POOLED_LO).configName); //charset desc.getProperties().setProperty(AvailableSettings.HBM2DDL_CHARSET_NAME, - persistenceUnitConfig.database.charset.name()); + persistenceUnitConfig.database().charset().name()); // Quoting strategy - if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL - || persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS - || persistenceUnitConfig.database.globallyQuotedIdentifiers) { + if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ALL + || persistenceUnitConfig.quoteIdentifiers() + .strategy() == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS + || persistenceUnitConfig.database().globallyQuotedIdentifiers()) { desc.getProperties().setProperty(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS, "true"); } - if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS) { + if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ALL_EXCEPT_COLUMN_DEFINITIONS) { desc.getProperties().setProperty(AvailableSettings.GLOBALLY_QUOTED_IDENTIFIERS_SKIP_COLUMN_DEFINITIONS, "true"); - } else if (persistenceUnitConfig.quoteIdentifiers.strategy == IdentifierQuotingStrategy.ONLY_KEYWORDS) { + } else if (persistenceUnitConfig.quoteIdentifiers().strategy() == IdentifierQuotingStrategy.ONLY_KEYWORDS) { desc.getProperties().setProperty(AvailableSettings.KEYWORD_AUTO_QUOTING_ENABLED, "true"); } // Query // TODO ideally we should align on ORM and use 16 as a default, but that would break applications // because of https://github.com/hibernate/hibernate-reactive/issues/742 - int batchSize = firstPresent(persistenceUnitConfig.fetch.batchSize, persistenceUnitConfig.batchFetchSize) + int batchSize = firstPresent(persistenceUnitConfig.fetch().batchSize(), persistenceUnitConfig.batchFetchSize()) .orElse(-1); if (batchSize > 0) { desc.getProperties().setProperty(AvailableSettings.DEFAULT_BATCH_FETCH_SIZE, @@ -327,41 +328,41 @@ private static ParsedPersistenceXmlDescriptor generateReactivePersistenceUnit( desc.getProperties().setProperty(AvailableSettings.BATCH_FETCH_STYLE, BatchFetchStyle.PADDED.toString()); } - if (persistenceUnitConfig.fetch.maxDepth.isPresent()) { - setMaxFetchDepth(desc, persistenceUnitConfig.fetch.maxDepth); - } else if (persistenceUnitConfig.maxFetchDepth.isPresent()) { - setMaxFetchDepth(desc, persistenceUnitConfig.maxFetchDepth); + if (persistenceUnitConfig.fetch().maxDepth().isPresent()) { + setMaxFetchDepth(desc, persistenceUnitConfig.fetch().maxDepth()); + } else if (persistenceUnitConfig.maxFetchDepth().isPresent()) { + setMaxFetchDepth(desc, persistenceUnitConfig.maxFetchDepth()); } desc.getProperties().setProperty(AvailableSettings.QUERY_PLAN_CACHE_MAX_SIZE, Integer.toString( - persistenceUnitConfig.query.queryPlanCacheMaxSize)); + persistenceUnitConfig.query().queryPlanCacheMaxSize())); desc.getProperties().setProperty(AvailableSettings.DEFAULT_NULL_ORDERING, - persistenceUnitConfig.query.defaultNullOrdering.name().toLowerCase()); + persistenceUnitConfig.query().defaultNullOrdering().name().toLowerCase()); desc.getProperties().setProperty(AvailableSettings.IN_CLAUSE_PARAMETER_PADDING, - String.valueOf(persistenceUnitConfig.query.inClauseParameterPadding)); + String.valueOf(persistenceUnitConfig.query().inClauseParameterPadding())); // JDBC - persistenceUnitConfig.jdbc.timezone.ifPresent( + persistenceUnitConfig.jdbc().timezone().ifPresent( timezone -> desc.getProperties().setProperty(AvailableSettings.JDBC_TIME_ZONE, timezone)); - persistenceUnitConfig.jdbc.statementFetchSize.ifPresent( + persistenceUnitConfig.jdbc().statementFetchSize().ifPresent( fetchSize -> desc.getProperties().setProperty(AvailableSettings.STATEMENT_FETCH_SIZE, String.valueOf(fetchSize))); - persistenceUnitConfig.jdbc.statementBatchSize.ifPresent( + persistenceUnitConfig.jdbc().statementBatchSize().ifPresent( statementBatchSize -> desc.getProperties().setProperty(AvailableSettings.STATEMENT_BATCH_SIZE, String.valueOf(statementBatchSize))); // Statistics - if (hibernateOrmConfig.metrics.enabled - || (hibernateOrmConfig.statistics.isPresent() && hibernateOrmConfig.statistics.get())) { + if (hibernateOrmConfig.metrics().enabled() + || (hibernateOrmConfig.statistics().isPresent() && hibernateOrmConfig.statistics().get())) { desc.getProperties().setProperty(AvailableSettings.GENERATE_STATISTICS, "true"); } // sql-load-script - List importFiles = getSqlLoadScript(persistenceUnitConfig.sqlLoadScript, launchMode); + List importFiles = getSqlLoadScript(persistenceUnitConfig.sqlLoadScript(), launchMode); if (!importFiles.isEmpty()) { for (String importFile : importFiles) { @@ -371,19 +372,19 @@ private static ParsedPersistenceXmlDescriptor generateReactivePersistenceUnit( // enlist resource if present nativeImageResources.produce(new NativeImageResourceBuildItem(importFile)); hotDeploymentWatchedFiles.produce(new HotDeploymentWatchedFileBuildItem(importFile)); - } else if (persistenceUnitConfig.sqlLoadScript.isPresent()) { + } else if (persistenceUnitConfig.sqlLoadScript().isPresent()) { //raise exception if explicit file is not present (i.e. not the default) String propertyName = HibernateOrmRuntimeConfig.puPropertyKey(persistenceUnitConfigName, "sql-load-script"); throw new ConfigurationException( "Unable to find file referenced in '" + propertyName + "=" - + String.join(",", persistenceUnitConfig.sqlLoadScript.get()) + + String.join(",", persistenceUnitConfig.sqlLoadScript().get()) + "'. Remove property or add file to your path.", Collections.singleton(propertyName)); } } - if (persistenceUnitConfig.sqlLoadScript.isPresent()) { + if (persistenceUnitConfig.sqlLoadScript().isPresent()) { desc.getProperties().setProperty(AvailableSettings.HBM2DDL_IMPORT_FILES, String.join(",", importFiles)); } } else { @@ -392,7 +393,7 @@ private static ParsedPersistenceXmlDescriptor generateReactivePersistenceUnit( } // Caching - if (persistenceUnitConfig.secondLevelCachingEnabled) { + if (persistenceUnitConfig.secondLevelCachingEnabled()) { Properties p = desc.getProperties(); //Only set these if the user isn't making an explicit choice: p.putIfAbsent(USE_DIRECT_REFERENCE_CACHE_ENTRIES, Boolean.TRUE); diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java index 5faa419621b96..c1047158e2ae5 100644 --- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java +++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java @@ -118,8 +118,6 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String throw new PersistenceException("No name provided and multiple persistence units found"); } - Map puConfigMap = hibernateOrmRuntimeConfig - .getAllPersistenceUnitConfigsAsMap(); for (RuntimePersistenceUnitDescriptor persistenceUnit : units) { log.debugf( "Checking persistence-unit [name=%s, explicit-provider=%s] against incoming persistence unit name [%s]", @@ -146,9 +144,8 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String RuntimeSettings.Builder runtimeSettingsBuilder = new RuntimeSettings.Builder(buildTimeSettings, integrationSettings); - var puConfig = puConfigMap.getOrDefault(persistenceUnit.getConfigurationName(), - new HibernateOrmRuntimeConfigPersistenceUnit()); - if (puConfig.active.isPresent() && !puConfig.active.get()) { + var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(persistenceUnit.getConfigurationName()); + if (puConfig.active().isPresent() && !puConfig.active().get()) { throw new IllegalStateException( "Attempting to boot a deactivated Hibernate Reactive persistence unit"); } @@ -166,7 +163,7 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String } } - if (!puConfig.unsupportedProperties.isEmpty()) { + if (!puConfig.unsupportedProperties().isEmpty()) { log.warnf("Persistence-unit [%s] sets unsupported properties." + " These properties may not work correctly, and even if they do," + " that may change when upgrading to a newer version of Quarkus (even just a micro/patch version)." @@ -175,9 +172,9 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String + " and more importantly so that the configuration property is tested regularly." + " Unsupported properties being set: %s", persistenceUnitName, - puConfig.unsupportedProperties.keySet()); + puConfig.unsupportedProperties().keySet()); } - for (Map.Entry entry : puConfig.unsupportedProperties.entrySet()) { + for (Map.Entry entry : puConfig.unsupportedProperties().entrySet()) { var key = entry.getKey(); if (runtimeSettingsBuilder.get(key) != null) { log.warnf("Persistence-unit [%s] sets property '%s' to a custom value through '%s'," @@ -311,12 +308,12 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste Builder runtimeSettingsBuilder) { // Database runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_DATABASE_ACTION, - persistenceUnitConfig.database.generation.generation); + persistenceUnitConfig.database().generation().generation()); runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_CREATE_SCHEMAS, - String.valueOf(persistenceUnitConfig.database.generation.createSchemas)); + String.valueOf(persistenceUnitConfig.database().generation().createSchemas())); - if (persistenceUnitConfig.database.generation.haltOnError) { + if (persistenceUnitConfig.database().generation().haltOnError()) { runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_HALT_ON_ERROR, "true"); } @@ -324,41 +321,41 @@ private static void injectRuntimeConfiguration(HibernateOrmRuntimeConfigPersiste runtimeSettingsBuilder.put(AvailableSettings.HBM2DDL_SCRIPTS_CREATE_APPEND, "false"); runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_ACTION, - persistenceUnitConfig.scripts.generation.generation); + persistenceUnitConfig.scripts().generation().generation()); - if (persistenceUnitConfig.scripts.generation.createTarget.isPresent()) { + if (persistenceUnitConfig.scripts().generation().createTarget().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_CREATE_TARGET, - persistenceUnitConfig.scripts.generation.createTarget.get()); + persistenceUnitConfig.scripts().generation().createTarget().get()); } - if (persistenceUnitConfig.scripts.generation.dropTarget.isPresent()) { + if (persistenceUnitConfig.scripts().generation().dropTarget().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.JAKARTA_HBM2DDL_SCRIPTS_DROP_TARGET, - persistenceUnitConfig.scripts.generation.dropTarget.get()); + persistenceUnitConfig.scripts().generation().dropTarget().get()); } - persistenceUnitConfig.database.defaultCatalog.ifPresent( + persistenceUnitConfig.database().defaultCatalog().ifPresent( catalog -> runtimeSettingsBuilder.put(AvailableSettings.DEFAULT_CATALOG, catalog)); - persistenceUnitConfig.database.defaultSchema.ifPresent( + persistenceUnitConfig.database().defaultSchema().ifPresent( schema -> runtimeSettingsBuilder.put(AvailableSettings.DEFAULT_SCHEMA, schema)); // Logging - if (persistenceUnitConfig.log.sql) { + if (persistenceUnitConfig.log().sql()) { runtimeSettingsBuilder.put(AvailableSettings.SHOW_SQL, "true"); - if (persistenceUnitConfig.log.formatSql) { + if (persistenceUnitConfig.log().formatSql()) { runtimeSettingsBuilder.put(AvailableSettings.FORMAT_SQL, "true"); } } - if (persistenceUnitConfig.log.jdbcWarnings.isPresent()) { + if (persistenceUnitConfig.log().jdbcWarnings().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.LOG_JDBC_WARNINGS, - persistenceUnitConfig.log.jdbcWarnings.get().toString()); + persistenceUnitConfig.log().jdbcWarnings().get().toString()); } - if (persistenceUnitConfig.log.queriesSlowerThanMs.isPresent()) { + if (persistenceUnitConfig.log().queriesSlowerThanMs().isPresent()) { runtimeSettingsBuilder.put(AvailableSettings.LOG_SLOW_QUERY, - persistenceUnitConfig.log.queriesSlowerThanMs.get()); + persistenceUnitConfig.log().queriesSlowerThanMs().get()); } } From 3b359084b93a8931ae8f66aaf336f20a30b795db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Mon, 12 Feb 2024 11:30:43 +0100 Subject: [PATCH 3/4] Use @WithUnnamedKey in config of Hibernate ORM/Reactive/Envers --- .../HibernateEnversDisabledProcessor.java | 2 +- .../deployment/HibernateEnversProcessor.java | 2 +- .../HibernateEnversBuildTimeConfig.java | 22 +++---------- .../envers/HibernateEnversRecorder.java | 2 +- .../orm/deployment/HibernateOrmConfig.java | 31 +++++++++--------- .../orm/deployment/HibernateOrmProcessor.java | 8 ++--- .../dev/HibernateOrmDevServicesProcessor.java | 2 +- .../FastBootHibernatePersistenceProvider.java | 2 +- .../runtime/HibernateOrmDisabledRecorder.java | 2 +- .../runtime/HibernateOrmRuntimeConfig.java | 32 +++---------------- .../hibernate/orm/runtime/JPAConfig.java | 2 +- ...tHibernateReactivePersistenceProvider.java | 2 +- 12 files changed, 35 insertions(+), 74 deletions(-) diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java index 8421fe871d5de..6a9f0c0516541 100644 --- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java +++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversDisabledProcessor.java @@ -37,7 +37,7 @@ public void disableHibernateEnversStaticInit(HibernateEnversRecorder recorder, // TODO move this to runtime init once we implement in Hibernate ORM a way // to remove entity types from the metamodel on runtime init public void checkNoExplicitActiveTrue(HibernateEnversBuildTimeConfig buildTimeConfig) { - for (var entry : buildTimeConfig.getAllPersistenceUnitConfigsAsMap().entrySet()) { + for (var entry : buildTimeConfig.persistenceUnits().entrySet()) { var config = entry.getValue(); if (config.active().isPresent() && config.active().get()) { var puName = entry.getKey(); diff --git a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java index bbad18e193117..d4f135cbee5c7 100644 --- a/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java +++ b/extensions/hibernate-envers/deployment/src/main/java/io/quarkus/hibernate/envers/deployment/HibernateEnversProcessor.java @@ -40,7 +40,7 @@ public void registerEnversReflections(BuildProducer re .produce(ReflectiveClassBuildItem.builder("org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity") .methods().build()); - for (HibernateEnversBuildTimeConfigPersistenceUnit pu : buildTimeConfig.getAllPersistenceUnitConfigsAsMap().values()) { + for (HibernateEnversBuildTimeConfigPersistenceUnit pu : buildTimeConfig.persistenceUnits().values()) { pu.revisionListener().ifPresent( s -> reflectiveClass.produce(ReflectiveClassBuildItem.builder(s).methods().fields().build())); pu.auditStrategy().ifPresent( diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java index 36dda59900664..e88e1c94d6758 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversBuildTimeConfig.java @@ -1,16 +1,15 @@ package io.quarkus.hibernate.envers; import java.util.Map; -import java.util.TreeMap; import io.quarkus.hibernate.orm.runtime.PersistenceUnitUtil; import io.quarkus.runtime.annotations.ConfigDocMapKey; -import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; import io.smallrye.config.ConfigMapping; import io.smallrye.config.WithDefault; import io.smallrye.config.WithParentName; +import io.smallrye.config.WithUnnamedKey; @ConfigMapping(prefix = "quarkus.hibernate-envers") @ConfigRoot(phase = ConfigPhase.BUILD_AND_RUN_TIME_FIXED) @@ -30,25 +29,12 @@ public interface HibernateEnversBuildTimeConfig { boolean enabled(); /** - * Configuration for the default persistence unit. + * Configuration for persistence units. */ @WithParentName - HibernateEnversBuildTimeConfigPersistenceUnit defaultPersistenceUnit(); - - /** - * Configuration for additional named persistence units. - */ - @ConfigDocSection - @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) @ConfigDocMapKey("persistence-unit-name") - Map namedPersistenceUnits(); - - default Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); - map.putAll(namedPersistenceUnits()); - return map; - } + Map persistenceUnits(); static String extensionPropertyKey(String radical) { return "quarkus.hibernate-envers." + radical; diff --git a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java index 8d19a86da7b6e..3c32373213bae 100644 --- a/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java +++ b/extensions/hibernate-envers/runtime/src/main/java/io/quarkus/hibernate/envers/HibernateEnversRecorder.java @@ -31,7 +31,7 @@ private HibernateEnversIntegrationStaticInitListener(HibernateEnversBuildTimeCon @Override public void contributeBootProperties(BiConsumer propertyCollector) { - var puConfig = buildTimeConfig.getAllPersistenceUnitConfigsAsMap().get(puName); + var puConfig = buildTimeConfig.persistenceUnits().get(puName); if (puConfig == null) { // Leave Envers unconfigured, but still activate it. return; diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java index dc14eadbfe3fd..32e60b297619c 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/HibernateOrmConfig.java @@ -16,6 +16,7 @@ import io.smallrye.config.WithDefaults; import io.smallrye.config.WithName; import io.smallrye.config.WithParentName; +import io.smallrye.config.WithUnnamedKey; @ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot @@ -40,19 +41,24 @@ public interface HibernateOrmConfig { HibernateOrmConfigDatabase database(); /** - * Configuration for the default persistence unit. + * Configuration for persistence units. */ @WithParentName - HibernateOrmConfigPersistenceUnit defaultPersistenceUnit(); - - /** - * Additional named persistence units. - */ - @ConfigDocSection - @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) @WithDefaults @ConfigDocMapKey("persistence-unit-name") - Map namedPersistenceUnits(); + Map persistenceUnits(); + + default HibernateOrmConfigPersistenceUnit defaultPersistenceUnit() { + return persistenceUnits().get(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME); + } + + default Map namedPersistenceUnits() { + Map map = new TreeMap<>(); + map.putAll(persistenceUnits()); + map.remove(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME); + return map; + } /** * Configuration for the {@code persistence.xml} handling. @@ -94,13 +100,6 @@ default boolean isAnyNonPersistenceXmlPropertySet() { metrics().isAnyPropertySet(); } - default Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); - map.putAll(namedPersistenceUnits()); - return map; - } - @ConfigGroup interface HibernateOrmConfigPersistenceXml { 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 192f56c3cdee4..0d96b8375dc2a 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 @@ -202,7 +202,7 @@ void checkTransactionsSupport(Capabilities capabilities, BuildProducer additionalApplicationArchiveMarkers) { - for (HibernateOrmConfigPersistenceUnit persistenceUnit : hibernateOrmConfig.getAllPersistenceUnitConfigsAsMap() + for (HibernateOrmConfigPersistenceUnit persistenceUnit : hibernateOrmConfig.persistenceUnits() .values()) { if (persistenceUnit.packages().isPresent()) { for (String pakkage : persistenceUnit.packages().get()) { @@ -217,7 +217,7 @@ void includeArchivesHostingEntityPackagesInIndex(HibernateOrmConfig hibernateOrm @Consume(ServiceStartBuildItem.class) @BuildStep(onlyIf = IsDevelopment.class) void warnOfSchemaProblems(HibernateOrmConfig config, HibernateOrmRecorder recorder) { - for (var e : config.getAllPersistenceUnitConfigsAsMap().entrySet()) { + for (var e : config.persistenceUnits().entrySet()) { if (e.getValue().validateInDevMode()) { recorder.doValidation(e.getKey()); } @@ -377,7 +377,7 @@ public void contributePersistenceXmlToJpaModel( public void contributeQuarkusConfigToJpaModel( BuildProducer jpaModelPuContributions, HibernateOrmConfig hibernateOrmConfig) { - for (Entry entry : hibernateOrmConfig.getAllPersistenceUnitConfigsAsMap() + for (Entry entry : hibernateOrmConfig.persistenceUnits() .entrySet()) { String name = entry.getKey(); HibernateOrmConfigPersistenceUnit config = entry.getValue(); @@ -1441,7 +1441,7 @@ private static String normalizePackage(String pakkage) { } private static boolean hasPackagesInQuarkusConfig(HibernateOrmConfig hibernateOrmConfig) { - for (HibernateOrmConfigPersistenceUnit persistenceUnitConfig : hibernateOrmConfig.getAllPersistenceUnitConfigsAsMap() + for (HibernateOrmConfigPersistenceUnit persistenceUnitConfig : hibernateOrmConfig.persistenceUnits() .values()) { if (persistenceUnitConfig.packages().isPresent()) { return true; diff --git a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java index 018d81dafbf22..a6c15baddbba7 100644 --- a/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java +++ b/extensions/hibernate-orm/deployment/src/main/java/io/quarkus/hibernate/orm/deployment/dev/HibernateOrmDevServicesProcessor.java @@ -36,7 +36,7 @@ void devServicesAutoGenerateByDefault(List s Set managedSources = schemaReadyBuildItems.stream().map(JdbcDataSourceSchemaReadyBuildItem::getDatasourceNames) .collect(HashSet::new, Collection::addAll, Collection::addAll); - for (Map.Entry entry : config.getAllPersistenceUnitConfigsAsMap() + for (Map.Entry entry : config.persistenceUnits() .entrySet()) { Optional dataSourceName = entry.getValue().datasource(); List propertyKeysIndicatingDataSourceConfigured = DataSourceUtil diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java index 33421e472dba0..18fd28d86a15d 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java @@ -172,7 +172,7 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String "Attempting to boot a blocking Hibernate ORM instance on a reactive RecordedState"); } final PrevalidatedQuarkusMetadata metadata = recordedState.getMetadata(); - var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(persistenceUnit.getConfigurationName()); + var puConfig = hibernateOrmRuntimeConfig.persistenceUnits().get(persistenceUnit.getConfigurationName()); if (puConfig.active().isPresent() && !puConfig.active().get()) { throw new IllegalStateException( "Attempting to boot a deactivated Hibernate ORM persistence unit"); diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java index 59dedf1cf96e1..0ada9c5da2c2a 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmDisabledRecorder.java @@ -9,7 +9,7 @@ public class HibernateOrmDisabledRecorder { public void checkNoExplicitActiveTrue(HibernateOrmRuntimeConfig runtimeConfig) { - for (var entry : runtimeConfig.getAllPersistenceUnitConfigsAsMap().entrySet()) { + for (var entry : runtimeConfig.persistenceUnits().entrySet()) { var config = entry.getValue(); if (config.active().isPresent() && config.active().get()) { var puName = entry.getKey(); diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java index 1751db32640cb..a7410b5a49a95 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/HibernateOrmRuntimeConfig.java @@ -1,51 +1,27 @@ package io.quarkus.hibernate.orm.runtime; import java.util.Map; -import java.util.TreeMap; import io.quarkus.runtime.annotations.ConfigDocMapKey; -import io.quarkus.runtime.annotations.ConfigDocSection; import io.quarkus.runtime.annotations.ConfigPhase; import io.quarkus.runtime.annotations.ConfigRoot; import io.smallrye.config.ConfigMapping; import io.smallrye.config.WithDefaults; import io.smallrye.config.WithParentName; +import io.smallrye.config.WithUnnamedKey; @ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot(phase = ConfigPhase.RUN_TIME) public interface HibernateOrmRuntimeConfig { /** - * Configuration for the default persistence unit. + * Configuration for persistence units. */ @WithParentName - HibernateOrmRuntimeConfigPersistenceUnit defaultPersistenceUnit(); - - /** - * Additional named persistence units. - */ - @ConfigDocSection - @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) @WithDefaults @ConfigDocMapKey("persistence-unit-name") - Map namedPersistenceUnits(); - - default Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit()); - map.putAll(namedPersistenceUnits()); - return map; - } - - default HibernateOrmRuntimeConfigPersistenceUnit getPersistenceUnitOrDefault(String name) { - if (PersistenceUnitUtil.isDefaultPersistenceUnit(name)) { - // This is never null - return defaultPersistenceUnit(); - } else { - // See @WithDefaults on namedPersistenceUnits(): this never returns null - return namedPersistenceUnits().get(name); - } - } + Map persistenceUnits(); static String extensionPropertyKey(String radical) { return "quarkus.hibernate-orm." + radical; diff --git a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java index 33ca898e198a6..5a47be2751500 100644 --- a/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java +++ b/extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/JPAConfig.java @@ -31,7 +31,7 @@ public class JPAConfig { public JPAConfig(HibernateOrmRuntimeConfig hibernateOrmRuntimeConfig) { for (RuntimePersistenceUnitDescriptor descriptor : PersistenceUnitsHolder.getPersistenceUnitDescriptors()) { String puName = descriptor.getName(); - var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(descriptor.getConfigurationName()); + var puConfig = hibernateOrmRuntimeConfig.persistenceUnits().get(descriptor.getConfigurationName()); if (puConfig.active().isPresent() && !puConfig.active().get()) { LOGGER.infof("Hibernate ORM persistence unit '%s' was deactivated through configuration properties", puName); diff --git a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java index c1047158e2ae5..9fb08c246cd3f 100644 --- a/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java +++ b/extensions/hibernate-reactive/runtime/src/main/java/io/quarkus/hibernate/reactive/runtime/FastBootHibernateReactivePersistenceProvider.java @@ -144,7 +144,7 @@ private EntityManagerFactoryBuilder getEntityManagerFactoryBuilderOrNull(String RuntimeSettings.Builder runtimeSettingsBuilder = new RuntimeSettings.Builder(buildTimeSettings, integrationSettings); - var puConfig = hibernateOrmRuntimeConfig.getPersistenceUnitOrDefault(persistenceUnit.getConfigurationName()); + var puConfig = hibernateOrmRuntimeConfig.persistenceUnits().get(persistenceUnit.getConfigurationName()); if (puConfig.active().isPresent() && !puConfig.active().get()) { throw new IllegalStateException( "Attempting to boot a deactivated Hibernate Reactive persistence unit"); From 3a215165160ac16807304d9d511f75eb2830b40a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yoann=20Rodi=C3=A8re?= Date: Wed, 14 Feb 2024 13:36:18 +0100 Subject: [PATCH 4/4] Update reflection expectations for native images of jpa-postgresql* Numbers for version 23.1 updated from numbers reported by the build here: https://github.com/quarkusio/quarkus/pull/38731#issuecomment-1938958976 Numbers for version 23.0 simply incremented by the difference reported by Foivos here: https://github.com/quarkusio/quarkus/pull/38731#issuecomment-1939322324 --- .../test/resources/image-metrics/23.0/image-metrics.properties | 2 +- .../test/resources/image-metrics/23.1/image-metrics.properties | 2 +- .../test/resources/image-metrics/23.0/image-metrics.properties | 2 +- .../test/resources/image-metrics/23.1/image-metrics.properties | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.0/image-metrics.properties b/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.0/image-metrics.properties index 0c46522e9e6c2..b9a7bd94a30ed 100644 --- a/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.0/image-metrics.properties +++ b/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.0/image-metrics.properties @@ -9,7 +9,7 @@ analysis_results.fields.reachable=29906 analysis_results.fields.reachable.tolerance=3 analysis_results.types.reflection=6530 analysis_results.types.reflection.tolerance=3 -analysis_results.methods.reflection=4664 +analysis_results.methods.reflection=4781 analysis_results.methods.reflection.tolerance=3 analysis_results.fields.reflection=143 analysis_results.fields.reflection.tolerance=3 diff --git a/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.1/image-metrics.properties b/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.1/image-metrics.properties index e4babfd9d68d6..c89c4fd99b996 100644 --- a/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.1/image-metrics.properties +++ b/integration-tests/jpa-postgresql-withxml/src/test/resources/image-metrics/23.1/image-metrics.properties @@ -9,7 +9,7 @@ analysis_results.fields.reachable=29789 analysis_results.fields.reachable.tolerance=3 analysis_results.types.reflection=6522 analysis_results.types.reflection.tolerance=3 -analysis_results.methods.reflection=4682 +analysis_results.methods.reflection=4893 analysis_results.methods.reflection.tolerance=3 analysis_results.fields.reflection=163 analysis_results.fields.reflection.tolerance=3 diff --git a/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.0/image-metrics.properties b/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.0/image-metrics.properties index 437a0a1e10914..a07c14b2ebec2 100644 --- a/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.0/image-metrics.properties +++ b/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.0/image-metrics.properties @@ -9,7 +9,7 @@ analysis_results.fields.reachable=27131 analysis_results.fields.reachable.tolerance=3 analysis_results.types.reflection=6060 analysis_results.types.reflection.tolerance=3 -analysis_results.methods.reflection=4484 +analysis_results.methods.reflection=4600 analysis_results.methods.reflection.tolerance=3 analysis_results.fields.reflection=170 analysis_results.fields.reflection.tolerance=3 diff --git a/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.1/image-metrics.properties b/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.1/image-metrics.properties index 60faea182ad49..6315f449e1bf9 100644 --- a/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.1/image-metrics.properties +++ b/integration-tests/jpa-postgresql/src/test/resources/image-metrics/23.1/image-metrics.properties @@ -9,7 +9,7 @@ analysis_results.fields.reachable=27025 analysis_results.fields.reachable.tolerance=3 analysis_results.types.reflection=6048 analysis_results.types.reflection.tolerance=3 -analysis_results.methods.reflection=4495 +analysis_results.methods.reflection=4707 analysis_results.methods.reflection.tolerance=3 analysis_results.fields.reflection=192 analysis_results.fields.reflection.tolerance=3