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; } } 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..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,9 +37,9 @@ 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()) { + 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..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,10 +40,10 @@ public void registerEnversReflections(BuildProducer re .produce(ReflectiveClassBuildItem.builder("org.hibernate.envers.DefaultTrackingModifiedEntitiesRevisionEntity") .methods().build()); - for (HibernateEnversBuildTimeConfigPersistenceUnit pu : buildTimeConfig.getAllPersistenceUnitConfigsAsMap().values()) { - pu.revisionListener.ifPresent( + for (HibernateEnversBuildTimeConfigPersistenceUnit pu : buildTimeConfig.persistenceUnits().values()) { + 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..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,17 +1,19 @@ 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.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; +import io.smallrye.config.WithUnnamedKey; +@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 +25,22 @@ public class HibernateEnversBuildTimeConfig { * * @asciidoclet */ - @ConfigItem(defaultValue = "true") - public boolean enabled; + @WithDefault("true") + boolean enabled(); /** - * Configuration for the default persistence unit. + * Configuration for persistence units. */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateEnversBuildTimeConfigPersistenceUnit defaultPersistenceUnit; - - /** - * Configuration for additional named persistence units. - */ - @ConfigDocSection + @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; - - public Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); - return map; - } + Map persistenceUnits(); - 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..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,48 +31,48 @@ 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; } - 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..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 @@ -9,12 +9,18 @@ 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; +import io.smallrye.config.WithUnnamedKey; + +@ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot -public class HibernateOrmConfig { +public interface HibernateOrmConfig { /** * Whether Hibernate ORM is enabled *during the build*. @@ -25,49 +31,51 @@ public class HibernateOrmConfig { * * @asciidoclet */ - @ConfigItem(defaultValue = "true") - public boolean enabled; + @WithDefault("true") + boolean enabled(); /** * Database related configuration. */ - @ConfigItem @ConfigDocSection - public HibernateOrmConfigDatabase database; - - /** - * Configuration for the default persistence unit. - */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateOrmConfigPersistenceUnit defaultPersistenceUnit; + HibernateOrmConfigDatabase database(); /** - * Additional named persistence units. + * Configuration for persistence units. */ - @ConfigDocSection + @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) + @WithDefaults @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; + 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. */ - @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 +83,62 @@ 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(); - } - - public Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); - return map; + return defaultPersistenceUnit().isAnyPropertySet() || + !namedPersistenceUnits().isEmpty() || + log().isAnyPropertySet() || + statistics().isPresent() || + logSessionMetrics().isPresent() || + metrics().isAnyPropertySet(); } @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 +162,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..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,10 +202,10 @@ 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()) { + if (persistenceUnit.packages().isPresent()) { + for (String pakkage : persistenceUnit.packages().get()) { additionalApplicationArchiveMarkers .produce(new AdditionalApplicationArchiveMarkerBuildItem(pakkage.replace('.', '/'))); } @@ -217,8 +217,8 @@ void includeArchivesHostingEntityPackagesInIndex(HibernateOrmConfig hibernateOrm @Consume(ServiceStartBuildItem.class) @BuildStep(onlyIf = IsDevelopment.class) void warnOfSchemaProblems(HibernateOrmConfig config, HibernateOrmRecorder recorder) { - for (var e : config.getAllPersistenceUnitConfigsAsMap().entrySet()) { - if (e.getValue().validateInDevMode) { + for (var e : config.persistenceUnits().entrySet()) { + 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)); @@ -377,13 +377,13 @@ 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(); 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 { @@ -1439,9 +1441,9 @@ 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()) { + 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..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,9 +36,9 @@ 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; + 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..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 @@ -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.persistenceUnits().get(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..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,9 +9,9 @@ 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()) { + 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..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,53 +1,36 @@ 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.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; +import io.smallrye.config.WithUnnamedKey; +@ConfigMapping(prefix = "quarkus.hibernate-orm") @ConfigRoot(phase = ConfigPhase.RUN_TIME) -public class HibernateOrmRuntimeConfig { +public interface HibernateOrmRuntimeConfig { /** - * Configuration for the default persistence unit. + * Configuration for persistence units. */ - @ConfigItem(name = ConfigItem.PARENT) - public HibernateOrmRuntimeConfigPersistenceUnit defaultPersistenceUnit; - - /** - * Additional named persistence units. - */ - @ConfigDocSection + @WithParentName + @WithUnnamedKey(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME) + @WithDefaults @ConfigDocMapKey("persistence-unit-name") - @ConfigItem(name = ConfigItem.PARENT) - public Map persistenceUnits; + Map persistenceUnits(); - public Map getAllPersistenceUnitConfigsAsMap() { - Map map = new TreeMap<>(); - if (defaultPersistenceUnit != null) { - map.put(PersistenceUnitUtil.DEFAULT_PERSISTENCE_UNIT_NAME, defaultPersistenceUnit); - } - map.putAll(persistenceUnits); - return map; - } - - public static String extensionPropertyKey(String radical) { + 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..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 @@ -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.persistenceUnits().get(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..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 @@ -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.persistenceUnits().get(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()); } } 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