This is an automated email from the ASF dual-hosted git repository. jdaugherty pushed a commit to branch 8.0.x in repository https://gitbox.apache.org/repos/asf/grails-core.git
commit f81c133219f625dc94c66123bf32bfcac6434662 Merge: 237b8ec59d 84bdc3a8e2 Author: James Daugherty <[email protected]> AuthorDate: Fri Feb 27 21:38:38 2026 -0500 Merge branch '7.1.x' into 8.0.x AGENTS.md | 4 + build-logic/plugins/build.gradle | 8 + .../grails/buildsrc/GrailsGroovydocPlugin.groovy | 40 +- .../buildsrc/GroovydocEnhancerExtension.groovy | 108 +++++ .../grails/buildsrc/GroovydocEnhancerPlugin.groovy | 180 +++++++ gradle/docs-dependencies.gradle | 61 +-- gradle/publish-root-config.gradle | 3 + grails-data-docs/stage/build.gradle | 27 +- .../groovy/myapp/BarIntegrationSpec.groovy | 3 +- .../groovy/myapp/FooIntegrationSpec.groovy | 3 +- .../grails/orm/HibernateCriteriaBuilder.java | 27 ++ .../query/AbstractHibernateCriteriaBuilder.java | 102 +++- .../hibernate/query/AbstractHibernateQuery.java | 99 +++- .../gorm/tests/BasicCollectionInQuerySpec.groovy | 167 +++++++ .../gorm/tests/DetachedCriteriaJoinSpec.groovy | 124 ++++- .../grails/gorm/tests/WhereQueryBugFixSpec.groovy | 106 +++++ .../WhereQueryOldIssueVerificationSpec.groovy | 371 +++++++++++++++ .../tests/compositeid/CompositeIdCriteria.groovy | 80 ++++ .../core/GrailsDataHibernate5TckManager.groovy | 44 ++ .../DataServiceMultiDataSourceSpec.groovy | 42 +- ...ataServiceMultiTenantMultiDataSourceSpec.groovy | 42 +- .../MultipleDataSourceConnectionsSpec.groovy | 72 ++- grails-data-hibernate5/docs/build.gradle | 43 +- .../multipleDataSources/dataSourceNamespaces.adoc | 2 + .../docs/asciidoc/multipleDataSources/index.adoc | 4 + .../docs/src/docs/asciidoc/services/index.adoc | 5 + .../asciidoc/services/multipleDataSources.adoc | 262 +++++++++++ grails-data-hibernate5/grails-plugin/build.gradle | 1 + .../GrailsOpenSessionInViewInterceptor.java | 138 +++++- .../support/MultiDataSourceSessionSpec.groovy | 193 ++++++++ .../MongoDbDataStoreSpringInitializerSpec.groovy | 24 +- .../mongo/core/GrailsDataMongoTckManager.groovy | 43 ++ grails-data-mongodb/docs/build.gradle | 43 +- .../gorm/tests/DeepValidateWithSaveSpec.groovy | 46 +- .../grails/gorm/tests/WhereMethodSpec.groovy | 84 ++++ .../gorm/SaveWithFailOnErrorDefaultSpec.groovy | 50 +- .../groovy/grails/gorm/DetachedCriteria.groovy | 22 +- .../datastore/gorm/finders/CountByFinder.java | 1 + .../transform/DetachedCriteriaTransformer.java | 16 +- .../gorm/GormEnhancerAllQualifiersSpec.groovy | 32 ++ .../testing/tck/base/GrailsDataTckManager.groovy | 16 + .../tck/domains/DataServiceRoutingMetric.groovy | 42 ++ .../domains/DataServiceRoutingMetricService.groovy | 39 ++ .../tck/domains/DataServiceRoutingProduct.groovy | 40 ++ .../DataServiceRoutingProductDataService.groovy | 41 ++ .../DataServiceRoutingProductService.groovy | 43 ++ .../tck/tests/CrossLayerMultiDataSourceSpec.groovy | 148 ++++++ ...CrossLayerMultiTenantMultiDataSourceSpec.groovy | 132 ++++++ .../tests/DataServiceConnectionRoutingSpec.groovy | 288 ++++++++++++ ...aServiceMultiTenantConnectionRoutingSpec.groovy | 153 ++++++ .../tck/tests/DomainMultiDataSourceSpec.groovy | 180 +++++++ .../DomainMultiTenantMultiDataSourceSpec.groovy | 168 +++++++ .../tests/WhereQueryConnectionRoutingSpec.groovy | 36 +- .../mapping/query/jpa/JpaQueryBuilder.java | 53 +++ grails-doc/build.gradle | 21 +- grails-doc/src/en/guide/commandLine.adoc | 2 +- .../guide/conf/dataSource/multipleDatasources.adoc | 244 ++++++++++ .../transactionsMultiDataSource.adoc | 2 + .../src/en/guide/testing/integrationTesting.adoc | 143 ++++++ grails-forge/gradle/doc-config.gradle | 45 +- .../analytics/postgres/AnalyticsController.java | 8 +- .../forge/analytics/postgres/Application.java | 14 +- .../analytics/postgres/FeatureRepository.java | 4 +- .../postgres/StoreGeneratedProjectStatsSpec.groovy | 10 +- .../grails/forge/api/ApplicationController.java | 2 +- ...estFramework.java => DevelopmentReloading.java} | 23 +- ...meworkDTO.java => DevelopmentReloadingDTO.java} | 64 +-- .../org/grails/forge/api/SelectOptionsDTO.java | 28 +- .../forge/api/analytics/GenerationListener.java | 2 +- .../forge/api/create/AbstractCreateController.java | 6 +- .../api/create/github/GitHubCreateController.java | 12 +- .../api/create/github/GitHubCreateOperation.java | 6 +- .../api/create/github/GitHubCreateService.java | 6 +- .../forge/api/create/zip/ZipCreateController.java | 22 +- .../forge/api/create/zip/ZipCreateOperation.java | 6 +- .../org/grails/forge/api/diff/DiffController.java | 12 +- .../org/grails/forge/api/diff/DiffOperations.java | 8 +- ...java => DevelopmentReloadingSelectOptions.java} | 14 +- .../forge/api/preview/PreviewController.java | 10 +- .../forge/api/preview/PreviewOperations.java | 6 +- .../src/main/resources/select_options.properties | 2 +- .../org/grails/forge/api/CreateClient.groovy | 12 +- .../groovy/org/grails/forge/api/DiffClient.groovy | 8 +- .../grails/forge/api/FeatureControllerSpec.groovy | 22 +- .../org/grails/forge/api/PreviewClient.groovy | 4 +- .../forge/api/ZipCreateControllerSpec.groovy | 4 +- .../java/org/grails/forge/cli/Application.java | 4 +- .../java/org/grails/forge/cli/CodeGenConfig.java | 19 +- .../grails/forge/cli/command/CreateCommand.java | 8 +- ...es.java => DevelopmentReloadingCandidates.java} | 8 +- ...ter.java => DevelopmentReloadingConverter.java} | 14 +- .../CodeGenConfigDevelopmentReloadingSpec.groovy | 288 ++++++++++++ .../org/grails/forge/cli/CommandFixture.groovy | 5 +- .../java/org/grails/forge/analytics/Generated.java | 10 +- .../grails/forge/application/ContextFactory.java | 10 +- .../generator/DefaultProjectGenerator.java | 2 +- .../application/generator/GeneratorContext.java | 15 +- .../forge/build/gradle/GradleConfiguration.java | 6 +- .../forge/build/gradle/GradleDependency.java | 10 +- ...st.java => HasDefaultDevelopmentReloading.java} | 6 +- .../grails/forge/defaults/LanguageDefaults.java | 14 +- .../java/org/grails/forge/diff/FeatureDiffer.java | 2 +- .../org/grails/forge/feature/FeatureContext.java | 32 +- .../java/org/grails/forge/feature/Features.java | 12 +- .../build/gradle/templates/buildGradle.rocker.raw | 1 - .../java/org/grails/forge/feature/cli.rocker.raw | 6 +- .../forge/feature/database/TestContainers.java | 27 +- .../org/grails/forge/feature/reloading/Jrebel.java | 16 + .../forge/feature/reloading/ReloadingFeature.java | 11 +- .../feature/reloading/SpringBootDevTools.java | 19 +- .../org/grails/forge/feature/test/AssertJ.java | 68 --- .../forge/feature/test/AssertJValidator.java | 44 -- .../forge/feature/test/GebWithTestcontainers.java | 8 +- .../feature/test/GebWithWebDriverBinaries.java | 6 +- .../org/grails/forge/feature/test/Hamcrest.java | 68 --- .../forge/feature/test/HamcrestValidator.java | 44 -- .../java/org/grails/forge/feature/test/Junit.java | 70 --- .../org/grails/forge/feature/test/Mockito.java | 2 +- .../forge/feature/test/MockitoValidator.java | 2 +- .../java/org/grails/forge/feature/test/Spock.java | 17 +- .../org/grails/forge/feature/test/TestFeature.java | 71 --- .../feature/test/template/javaJunit.rocker.raw | 49 -- .../options/AbstractJunitRockerModelProvider.java | 38 -- .../options/AbstractTestRockerModelProvider.java | 33 -- .../options/DefaultTestRockerModelProvider.java | 10 +- .../forge/options/DevelopmentReloading.java} | 27 +- .../org/grails/forge/options/FeatureFilter.java | 12 +- .../forge/options/JunitRockerModelProvider.java | 45 -- .../java/org/grails/forge/options/Language.java | 2 +- .../java/org/grails/forge/options/Options.java | 48 +- .../org/grails/forge/options/TestFramework.java | 46 +- .../forge/options/TestRockerModelProvider.java | 9 +- .../groovy/org/grails/forge/BuildBuilder.groovy | 14 +- .../dependencies/GradleConfigurationSpec.groovy | 3 +- .../GradleDependencyComparatorSpec.groovy | 3 +- .../grails/forge/build/gradle/GradleSpec.groovy | 13 +- .../feature/asciidoctor/AsciidoctorSpec.groovy | 5 +- .../feature/assetPipeline/AssetPipelineSpec.groovy | 5 +- .../feature/database/HibernateGormSpec.groovy | 5 +- .../feature/database/TestContainersSpec.groovy | 22 +- .../workflows/PlainGithubWorkflowSpec.groovy | 5 +- .../forge/feature/grails/GrailsBaseSpec.groovy | 11 +- .../feature/grails/GrailsDefaultPluginsSpec.groovy | 5 +- .../feature/grails/GrailsGradlePluginSpec.groovy | 5 +- .../grailsProfiles/GrailsProfilesSpec.groovy | 5 +- .../feature/grailsWrapper/GrailsWrapperSpec.groovy | 3 +- .../feature/lang/GrailsApplicationSpec.groovy | 7 +- .../forge/feature/logging/LogbackSpec.groovy | 4 +- .../migration/DatabaseMigrationPluginSpec.groovy | 5 +- .../forge/feature/other/ShadePluginSpec.groovy | 3 +- .../reloading/SpringBootDevToolsSpec.groovy | 24 +- .../forge/feature/spring/SpringBootSpec.groovy | 5 +- .../spring/SpringBootVirtualThreadsSpec.groovy | 5 +- .../feature/spring/SpringResourcesSpec.groovy | 3 +- .../feature/test/GebWithTestcontainersSpec.groovy | 5 +- .../test/GebWithWebDriverBinariesSpec.groovy | 11 +- .../org/grails/forge/feature/test/JUnitSpec.groovy | 39 -- .../grails/forge/feature/view/GrailsGspSpec.groovy | 9 +- .../forge/feature/view/json/ViewJsonSpec.groovy | 7 +- .../forge/feature/view/json/ViewMarkupSpec.groovy | 4 +- .../grails/forge/feature/web/GrailsWebSpec.groovy | 5 +- .../org/grails/forge/fixture/ContextFixture.groovy | 3 +- .../grails/forge/options/TestFrameworkSpec.groovy | 13 +- .../options/TestRockerModelProviderSpec.groovy | 12 +- .../org/grails/forge/utils/CommandSpec.groovy | 7 +- grails-gradle/gradle/docs-config.gradle | 35 +- .../grails/spring/GrailsApplicationContext.java | 13 + .../build.gradle | 47 +- .../grails-app/conf/application.yml} | 29 +- .../database-cleanup/grails-app/conf/logback.xml | 37 ++ .../controllers/dbcleanup/UrlMappings.groovy} | 21 +- .../grails-app/domain/dbcleanup/Author.groovy | 16 +- .../grails-app/domain/dbcleanup}/Book.groovy | 13 +- .../grails-app/init/dbcleanup/Application.groovy} | 17 +- .../database-cleanup/grails-app/views/error.gsp | 27 ++ .../groovy/dbcleanup/ClassLevelCleanupSpec.groovy | 74 +++ .../groovy/dbcleanup/MethodLevelCleanupSpec.groovy | 87 ++++ .../datasources/OsivBookController.groovy | 21 +- .../controllers/datasources/UrlMappings.groovy | 13 +- .../datasources/grails-app/domain/ds2/Book.groovy | 2 + .../domain/ds2/{Book.groovy => Chapter.groovy} | 4 +- .../datasources/grails-app/views/osivBook/show.gsp | 29 ++ .../functionaltests/DatasourceSwitchingSpec.groovy | 86 ++++ .../functionaltests/OsivGspRenderingSpec.groovy | 39 +- .../functionaltests/pages/OsivBookPage.groovy} | 17 +- grails-test-examples/geb/grails-cli.yml | 2 +- .../gorm/WhereQueryVariableScopeService.groovy | 86 ++++ ...TransactionalWhereQueryVariableScopeSpec.groovy | 109 +++++ .../gsp-layout/grails-forge-cli.yml | 2 +- .../gsp-sitemesh3/grails-forge-cli.yml | 2 +- .../grails-multiple-datasources/build.gradle | 6 + .../datasources/SecondaryBookController.groovy | 78 ++++ .../controllers/datasources/UrlMappings.groovy} | 20 +- .../MultiDataSourceWithSessionSpec.groovy | 86 ++++ .../micronaut/MicronautErsatzAdvancedSpec.groovy | 11 +- grails-testing-support-dbcleanup-core/README.md | 79 ++++ grails-testing-support-dbcleanup-core/build.gradle | 58 +++ .../cleanup/core/ApplicationContextResolver.groovy | 50 ++ .../testing/cleanup/core/DatabaseCleaner.groovy | 91 ++++ .../testing/cleanup/core/DatabaseCleanup.groovy | 106 +++++ .../cleanup/core/DatabaseCleanupContext.groovy | 220 +++++++++ .../cleanup/core/DatabaseCleanupExtension.groovy | 203 ++++++++ .../cleanup/core/DatabaseCleanupInterceptor.groovy | 176 +++++++ .../cleanup/core/DatabaseCleanupStats.groovy | 200 ++++++++ .../cleanup/core/DatasourceCleanupMapping.groovy | 156 +++++++ .../core/DefaultApplicationContextResolver.groovy | 67 +++ .../cleanup/core/TestContextHolderListener.groovy | 59 +++ ...ockframework.runtime.extension.IGlobalExtension | 1 + .../src/main/resources/META-INF/spring.factories | 1 + .../cleanup/core/DatabaseCleanupContextSpec.groovy | 478 +++++++++++++++++++ .../core/DatabaseCleanupExtensionSpec.groovy | 382 +++++++++++++++ .../core/DatabaseCleanupInterceptorSpec.groovy | 516 +++++++++++++++++++++ .../cleanup/core/DatabaseCleanupStatsSpec.groovy | 297 ++++++++++++ .../core/DatasourceCleanupMappingSpec.groovy | 175 +++++++ .../DefaultApplicationContextResolverSpec.groovy | 96 ++++ grails-testing-support-dbcleanup-h2/README.md | 28 ++ grails-testing-support-dbcleanup-h2/build.gradle | 59 +++ .../testing/cleanup/h2/H2DatabaseCleaner.groovy | 103 ++++ .../cleanup/h2/H2DatabaseCleanupHelper.groovy | 121 +++++ ...che.grails.testing.cleanup.core.DatabaseCleaner | 1 + .../cleanup/h2/H2DatabaseCleanerSpec.groovy | 229 +++++++++ .../cleanup/h2/H2DatabaseCleanupHelperSpec.groovy | 137 ++++++ .../README.md | 32 ++ .../build.gradle | 60 +++ .../postgresql/PostgresDatabaseCleaner.groovy | 132 ++++++ .../PostgresDatabaseCleanupHelper.groovy | 100 ++++ .../postgresql/PostgresContainerHolder.groovy | 66 +++ .../PostgresDatabaseCleanerFunctionalSpec.groovy | 318 +++++++++++++ .../postgresql/PostgresDatabaseCleanerSpec.groovy | 114 +++++ .../PostgresDatabaseCleanupHelperSpec.groovy | 83 ++++ .../context/GrailsWebApplicationContext.java | 4 + .../mvc/AbstractGrailsControllerUrlMappings.groovy | 12 +- settings.gradle | 5 + 233 files changed, 10837 insertions(+), 1619 deletions(-)
