You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@grails.apache.org by "codeconsole (via GitHub)" <gi...@apache.org> on 2026/08/26 18:07:57 UTC
[PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
codeconsole opened a new pull request, #16230:
URL: https://github.com/apache/grails-core/pull/16230
## Summary
- Replace the default FutureTask-based promise implementation with a Groovy-friendly `CompletableFuture` implementation while retaining the existing `Promise` and `PromiseFactory` APIs.
- Execute Grails promises on Spring Boot's managed `applicationTaskExecutor`, including Boot lifecycle management, graceful shutdown, pool configuration, virtual-thread support, and composed task decorators.
- Propagate `GrailsWebRequest` through a Spring `TaskDecorator` and remove the legacy web-promise decorator pipeline from the active execution path.
- Use Spring's `StandardServletAsyncWebRequest`, `DeferredResult`, and `WebAsyncManager` for controller async lifecycle, completion, dispatch, timeout, and exception processing.
- Preserve explicit user-supplied promise decorators and third-party PromiseFactory providers discovered through `ServiceLoader`.
- Deprecate the retained FutureTask, raw Servlet async, legacy request decorator, and Spring factory-bean compatibility APIs for removal in a future release.
- Update the async promises, async requests, and events documentation with Spring Boot configuration and migration guidance.
## LOC
| Area | Added | Removed | Net | Deprecated | Net after deprecated removal |
|---|---:|---:|---:|---:|---:|
| Production | 467 | 88 | +379 | 1,018 | -639 |
| Tests | 356 | 41 | +315 | 0 | +315 |
| Documentation | 38 | 13 | +25 | 0 | +25 |
| **Total** | **861** | **142** | **+719** | **1,018** | **-299** |
The deprecated total includes 863 physical lines in public APIs marked `@Deprecated(forRemoval = true)` and 155 lines in the internal `FutureTaskChildPromise`, which is only required by the deprecated FutureTask implementation.
## Verification
- `grails-async-core`, `grails-async`, `grails-web-url-mappings`, and `grails-spring-security` test suites pass.
- Affected-module code style and dependency-version validation pass.
- Checkstyle, CodeNarc, PMD, and SpotBugs aggregate reports contain no violations.
- The Grails user guide renders successfully.
- The repository-wide aggregate test command was run with `--continue`. Unrelated MongoDB, PostgreSQL, and Selenium/Testcontainers suites failed after Docker exhausted its available storage; all affected module entries in the consolidated report remained green.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "codecov[bot] (via GitHub)" <gi...@apache.org>.
codecov[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5430155738
## [Codecov](https://app.codecov.io/gh/apache/grails-core/pull/16230?dropdown=coverage&src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) Report
:x: Patch coverage is `74.84663%` with `41 lines` in your changes missing coverage. Please review.
:white_check_mark: Project coverage is 54.2019%. Comparing base ([`c985acb`](https://app.codecov.io/gh/apache/grails-core/commit/c985acb1ab9c4813adfd1a08e4cebe05684557c8?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)) to head ([`b3febc2`](https://app.codecov.io/gh/apache/grails-core/commit/b3febc2d20b974b1afd89b81142c9fd1da03dfc5?dropdown=coverage&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)).
:warning: Report is 16 commits behind head on 8.0.x.
| [Files with missing lines](https://app.codecov.io/gh/apache/grails-core/pull/16230?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Patch % | Lines |
|---|---|---|
| [...tory/future/CompletableFuturePromiseFactory.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fcore%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fasync%2Ffactory%2Ffuture%2FCompletableFuturePromiseFactory.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL2NvcmUvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvYXN5bmMvZmFjdG9yeS9mdXR1cmUvQ29tcGxldGFibGVGdXR1cmVQcm9taXNlRmFjdG9yeS5ncm9vdnk=) | 72.3404% | [10 Missing and 3 partials :warning: ](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [...ync/factory/future/CompletableFuturePromise.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fcore%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fasync%2Ffactory%2Ffuture%2FCompletableFuturePromise.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL2NvcmUvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvYXN5bmMvZmFjdG9yeS9mdXR1cmUvQ29tcGxldGFibGVGdXR1cmVQcm9taXNlLmdyb292eQ==) | 79.4872% | [6 Missing and 2 partials :warning: ](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [...rc/main/groovy/grails/async/web/WebPromises.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Fgrails%2Fasync%2Fweb%2FWebPromises.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvZ3JhaWxzL2FzeW5jL3dlYi9XZWJQcm9taXNlcy5ncm9vdnk=) | 69.2308% | [8 Missing :warning: ](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [.../web/async/mvc/AsyncActionResultTransformer.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2Fmvc%2FAsyncActionResultTransformer.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9tdmMvQXN5bmNBY3Rpb25SZXN1bHRUcmFuc2Zvcm1lci5ncm9vdnk=) | 57.1429% | [2 Missing and 4 partials :warning: ](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
| [...b/mapping/mvc/UrlMappingsInfoHandlerAdapter.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-web-url-mappings%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fweb%2Fmapping%2Fmvc%2FUrlMappingsInfoHandlerAdapter.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLXdlYi11cmwtbWFwcGluZ3Mvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvd2ViL21hcHBpbmcvbXZjL1VybE1hcHBpbmdzSW5mb0hhbmRsZXJBZGFwdGVyLmdyb292eQ==) | 50.0000% | [2 Missing and 4 partials :warning: ](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) |
<details><summary>Additional details and impacted files</summary>
[](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
```diff
@@ Coverage Diff @@
## 8.0.x #16230 +/- ##
==================================================
+ Coverage 54.1599% 54.2019% +0.0420%
+ Complexity 20316 20301 -15
==================================================
Files 2107 2101 -6
Lines 101132 101026 -106
Branches 17920 17913 -7
==================================================
- Hits 54773 54758 -15
+ Misses 38551 38466 -85
+ Partials 7808 7802 -6
```
| [Files with missing lines](https://app.codecov.io/gh/apache/grails-core/pull/16230?dropdown=coverage&src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | Coverage Δ | |
|---|---|---|
| [.../grails/async/factory/PromiseFactoryBuilder.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fcore%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fasync%2Ffactory%2FPromiseFactoryBuilder.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL2NvcmUvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvYXN5bmMvZmFjdG9yeS9Qcm9taXNlRmFjdG9yeUJ1aWxkZXIuZ3Jvb3Z5) | `100.0000% <100.0000%> (ø)` | |
| [...ctory/future/CachedThreadPoolPromiseFactory.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fcore%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fasync%2Ffactory%2Ffuture%2FCachedThreadPoolPromiseFactory.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL2NvcmUvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvYXN5bmMvZmFjdG9yeS9mdXR1cmUvQ2FjaGVkVGhyZWFkUG9vbFByb21pc2VGYWN0b3J5Lmdyb292eQ==) | `53.3333% <ø> (-13.3333%)` | :arrow_down: |
| [...ails/async/factory/future/FutureTaskPromise.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fcore%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fasync%2Ffactory%2Ffuture%2FFutureTaskPromise.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL2NvcmUvc3JjL21haW4vZ3Jvb3Z5L29yZy9ncmFpbHMvYXN5bmMvZmFjdG9yeS9mdXR1cmUvRnV0dXJlVGFza1Byb21pc2UuZ3Jvb3Z5) | `68.2927% <ø> (-4.8781%)` | :arrow_down: |
| [...oovy/grails/async/web/AsyncGrailsWebRequest.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Fgrails%2Fasync%2Fweb%2FAsyncGrailsWebRequest.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvZ3JhaWxzL2FzeW5jL3dlYi9Bc3luY0dyYWlsc1dlYlJlcXVlc3QuZ3Jvb3Z5) | `58.5366% <ø> (ø)` | |
| [...s/web/async/AsyncWebRequestPromiseDecorator.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2FAsyncWebRequestPromiseDecorator.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9Bc3luY1dlYlJlcXVlc3RQcm9taXNlRGVjb3JhdG9yLmdyb292eQ==) | `68.2927% <ø> (-7.3171%)` | :arrow_down: |
| [...yncWebRequestPromiseDecoratorLookupStrategy.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2FAsyncWebRequestPromiseDecoratorLookupStrategy.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9Bc3luY1dlYlJlcXVlc3RQcm9taXNlRGVjb3JhdG9yTG9va3VwU3RyYXRlZ3kuZ3Jvb3Z5) | `66.6667% <ø> (-33.3333%)` | :arrow_down: |
| [...gins/web/async/ControllersAsyncGrailsPlugin.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2FControllersAsyncGrailsPlugin.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9Db250cm9sbGVyc0FzeW5jR3JhaWxzUGx1Z2luLmdyb292eQ==) | `100.0000% <100.0000%> (ø)` | |
| [...grails/plugins/web/async/GrailsAsyncContext.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2FGrailsAsyncContext.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9HcmFpbHNBc3luY0NvbnRleHQuZ3Jvb3Z5) | `0.0000% <ø> (ø)` | |
| [...ins/web/async/GrailsWebRequestTaskDecorator.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2FGrailsWebRequestTaskDecorator.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9HcmFpbHNXZWJSZXF1ZXN0VGFza0RlY29yYXRvci5ncm9vdnk=) | `100.0000% <100.0000%> (ø)` | |
| [...plugins/web/async/spring/PromiseFactoryBean.groovy](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree&filepath=grails-async%2Fplugin%2Fsrc%2Fmain%2Fgroovy%2Forg%2Fgrails%2Fplugins%2Fweb%2Fasync%2Fspring%2FPromiseFactoryBean.groovy&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache#diff-Z3JhaWxzLWFzeW5jL3BsdWdpbi9zcmMvbWFpbi9ncm9vdnkvb3JnL2dyYWlscy9wbHVnaW5zL3dlYi9hc3luYy9zcHJpbmcvUHJvbWlzZUZhY3RvcnlCZWFuLmdyb292eQ==) | `0.0000% <ø> (ø)` | |
| ... and [5 more](https://app.codecov.io/gh/apache/grails-core/pull/16230?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache) | |
... and [16 files with indirect coverage changes](https://app.codecov.io/gh/apache/grails-core/pull/16230/indirect-changes?src=pr&el=tree-more&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=apache)
</details>
<details><summary> :rocket: New features to boost your workflow: </summary>
- :snowflake: [Test Analytics](https://docs.codecov.com/docs/test-analytics): Detect flaky tests, report on failures, and find test suite problems.
- :package: [JS Bundle Analysis](https://docs.codecov.com/docs/javascript-bundle-analysis): Save yourself from yourself by tracking and limiting bundle sizes in JS merges.
</details>
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5429602173
## 🚨 TestLens detected 118 failed tests 🚨
Here is what you can do:
1) Inspect the test failures carefully.
2) If you are convinced that some of the tests are flaky, you can mute them below.
3) Finally, trigger a rerun by checking the rerun checkbox.
### Test Summary
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230) > :grails-test-examples-issue-11767:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > App Groovy Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Spring beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Java Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230) > :grails-test-examples-micronaut-groovy-only:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| BeanInjectionServiceSpec > test autowire Grails service by type | ❌ | 0% 🟢 |
| BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service | ❌ | 0% 🟢 |
| BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it | ❌ | 0% 🟢 |
| MicronautContextSpec > both contexts share the same application lifecycle | ❌ | 0% 🟢 |
| MicronautContextSpec > grails services are accessible from spring context | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut application context is available | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut beans can be retrieved from micronaut context | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut context has correct environment | ❌ | 0% 🟢 |
| MicronautContextSpec > spring application context is available | ❌ | 0% 🟢 |
| MicronautQualifierSpec > <span>@</span>Named\(\'regular\'\) qualifier injects correct bean | ❌ | 0% 🟢 |
| MicronautQualifierSpec > <span>@</span>Named\(\'special\'\) qualifier injects correct bean | ❌ | 0% 🟢 |
| MicronautQualifierSpec > beans can be distinguished by their class type | ❌ | 0% 🟢 |
| MicronautQualifierSpec > collection injection includes all implementations | ❌ | 0% 🟢 |
| MicronautQualifierSpec > custom <span>@</span>Qualified annotation injects correct bean | ❌ | 0% 🟢 |
| MicronautQualifierSpec > each bean implementation returns unique name | ❌ | 0% 🟢 |
| MicronautQualifierSpec > primary bean is injected when no qualifier specified | ❌ | 0% 🟢 |
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230) > :grails-test-examples-micronaut-hibernate5:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| ApplicationStartupSpec > test the application starts and the home page renders | ❌ | 0% 🟢 |
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230) > :grails-test-examples-micronaut-hibernate7:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| ApplicationStartupSpec > test the application starts and the home page renders | ❌ | 0% 🟢 |
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230) > :grails-test-examples-micronaut:integrationTest (first 40 of 95)
| Test | Runs | Flakiness |
|---|---|--:|
| BeanInjectionServiceSpec > test autowire Grails service by type | ❌ | 0% 🟢 |
| BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service | ❌ | 0% 🟢 |
| BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > <span>@</span>ConfigurationProperties bean appears exactly once in Spring context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > <span>@</span>ConfigurationProperties bean in Spring is same instance as in Micronaut context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > <span>@</span>Factory/<span>@</span>Bean created bean appears exactly once in Spring context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > Grails service appears exactly once in Spring context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > Java <span>@</span>Singleton bean appears exactly once in Spring context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > Micronaut context has exactly 4 NamedService implementations | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > NamedService implementations appear exactly 4 times in Spring context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > bridged Micronaut bean in Spring is same instance as in Micronaut context | ❌ | 0% 🟢 |
| MicronautBeanDuplicationSpec > factory-created bean in Spring is same instance as in Micronaut context | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > <span>@</span>ConfigurationProperties bean reflects application.yml config | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > Factory-created bean is a singleton instance | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > Groovy <span>@</span>Factory/<span>@</span>Bean created bean is available via Spring autowiring | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > Java <span>@</span>Singleton bean is a singleton instance | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > Java <span>@</span>Singleton bean is available via Spring autowiring | ❌ | 0% 🟢 |
| MicronautBeanTypesSpec > Java <span>@</span>Singleton bean is resolvable by its interface type | ❌ | 0% 🟢 |
| MicronautContextSpec > both contexts share the same application lifecycle | ❌ | 0% 🟢 |
| MicronautContextSpec > grails services are accessible from spring context | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut application context is available | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut beans can be retrieved from micronaut context | ❌ | 0% 🟢 |
| MicronautContextSpec > micronaut context has correct environment | ❌ | 0% 🟢 |
| MicronautContextSpec > spring application context is available | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client handles 404 response from ersatz mock | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client interface is registered as a bean in Micronaut context | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client invokes endpoint through load balancing path | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client sends DELETE with path variable | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client sends GET with path variable | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client sends POST and receives mock response | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client sends PUT and receives mock response | ❌ | 0% 🟢 |
| MicronautDeclarativeClientSpec > declarative <span>@</span>Client surfaces 500 responses | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > Grails service error handling wraps Micronaut client error from ersatz | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > HEAD request via declarative client returns only headers from ersatz | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > Micronaut client handles 401 Unauthorized from ersatz | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > Micronaut client handles 403 Forbidden from ersatz | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > Micronaut client handles 429 Too Many Requests from ersatz | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > OPTIONS request via declarative client through ersatz mock | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > PATCH request via declarative client through ersatz mock | ❌ | 0% 🟢 |
| MicronautErsatzAdvancedSpec > class-level <span>@</span>Header annotation sends header on every request through ersatz | ❌ | 0% 🟢 |
🏷️ Commit: 0343abc5af4e3ace982a44e3731aed1ae1daba57
▶️ Tests: 26831 executed
🟡 Checks: 31/77 completed
### Test Failures (first 10 of 118)
<details>
<summary><strong>ApplicationStartupSpec > test the application starts and the home page renders</strong> (:grails-test-examples-micronaut-hibernate7:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@47232c32 testClass = micronaut.hibernate7.ApplicationStartupSpec, locations = [], classes = [micronaut.hibernate7.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4c731956, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1c30cb85, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@7634f2b, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframe
work.boot.test.context.SpringBootTestAnnotation@fb11075d], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:141)
at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at micronaut.hibernate7.Application.main(Application.groovy:28)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 20 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 51 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 64 more
```
</details>
<details>
<summary><strong>ApplicationStartupSpec > test the application starts and the home page renders</strong> (:grails-test-examples-micronaut-hibernate5:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@33a8ae90 testClass = micronaut.hibernate5.ApplicationStartupSpec, locations = [], classes = [micronaut.hibernate5.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@27585351, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@5f726750, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@50b46e24, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springfram
ework.boot.test.context.SpringBootTestAnnotation@18a3ad5e], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:141)
at grails.plugin.geb.GrailsContainerGebExtension.visitSpec_closure4(GrailsContainerGebExtension.groovy:105)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at micronaut.hibernate5.Application.main(Application.groovy:28)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 20 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 51 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 64 more
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test autowire Grails service by type</strong> (:grails-test-examples-micronaut-groovy-only:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@54a1a6a8 testClass = micronautgroovyonly.BeanInjectionServiceSpec, locations = [], classes = [micronautgroovyonly.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4d9754a8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@798256c5, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@1d8b0500, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockfra
mework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@9f003fd], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:157)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test autowire Grails service by type</strong> (:grails-test-examples-micronaut:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@153f6a67 testClass = micronaut.BeanInjectionServiceSpec, locations = [], classes = [micronaut.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@55acec99, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16d07cf3, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@661d6bb6, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.S
pockContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@f7e757ba], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:157)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service</strong> (:grails-test-examples-micronaut-groovy-only:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@54a1a6a8 testClass = micronautgroovyonly.BeanInjectionServiceSpec, locations = [], classes = [micronautgroovyonly.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4d9754a8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@798256c5, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@1d8b0500, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springfram
ework.boot.test.context.SpringBootTestAnnotation@9f003fd], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at micronautgroovyonly.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 17 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 48 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 61 more
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service</strong> (:grails-test-examples-micronaut:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@153f6a67 testClass = micronaut.BeanInjectionServiceSpec, locations = [], classes = [micronaut.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@55acec99, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16d07cf3, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@661d6bb6, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.cont
ext.SpringBootTestAnnotation@f7e757ba], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at micronaut.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 17 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 48 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 61 more
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it</strong> (:grails-test-examples-micronaut-groovy-only:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@54a1a6a8 testClass = micronautgroovyonly.BeanInjectionServiceSpec, locations = [], classes = [micronautgroovyonly.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@4d9754a8, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@798256c5, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@1d8b0500, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockfra
mework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@9f003fd], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:157)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
```
</details>
<details>
<summary><strong>BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it</strong> (:grails-test-examples-micronaut:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: ApplicationContext failure threshold (1) exceeded: skipping repeated attempt to load context for [WebMergedContextConfiguration@153f6a67 testClass = micronaut.BeanInjectionServiceSpec, locations = [], classes = [micronaut.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@55acec99, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@16d07cf3, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@661d6bb6, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.S
pockContextCustomizer@0, org.springframework.boot.test.context.SpringBootTestAnnotation@f7e757ba], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:157)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4a9c188f testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@44d64d4e, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d32e714, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@18137eab, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@a7467b94], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > App Groovy Micronaut beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/32998009109/job/98272199415?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@4a9c188f testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@44d64d4e, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@7d32e714, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@18137eab, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@a7467b94], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
### Rerun Controls (first 20 of 118)
> [!NOTE]
> Checks are currently running using the configuration below.
Select tests to mute in this pull request:
🔲 ApplicationStartupSpec > test the application starts and the home page renders <!-- uniqueId=[engine:spock]/[spec:micronaut.hibernate5.ApplicationStartupSpec]/[feature:$spock_feature_1_0] -->
🔲 ApplicationStartupSpec > test the application starts and the home page renders <!-- uniqueId=[engine:spock]/[spec:micronaut.hibernate7.ApplicationStartupSpec]/[feature:$spock_feature_1_0] -->
🔲 BeanInjectionServiceSpec > test autowire Grails service by type <!-- uniqueId=[engine:spock]/[spec:micronautgroovyonly.BeanInjectionServiceSpec]/[feature:$spock_feature_0_1] -->
🔲 BeanInjectionServiceSpec > test autowire Grails service by type <!-- uniqueId=[engine:spock]/[spec:micronaut.BeanInjectionServiceSpec]/[feature:$spock_feature_0_1] -->
🔲 BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service <!-- uniqueId=[engine:spock]/[spec:micronautgroovyonly.BeanInjectionServiceSpec]/[feature:$spock_feature_0_0] -->
🔲 BeanInjectionServiceSpec > test injecting Micronaut beans in a Grails service <!-- uniqueId=[engine:spock]/[spec:micronaut.BeanInjectionServiceSpec]/[feature:$spock_feature_0_0] -->
🔲 BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it <!-- uniqueId=[engine:spock]/[spec:micronautgroovyonly.BeanInjectionServiceSpec]/[feature:$spock_feature_0_2] -->
🔲 BeanInjectionServiceSpec > test there are 1 bean for a Grails service when we inject Micronaut bean in it <!-- uniqueId=[engine:spock]/[spec:micronaut.BeanInjectionServiceSpec]/[feature:$spock_feature_0_2] -->
🔲 ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values <!-- uniqueId=[engine:spock]/[spec:issue11767.app.ConfigLoadingSpec]/[feature:$spock_feature_0_0] -->
🔲 MicronautBeanDuplicationSpec > <span>@</span>ConfigurationProperties bean appears exactly once in Spring context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_2] -->
🔲 MicronautBeanDuplicationSpec > <span>@</span>ConfigurationProperties bean in Spring is same instance as in Micronaut context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_8] -->
🔲 MicronautBeanDuplicationSpec > <span>@</span>Factory/<span>@</span>Bean created bean appears exactly once in Spring context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_1] -->
🔲 MicronautBeanDuplicationSpec > Grails service appears exactly once in Spring context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_5] -->
🔲 MicronautBeanDuplicationSpec > Java <span>@</span>Singleton bean appears exactly once in Spring context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_0] -->
🔲 MicronautBeanDuplicationSpec > Micronaut context has exactly 4 NamedService implementations <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_4] -->
🔲 MicronautBeanDuplicationSpec > NamedService implementations appear exactly 4 times in Spring context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_3] -->
🔲 MicronautBeanDuplicationSpec > bridged Micronaut bean in Spring is same instance as in Micronaut context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_6] -->
🔲 MicronautBeanDuplicationSpec > factory-created bean in Spring is same instance as in Micronaut context <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanDuplicationSpec]/[feature:$spock_feature_0_7] -->
🔲 MicronautBeanTypesSpec > <span>@</span>ConfigurationProperties bean reflects application.yml config <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanTypesSpec]/[feature:$spock_feature_0_2] -->
🔲 MicronautBeanTypesSpec > Factory-created bean is a singleton instance <!-- uniqueId=[engine:spock]/[spec:micronaut.MicronautBeanTypesSpec]/[feature:$spock_feature_0_4] -->
Reuse successful test results:
🔲 ♻️ Only rerun the tests that failed or were muted before
Click the checkbox to trigger a rerun:
🔲 **Rerun jobs**
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5703952516
## 🔎 No tests executed 🔎
🏷️ Commit: a29efe7561dea25fb0cae18c8cdb3c58a31f1407
▶️ Tests: 0 executed
⚪️ Checks: 3/3 completed
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5704588443
## 🚨 TestLens detected 1 failed test 🚨
Here is what you can do:
1) Inspect the test failures carefully.
2) If you are convinced that some of the tests are flaky, you can mute them below.
3) Finally, trigger a rerun by checking the rerun checkbox.
### Test Summary
#### [Groovy Snapshot Canary Build / Build Grails \(shard 2\)](https://github.com/apache/grails-core/actions/runs/35147371752/job/104967890240?pr=16230) > :grails-test-examples-scaffolding:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| UserControllerSpec > User list | ❌ | [7% 🟠](https://github.com/apache/grails-core/issues/16030) |
🏷️ Commit: b65a64ed6927cda6a7a095a9e46b87c4abb016d9
▶️ Tests: 56061 executed
🟡 Checks: 47/83 completed
### Test Failures
<details><summary><strong>UserControllerSpec > User list</strong> (:grails-test-examples-scaffolding:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/35147371752/job/104967890240?pr=16230">Groovy Snapshot Canary Build / Build Grails (shard 2)</a>)</summary>
```
geb.waiting.WaitTimeoutException: condition did not pass in 30 seconds (failed with exception)
at geb.waiting.Wait.waitFor(Wait.groovy:128)
at geb.waiting.DefaultWaitingSupport.doWaitFor(DefaultWaitingSupport.groovy:55)
at geb.waiting.DefaultWaitingSupport.waitFor(DefaultWaitingSupport.groovy:41)
at geb.Page.waitFor(Page.groovy:120)
at com.example.pages.LoginPage.login(LoginPage.groovy:39)
at com.example.UserControllerSpec.User list(UserControllerSpec.groovy:48)
Caused by: Assertion failed:
title != pageTitle && $('input', name: 'username').empty
| | | |
| | | false
| | 'Please sign in'
| false
'Please sign in'
at com.example.pages.LoginPage.login_closure1(LoginPage.groovy:39)
at com.example.pages.LoginPage.login_closure1(LoginPage.groovy)
at geb.waiting.Wait.waitFor(Wait.groovy:117)
... 5 more
```
</details>
### Rerun Controls
> [!NOTE]
> Checks are currently running using the configuration below.
Select tests to mute in this pull request:
🔲 UserControllerSpec > User list <!-- uniqueId=[engine:spock]/[spec:com.example.UserControllerSpec]/[feature:$spock_feature_1_0] -->
Reuse successful test results:
🔲 ♻️ Only rerun the tests that failed or were muted before
Click the checkbox to trigger a rerun:
🔲 **Rerun jobs**
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5430071889
## 🚨 TestLens detected 6 failed tests 🚨
Here is what you can do:
1) Inspect the test failures carefully.
2) If you are convinced that some of the tests are flaky, you can mute them below.
3) Finally, trigger a rerun by checking the rerun checkbox.
### Test Summary
#### [CI / Functional Tests \(Java 25, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230) > :grails-test-examples-issue-11767:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > App Groovy Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Spring beans can load plugin config values | ❌ | 0% 🟢 |
| ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Java Micronaut beans can load plugin config values | ❌ | 0% 🟢 |
#### [Groovy Snapshot Canary Build / Build Grails \(shard 2\)](https://github.com/apache/grails-core/actions/runs/33001326371/job/98287457727?pr=16230) > :grails-test-examples-async-events-pubsub-demo:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| TaskControllerSpec > test async error handling | ❌ | 0% 🟢 |
🏷️ Commit: b3febc2d20b974b1afd89b81142c9fd1da03dfc5
▶️ Tests: 44715 executed
🟡 Checks: 41/83 completed
### Test Failures
<details>
<summary><strong>TaskControllerSpec > test async error handling</strong> (:grails-test-examples-async-events-pubsub-demo:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326371/job/98287457727?pr=16230">Groovy Snapshot Canary Build / Build Grails (shard 2)</a>)</summary>
```
Condition failed with Exception:
response.assertEquals(500, 'error occurred')
| |
| org.opentest4j.AssertionFailedError: Body differs
| at org.apache.grails.testing.http.client.TestHttpResponse.verifyBody(TestHttpResponse.groovy:858)
| at org.apache.grails.testing.http.client.TestHttpResponse.assertEquals(TestHttpResponse.groovy:567)
| at org.apache.grails.testing.http.client.TestHttpResponse.assertEquals(TestHttpResponse.groovy:581)
| at pubsub.demo.TaskControllerSpec.test async error handling(TaskControllerSpec.groovy:36)
<org.apache.grails.testing.http.client.TestHttpResponse@4fd727d7 delegate=inaccessible jsonSlurperConfig=inaccessible xmlSlurperConfig=inaccessible>
at pubsub.demo.TaskControllerSpec.test async error handling(TaskControllerSpec.groovy:36)
Caused by: org.opentest4j.AssertionFailedError: Body differs
at org.apache.grails.testing.http.client.TestHttpResponse.verifyBody(TestHttpResponse.groovy:858)
at org.apache.grails.testing.http.client.TestHttpResponse.assertEquals(TestHttpResponse.groovy:567)
at org.apache.grails.testing.http.client.TestHttpResponse.assertEquals(TestHttpResponse.groovy:581)
... 1 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bbc8c82 testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@40a72ecd, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1b2df3aa, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@21da4b5f, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@e7d9d649], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > App Groovy Micronaut beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bbc8c82 testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@40a72ecd, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1b2df3aa, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@21da4b5f, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@e7d9d649], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Micronaut beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bbc8c82 testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@40a72ecd, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1b2df3aa, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@21da4b5f, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@e7d9d649], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Groovy Spring beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bbc8c82 testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@40a72ecd, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1b2df3aa, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@21da4b5f, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@e7d9d649], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
<details>
<summary><strong>ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values > Plugin Java Micronaut beans can load plugin config values</strong> (:grails-test-examples-issue-11767:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33001326403/job/98284008505?pr=16230">CI / Functional Tests (Java 25, indy=false, shard 1)</a>)</summary>
```
java.lang.IllegalStateException: Failed to load ApplicationContext for [WebMergedContextConfiguration@3bbc8c82 testClass = issue11767.app.ConfigLoadingSpec, locations = [], classes = [issue11767.app.Application], contextInitializerClasses = [], activeProfiles = [], propertySourceDescriptors = [], propertySourceProperties = ["org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true", "server.port=0"], contextCustomizers = [org.springframework.boot.test.context.PropertyMappingContextCustomizer@0, org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@40a72ecd, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@1b2df3aa, org.springframework.boot.web.server.context.SpringBootTestRandomPortContextCustomizer@21da4b5f, org.springframework.test.context.support.DynamicPropertiesContextCustomizer@0, org.spockframework.spring.mock.SpockContextCustomizer@0, org.springframework.boot.test.c
ontext.SpringBootTestAnnotation@e7d9d649], resourceBasePath = "src/main/webapp", contextLoader = grails.boot.test.GrailsApplicationContextLoader, parent = null]
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:195)
at org.springframework.test.context.cache.DefaultContextCache.put(DefaultContextCache.java:214)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:160)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:128)
at org.spockframework.util.ReflectionUtil.invokeMethod(ReflectionUtil.java:277)
at org.spockframework.spring.SpringTestContext.getApplicationContext(SpringTestContext.java:49)
at org.spockframework.spring.SpringMockTestExecutionListener.injectSpies(SpringMockTestExecutionListener.java:66)
at org.spockframework.spring.SpringMockTestExecutionListener.prepareTestInstance(SpringMockTestExecutionListener.java:62)
at org.spockframework.spring.AbstractSpringTestExecutionListener.prepareTestInstance(AbstractSpringTestExecutionListener.java:32)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:260)
at org.spockframework.spring.SpringTestContextManager.prepareTestInstance(SpringTestContextManager.java:56)
at org.spockframework.spring.SpringInterceptor.interceptInitializerMethod(SpringInterceptor.java:46)
at org.spockframework.runtime.extension.AbstractMethodInterceptor.intercept(AbstractMethodInterceptor.java:24)
at org.spockframework.runtime.extension.MethodInvocation.proceed(MethodInvocation.java:139)
at org.spockframework.runtime.extension.IDataDriver.lambda$static$0(IDataDriver.java:38)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
at org.spockframework.runtime.model.MethodInfo.invoke(MethodInfo.java:157)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1604)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsEventBus': Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1815)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:603)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.instantiateSingleton(DefaultListableBeanFactory.java:1219)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingleton(DefaultListableBeanFactory.java:1191)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:1121)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:994)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:621)
at org.springframework.boot.web.server.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:143)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:756)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:321)
at grails.boot.GrailsApp.run(GrailsApp.groovy:113)
at grails.boot.GrailsApp.run(GrailsApp.groovy:464)
at grails.boot.GrailsApp.run(GrailsApp.groovy:453)
at issue11767.app.Application.main(Application.groovy:31)
at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:281)
at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$1(SpringBootContextLoader.java:148)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.lambda$runMain$0(SpringBootContextLoader.java:593)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1465)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:600)
at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.runMain(SpringBootContextLoader.java:592)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:143)
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:114)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:247)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.lambda$loadContext$0(DefaultCacheAwareContextLoaderDelegate.java:167)
... 18 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'grailsPromiseFactory': Instantiation of supplied bean failed
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1250)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1187)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:565)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:525)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:333)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:371)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:331)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:196)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1299)
at org.grails.events.bus.spring.EventBusFactoryBean.createDefaultEventBus(EventBusFactoryBean.groovy:72)
at grails.events.bus.EventBusBuilder.build(EventBusBuilder.groovy:51)
at org.grails.events.bus.spring.EventBusFactoryBean.afterPropertiesSet(EventBusFactoryBean.groovy:66)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1862)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1811)
... 49 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'applicationTaskExecutor' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:971)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1369)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:296)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:201)
at org.springframework.beans.factory.support.BeanRegistryAdapter$SupplierContextAdapter.bean(BeanRegistryAdapter.java:318)
at org.grails.plugins.web.async.ControllersAsyncGrailsPlugin$_beanRegistrar_closure1.closure3$_closure5(ControllersAsyncGrailsPlugin.groovy:58)
at org.springframework.beans.factory.support.BeanRegistryAdapter$BeanSpecAdapter.lambda$supplier$0(BeanRegistryAdapter.java:292)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainInstanceFromSupplier(AbstractAutowireCapableBeanFactory.java:1283)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.obtainInstanceFromSupplier(DefaultListableBeanFactory.java:1026)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.obtainFromSupplier(AbstractAutowireCapableBeanFactory.java:1244)
... 62 more
```
</details>
### Rerun Controls
> [!NOTE]
> Checks are currently running using the configuration below.
Select tests to mute in this pull request:
🔲 ConfigLoadingSpec > <span>#</span>beanType beans can load plugin config values <!-- uniqueId=[engine:spock]/[spec:issue11767.app.ConfigLoadingSpec]/[feature:$spock_feature_0_0] -->
🔲 TaskControllerSpec > test async error handling <!-- uniqueId=[engine:spock]/[spec:pubsub.demo.TaskControllerSpec]/[feature:$spock_feature_0_0] -->
Reuse successful test results:
🔲 ♻️ Only rerun the tests that failed or were muted before
Click the checkbox to trigger a rerun:
🔲 **Rerun jobs**
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "codeconsole (via GitHub)" <gi...@apache.org>.
codeconsole commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5703956337
Thanks for the detailed review and probes, @matrei. Addressed the behavioral and documentation findings in five focused commits:
- H1: the default event bus now uses the promise factory's exposed executor, while retaining support for factories that implement `Executor`. Spring bean introspection keeps events-core independent of the optional async module. A regression test verifies asynchronous delivery on the shared worker.
- H2, M2, L1: only completion/execution wrappers are unwrapped; caused application exceptions retain their identity. Single and aggregate error callbacks agree, direct/chained/timed `get()` calls retain `ExecutionException`, and MVC receives the original failure.
- H3, H4: resolve `applicationTaskExecutor` by name, otherwise use the named Grails fallback with eight core threads. Tests cover additional executors/schedulers and two mutually dependent tasks.
- M1: default standalone `WebPromises` adapts the same Spring request decorator without requiring plugin initialization. Tests no longer pre-wire propagation and cover request parameters and response writing on a worker.
- L2, L3: both request entry points honor `spring.mvc.async.request-timeout`, falling back to the container default. Completion is also recorded on the request because Spring removes its async manager on completion; subsequent task submission is rejected before executing work.
- M3, L4: added the 8.0 migration guidance, Servlet API/trait deprecation notices, and documentation of the global decorator's effect on other Boot-managed executors.
- L5: left history unsquashed per the contributor's explicit instruction to retain focused commits. The cancelling historical commits remain unchanged.
Validation: Java 21 async-core, async web, events-core, and URL-mapping suites: 358 tests, one existing skip, no failures. Java 25 changed-module suites: 99 tests, one existing skip, no failures. The Java 21 async HTTP error-handling functional test also passes, as do affected-module style and dependency-version checks. No full-repository clean/aggregate sweep was run; verification used bounded workers and test parallelism.
Commits: f269620071, c8c9a0b1b2, b8796c25fd, f7da7dee19, a29efe7561. The PR summary and LOC table have been refreshed.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "jdaugherty (via GitHub)" <gi...@apache.org>.
jdaugherty commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5513535124
We've discussed the gpars removal in the past. I agree we should drop the older rxjava, etc versions but gpars I've objected to.
I think this PR is a major shift, and not necessarily a bad one, but I don't think it should go into 8.0.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5443052158
## ✅ All tests passed ✅
🏷️ Commit: c982feb634bdf226683c2b47e207a441d6e0df29
▶️ Tests: 70230 executed
⚪️ Checks: 89/89 completed
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "matrei (via GitHub)" <gi...@apache.org>.
matrei commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5709736273
## Review round 2
**Head:** `b65a64ed69` (`feature/modernize-grails-async-8.0.x`, 18 first-parent commits) · **Base:** `8.0.x` @ `a5758d657f`. The head merges upstream `8.0.x` up to the #15960 merge (`VirtualThreadPromiseFactory`); the two `8.0.x` merges after that (#16322, #16184) are not included and `upgrading80x.adoc` conflicts with them (N9).
Six commits since round 1: five fix commits (`f269620071` … `a29efe7561`) reviewed in detail below, plus the upstream merge `b65a64ed69`, covered in the post-merge addendum. The "Verified as correct" list from round 1 still holds.
**What I ran locally** (on the merged head `b65a64ed69`; the N1/N2 probes were run on `a29efe7561`, and none of the files they exercise changed in the merge)
| Check | Result |
|---|---|
| `:grails-async-core:cleanTest test` (`--no-build-cache`) | 69 tests, 0 failures, 1 skipped |
| `:grails-async:cleanTest test` (`--no-build-cache`) | 27 tests, 0 failures |
| `:grails-events-core:cleanTest test` (`--no-build-cache`) | 12 tests, 0 failures |
| `:grails-async-core:codeStyle :grails-async:codeStyle :grails-events-core:codeStyle` | pass |
| `git merge-tree origin/8.0.x pr/16230` | conflict in `upgrading80x.adoc` only |
| Throwaway probe spec (deleted afterwards) for N1 and N2 below | output quoted per finding |
**Verdict: request changes, but close.** All four High findings from round 1 are fixed and covered by tests (see "Round 1 status" at the end). The rework of the exception path exposed one new regression that the new tests miss because they only throw unchecked exceptions, and the standalone `WebPromises` fix restored propagation for the task closure but not for `then {}` callbacks, which the 7.x implementation did propagate.
---
### High
**N1. Checked exceptions thrown from a task reach `get()`/`onError` wrapped in `UndeclaredThrowableException`.**
`CompletableFuturePromiseFactory.groovy:78` submits `{ decorated.call() } as Supplier<T>`. Under `@CompileStatic` the `as` coercion still produces a `java.lang.reflect.Proxy` over `ConvertedClosure`; `Supplier.get()` declares no checked exceptions, so the proxy wraps any checked exception in `UndeclaredThrowableException` before `CompletableFuture` ever sees it. `unwrap()` (`CompletableFuturePromise.groovy:109`) only strips `CompletionException`/`ExecutionException`, so the wrapper survives. The same coercion sits in `asCompletableFuture` (`CompletableFuturePromiseFactory.groovy:144`, where `promise.get()` itself throws checked `ExecutionException`) and in the new standalone web decorator (`WebPromises.groovy:71`, `{ … } as Runnable`).
The old `FutureTask` implementation ran a `Callable`, so `task { throw new IOException() }.get()` used to throw `ExecutionException(IOException)` and `onError` received the `IOException`. Groovy code throws checked exceptions without declaring them all the time, so this is the common case, not an edge case, and it breaks `exception:` URL-mapping matches and `onError` type checks for every `IOException`/`SQLException`/`TimeoutException` coming out of a task. The new `CompletableFuturePromiseFactorySpec` cases all throw `IllegalStateException`, which is why they pass.
*Probe (standalone factory, `Promises.task { throw new IOException('io') }`):*
```
direct get(): ExecutionException -> UndeclaredThrowableException -> IOException
onError sees: UndeclaredThrowableException (cause IOException)
WebPromises: UndeclaredThrowableException (cause IOException)
```
*Fix:* never let a closure cross a proxy boundary. Either catch `Throwable` inside the coerced closure and complete the future yourself (`new CompletableFuturePromise(executor)` + `executor.execute { try { promise.complete(decorated.call()) } catch (Throwable t) { promise.completeExceptionally(t) } }`), or give `supplyAsync` a real `Supplier` (a Groovy lambda `() -> decorated.call()` compiles to invokedynamic, not a proxy). Apply the same to `asCompletableFuture` and to the `Runnable` in `WebPromises` (catch inside, stash, rethrow after `run()` returns). Add `IOException` variants of the three new `CompletableFuturePromiseFactorySpec` cases and one in `WebPromisesSpec`; they fail today.
### Medium
**N2. Standalone `WebPromises` propagates the request into `task {}` but not into `then {}`.**
The M1 fix decorates the *closure* (`WebPromises.groovy:53-76`), so the request is bound only for the duration of `work.call()` and reset in `GrailsWebRequestTaskDecorator`'s `finally` before `Supplier.get()` returns. `CompletableFuture.AsyncSupply.run()` then calls `postComplete()`, which is where `then {}` dependents (`CompletableFuturePromise.groovy:63`, plain `thenApply`) execute, so they run without a `GrailsWebRequest`. In 7.x `FutureTaskChildPromise.groovy:57` applied the factory decorators to every `then` callback, so `task { load() }.then { render it }` worked in `ControllerUnitTest` specs; it now silently loses `render`/`params` in the callback. The Boot path is fine because the `TaskDecorator` wraps the whole `run()`, including `postComplete()`.
*Probe (`WebPromises.promiseFactory = null`, latch so `then` is attached before the task completes):*
```
standalone: task sees request: true; then sees request: false
Boot-style executor + GrailsWebRequestTaskDecorator: then sees request: true
```
*Fix:* decorate the *executor*, not the closure, exactly as the plugin does: when `PromiseFactoryBuilder` yields a `CompletableFuturePromiseFactory`, build it over `Executors.newCachedThreadPool()` wrapped so each `Runnable` goes through `GrailsWebRequestTaskDecorator`; keep the lookup-strategy path only for third-party factories from `ServiceLoader`. That also removes the extra proxy boundary from N1. Add a `then {}` case to `WebPromisesSpec` that attaches the callback before the task completes (the current parameters test attaches nothing).
**N3. `spring.mvc.async.request-timeout` now fires by default for `WebPromises`, and a timeout renders as a logged 500, not a 503.**
Honouring the property is right, but the effect is now reachable in every app: Tomcat's 30 s default applies to `WebPromises.task {}` where it used to be infinite. When it fires, Spring's `TimeoutDeferredResultProcessingInterceptor` sets `AsyncRequestTimeoutException` as the concurrent result, `UrlMappingsInfoHandlerAdapter.groovy:94` rethrows it, and `GrailsExceptionResolver.java:166` unconditionally sets status 500 and logs the full stack trace at ERROR. Spring MVC's own resolvers map that exception to 503 without a stack trace. The docs (`asyncRequests.adoc:32`) say only that the timeout "ends the response lifecycle". Please either map `AsyncRequestTimeoutException` (it is an `ErrorResponse`) to its status code in `GrailsExceptionResolver`, or document that the app should add `"503"(controller: …, exception: AsyncRequestTimeoutException)` and that the 30 s Tomcat default now applies to eager web promises. A functional test that times out a `WebPromises.task {}` and asserts th
e status would pin this.
### Low
**N4. Silently dropping a promise returned after the async request completed.** `AsyncActionResultTransformer.groovy:51` returns `null` in that case, so the action's result is discarded, the task keeps running against a recycled request, and nothing is logged. `WebPromises.prepareAsyncRequest` throws `IllegalStateException` for the same situation; the transformer should be consistent (throw, or at least log at WARN) rather than swallow.
**N5. `GrailsAsyncWebRequest` naming and small nits.** The class is a static helper, not a web request, and it sits next to the deprecated `AsyncGrailsWebRequest`, which is going to confuse readers; `AsyncRequestSupport` or folding the two static methods into `WebPromises`/the transformer would be clearer. `GrailsAsyncWebRequest.groovy:41` uses `def` under `@CompileStatic`; and the timeout property is re-read and re-parsed with `DurationStyle` on every async request (`:44`). Reading the `WebMvcProperties` bean once, or caching the parsed value, would avoid that.
**N6. Fallback for a mistyped `applicationTaskExecutor` is silent.** `ControllersAsyncGrailsPlugin.groovy:76-79` catches `NoSuchBeanDefinitionException` with the same bean name, which also matches `BeanNotOfRequiredTypeException` when an app defines `applicationTaskExecutor` as a plain `Executor`. That mirrors Boot's MVC behaviour, so it is acceptable, but a DEBUG/INFO line saying which executor the promise factory ended up with would make the fallback diagnosable.
**N7. Squash still pending (round 1 L5).** The branch is now 18 first-parent commits including two upstream merges and the two URL-mapping commits that cancel each other out.
---
### Post-merge addendum (`b65a64ed69`, merge of upstream `8.0.x`)
The merge itself is clean for this PR's own code: none of the files behind N1–N7 changed, the `PromiseFactoryBuilder` conflict was resolved keeping `build(Executor)`, the merged `VirtualThreadPromiseFactorySpec` was extended to assert the builder ignores a supplied executor under the opt-in, and all three module suites pass on the merged head. Two things do change.
**N8 (Medium). The `grails.async.promiseFactory=virtual-thread` opt-in now bypasses everything this PR builds on.**
`PromiseFactoryBuilder.groovy:49-55` returns `new VirtualThreadPromiseFactory()` before looking at the executor, and the merged spec pins that. Under the opt-in, in a Boot app, `grailsPromiseFactory` is therefore a `VirtualThreadPromiseFactory`, which:
- is built on `FutureTaskPromise`, which this PR marks `@Deprecated(since = '8.0', forRemoval = true)` (`FutureTaskPromise.groovy:43`). Either the deprecation is premature, or the new factory needs to move off it before it ships in the same release.
- has no readable `executor` property (`private final ExecutorService executorService`), so `EventBusFactoryBean` falls through to the synchronous bus with the startup WARN. Round-1 H1 comes back for this mode, and `events.adoc:32` is wrong for it.
- gets neither Boot's `TaskDecorator` (it owns its executor) nor a `PromiseDecoratorLookupStrategy`, because `WebPromises.setPromiseFactory` no longer attaches one (`WebPromises.groovy:60`). On `8.0.x` today the old `setPromiseFactory` did attach `AsyncWebRequestPromiseDecoratorLookupStrategy`, so `WebPromises.task { render … }` works with the virtual-thread factory there and stops working with this PR. Same for `Promises.task {}` in a controller.
- keeps the old aggregate `onError` contract (returns an empty list instead of failing), so the "consistent `ExecutionException` semantics" section of the docs is only true for the default factory.
*Fix:* the simplest coherent option is to make `VirtualThreadPromiseFactory` a thin `CompletableFuturePromiseFactory` over `Executors.newVirtualThreadPerTaskExecutor()` (it then has the `executor` property, the same `get()`/`onError` semantics, `CompletionStage`, and no dependency on the deprecated classes), and have `ControllersAsyncGrailsPlugin` wrap whatever executor the built factory owns with the `TaskDecorator` beans. If that is out of scope for this PR, then at least restore the lookup strategy in `WebPromises.setPromiseFactory` for factories that are not `CompletableFuturePromiseFactory`, and say in `asyncPromises.adoc` that the opt-in does not share Boot's executor, event bus or request propagation. Add a plugin spec that sets the system property and asserts `grailsPromiseFactory` still propagates the request.
**N9 (Low). Needs another merge or rebase before it can land.** `git merge-tree` against the current `origin/8.0.x` conflicts in `upgrading80x.adoc`: sections 62 and 63 were added upstream after this branch merged, so "64. Promise Execution and Async Request Migration" will need renumbering again. Nothing else conflicts.
---
### Round 1 status
| Round 1 | Status | Notes |
|---|---|---|
| H1 event bus went synchronous | Fixed | `EventBusFactoryBean` reads the factory's `executor` property reflectively; `ExecutorEventBus` handles a plain `Executor` via `execute()`, no shutdown ownership. Covered by `TaskExecuterEventBusSpec`. |
| H2 `unwrap` stripped one cause level | Fixed | Only `CompletionException`/`ExecutionException` with a non-null cause are unwrapped; transformer passes the failure straight to `setErrorResult`. Covered with a caused exception in both specs. See N1 for the remaining wrapper. |
| H3 `NoUniqueBeanDefinitionException` with a second executor | Fixed | Resolved by name; spec registers `taskScheduler` + `otherExecutor`. |
| H4 single-threaded fallback | Fixed | `corePoolSize = 8`; two-promise latch test. |
| M1 standalone `WebPromises` lost the request | Partly fixed | Task closure OK; `then {}` not (N2). |
| M2 `get()` type differed between promise and child | Fixed | Both now `ExecutionException(original)`, direct and timed; the sneaky-throw overrides are gone. |
| M3 docs / upgrade note | Fixed | Upgrade section added (numbered 64 after the merge, see N9), Servlet API marked deprecated. |
| L1 aggregate `onError` type | Fixed | Both callbacks get the original. |
| L2 timeout consistency | Fixed | Both paths honour `spring.mvc.async.request-timeout` (see N3 for the consequence). |
| L3 task-after-completion guard | Fixed | `COMPLETED` request attribute set from a completion handler, checked in both entry points. |
| L4 decorator applies to `@Async` | Documented | |
| L5 squash | Open | N7 |
### Verified as correct in this round
- `CompletableFuture` semantics for the fixed `get()` path: a `supplyAsync` failure reaches `whenComplete` as `CompletionException`, `fromStage` completes the promise with the unwrapped original, and both the direct promise and its `thenApply` child report `ExecutionException(original)` from `get()` and `get(timeout)`. Spec matches observed behaviour.
- `WebAsyncManager` removes itself on completion (Spring 6.2+), so the `COMPLETED` attribute is needed; the completion handler runs in `AsyncListener.onComplete`, before Tomcat recycles the request, and the attribute is cleared with the request. Dispatch reuses the same request object with no `onComplete` in between, so the guard does not trip mid-dispatch.
- `DurationStyle.detectAndParse` defaults to milliseconds for a bare number, matching Boot's binding of `spring.mvc.async.request-timeout`; `spring-boot` is on the plugin's compile classpath transitively via `grails-core`'s `api` dependency.
- `ThreadPoolTaskExecutor` with `corePoolSize = 8` and the default unbounded queue matches Boot's defaults as documented.
- `EventBusFactoryBean`'s reflective lookup: `CompletableFuturePromiseFactory.executor` is a public final property; GPars/RxJava factories have no such property and keep the previous synchronous fallback.
- The `TaskDecorator`-on-executor design does propagate the request into `then {}` dependents in Boot mode (probe P3 above), because `AsyncSupply.run()` calls `postComplete()` inside the decorated `Runnable`.
- All three module suites and their code-style checks pass on a fresh, cache-bypassed run.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "jdaugherty (via GitHub)" <gi...@apache.org>.
jdaugherty merged PR #16230:
URL: https://github.com/apache/grails-core/pull/16230
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5436422321
## 🚨 TestLens detected 1 failed test 🚨
Here is what you can do:
1) Inspect the test failures carefully.
2) If you are convinced that some of the tests are flaky, you can mute them below.
3) Finally, trigger a rerun by checking the rerun checkbox.
### Test Summary
#### [CI / Functional Tests \(Java 21, indy\=false, shard 1\)](https://github.com/apache/grails-core/actions/runs/33052561425/job/98451365050?pr=16230) > :grails-test-examples-gsp-sitemesh3:integrationTest
| Test | Runs | Flakiness |
|---|---|--:|
| EndToEndSpec > async multiple levels of layouts | ❌ | [1% 🟡](https://github.com/apache/grails-core/issues/16030) |
🏷️ Commit: fb318eef8c8e0268148105142b7ad610b22882d1
▶️ Tests: 11997 executed
🟡 Checks: 33/83 completed
### Test Failures
<details>
<summary><strong>EndToEndSpec > async multiple levels of layouts</strong> (:grails-test-examples-gsp-sitemesh3:integrationTest in <a href="https://github.com/apache/grails-core/actions/runs/33052561425/job/98451365050?pr=16230">CI / Functional Tests (Java 21, indy=false, shard 1)</a>)</summary>
```
Condition not satisfied:
pageSource == """<html><head><title>Decorated Base - Dialog - This is the title</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head> <body><h1>Hello</h1><div id="base"><div id="dialog">body text</div></div> </body></html>"""
| |
| false
| Strings too large to calculate edit distance.
<html><head><title>Decorated Error</title>
<meta name="layout" content="main">
</head>
<body><h1>Hello</h1>
Unable to establish controller name to dispatch for [org.grails.web.mapping.RegexUrlMapping$1@7e8c061]. Dynamic closure invocation returned null. Check your mapping file is correct, when assigning the controller name as a request parameter it cannot be an optional token!
</body></html>
at EndToEndSpec.async multiple levels of layouts(EndToEndSpec.groovy:107)
```
|expected|actual|
|---|---|
|\<html\>\<head\>\<title\>Decorated <s>Base - Dialog - This is the title</s>\</title<s>\>\<meta http-equiv\=\"Content-Type\" content\=\"text/html; charset\=UTF-8\"\>\</head</s>\>|\<html\>\<head\>\<title\>Decorated <b>Error</b>\</title\><b>|
|<s>\<body\>\<h1\>Hello\</h1\>\<div id\=\"base\"\>\<div id\=\"dialog\"\>body text\</div\>\</div\></s>| </b>|
||<b> \<meta name\=\"layout\" content\=\"main\"\></b>|
||<b> </b>|
||<b> \</head\></b>|
||<b>\<body\>\<h1\>Hello\</h1\></b>|
||<b> </b>|
||<b> </b>|
||<b> Unable to establish controller name to dispatch for [org.grails.web.mapping.RegexUrlMapping\$1<span>@</span>7e8c061]. Dynamic closure invocation returned null. Check your mapping file is correct, when assigning the controller name as a request parameter it cannot be an optional token\!</b>|
||<b> </b>|
||<b> </b>|
||<b> </b>|
|\</body\>\</html\>|\</body\>\</html\>|
</details>
### Rerun Controls
> [!NOTE]
> Checks are currently running using the configuration below.
Select tests to mute in this pull request:
🔲 EndToEndSpec > async multiple levels of layouts <!-- uniqueId=[engine:spock]/[spec:EndToEndSpec]/[feature:$spock_feature_1_7] -->
Reuse successful test results:
🔲 ♻️ Only rerun the tests that failed or were muted before
Click the checkbox to trigger a rerun:
🔲 **Rerun jobs**
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "matrei (via GitHub)" <gi...@apache.org>.
matrei commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5697390108
## Review
**Head:** `8dd2b0a1dd` (`feature/modernize-grails-async-8.0.x`) · **Base:** `8.0.x` @ `a5758d657f` · merge-base is clean (branch is a fast-forward candidate; `origin/8.0.x` has since moved 91 commits, none touching async or URL mappings).
**What I ran locally**
| Check | Result |
|---|---|
| `:grails-async-core:test` (fresh, `--no-build-cache`) | 54 tests, 0 failures, 1 skipped |
| `:grails-async:test` (fresh) | 18 tests, 0 failures |
| `:grails-web-url-mappings:test` (`--rerun`) | 259 tests, 0 failures |
| `:grails-async-core:codeStyle :grails-async:codeStyle :grails-web-url-mappings:codeStyle` | pass |
| Throwaway probe specs (deleted afterwards) for the findings below | see "Probe" notes per finding |
| Boot 4.1.1 bytecode (`OnBeanCondition`, `TaskExecutorConfigurations`, `WebMvcAutoConfiguration`) | inspected with `javap` |
**Verdict: request changes.** The direction is right and the Spring MVC `DeferredResult` integration is a clear improvement over the hand-rolled `AsyncContext` handling, but the PR currently regresses four things that ship enabled in every generated Grails app: the events bus silently becomes synchronous, exceptions with a cause are misreported, the promise factory bean fails to resolve when a second `AsyncTaskExecutor` exists (e.g. `@EnableScheduling`), and the fallback executor is single-threaded.
---
### High
**H1. Every Grails app's `EventBus` silently becomes synchronous.**
`grails-events/core/src/main/groovy/org/grails/events/bus/spring/EventBusFactoryBean.groovy:73` only reuses the promise factory when it `instanceof ExecutorService`. `CachedThreadPoolPromiseFactory` was one (via `ExecutorPromiseFactory`); `CompletableFuturePromiseFactory` is not. The factory bean therefore falls through to `EventBusBuilder.createDefaultEventBus()`, which logs `No event bus implementations found on classpath, using synchronous implementation.` and builds `ExecutorEventBus(new SyncTaskExecutor())`. `grails-events` is added to every forge-generated app (`grails-forge-core .../feature/grails/GrailsBase.java:102`), so `sendEvent`/`@Subscriber` listeners now run on the caller's thread with a spurious WARN at startup. The updated `grails-doc/src/en/guide/async/events.adoc:32` claims the bus "executes work on Spring Boot's `applicationTaskExecutor`", which is now false.
*Probe:* `EventBusFactoryBean` with a non-`ExecutorService` `grailsPromiseFactory` singleton → `ExecutorEventBus.executor` is `SyncTaskExecutor`.
*Fix:* `ExecutorEventBus` already accepts a plain `Executor`. Have `EventBusFactoryBean` use `CompletableFuturePromiseFactory.executor` (or introduce a small `ExecutorAware`-style interface on the factory) so the bus shares the Boot executor as the docs say. Add a test in `grails-events` for it.
**H2. `unwrap` strips one cause level from *any* exception, so `onError` and the error page see the wrong exception.**
`CompletableFuturePromise.groovy:144` (`failure.cause ?: failure`) is applied in `onError` (line 75) to the raw exception the promise itself failed with, not to a `CompletionException` wrapper. For `createPromise { throw new IllegalStateException('outer', new IOException('inner')) }`, the `onError` callback receives the `IOException`. `AsyncActionResultTransformer.groovy:72` then applies its own `unwrap` (line 79) on top, so the exception handed to `DeferredResult.setErrorResult` and ultimately to `GrailsExceptionResolver` / UrlMappings exception mappings is the cause, not the thrown exception. Any exception mapping keyed on the thrown type (`"500"(controller: 'errors', exception: MyServiceException)`) will stop matching when that exception has a cause.
*Probe:* both `Promise.onError` and `WebAsyncManager.concurrentResult` observed `java.io.IOException: inner`.
*Fix:* only unwrap `CompletionException`/`ExecutionException` (and only when `cause != null`), and drop the second unwrap in the transformer. Add tests with a caused exception to `CompletableFuturePromiseFactorySpec` and `AsyncActionResultTransformerSpec`.
**H3. `context.bean(AsyncTaskExecutor)` fails with `NoUniqueBeanDefinitionException` whenever a second `AsyncTaskExecutor` exists.**
`ControllersAsyncGrailsPlugin.groovy:72` resolves by type. `ThreadPoolTaskScheduler` implements `AsyncTaskExecutor`, so any app with `@EnableScheduling` (Boot auto-configures `taskScheduler`) or with its own second executor bean fails on context startup with `expected single matching bean but found 3: grailsPromiseExecutor,applicationTaskExecutor,taskScheduler`. The fallback flag does not help here because there are two non-fallback candidates. Boot itself avoids this: `WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.configureAsyncSupport` looks up `applicationTaskExecutor` **by name** and does nothing otherwise.
*Probe:* registrar + `applicationTaskExecutor` + an initialized `ThreadPoolTaskScheduler` singleton → `BeanCreationException` wrapping the above.
*Fix:* `context.beanFactory.containsBean(TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME)` → use it, else the `grailsPromiseExecutor` bean by name. Cover it with a test that registers two executors.
**H4. The fallback executor is single-threaded.**
`ControllersAsyncGrailsPlugin.groovy:62` uses a default `ThreadPoolTaskExecutor` (core 1, max `Integer.MAX_VALUE`, queue `Integer.MAX_VALUE`). With an unbounded queue the pool never grows past the core size, so every promise in a non-Boot context (the Micronaut path the PR description mentions, plain Spring contexts, tests) is serialised on one thread, and a promise that waits on another promise deadlocks. The previous default was a cached thread pool.
*Probe:* promise A awaiting a latch that promise B releases → A times out; executor reports `core=1 max=2147483647 queueCapacity=2147483647`.
*Fix:* mirror Boot's defaults (core 8 / unbounded queue), or `SimpleAsyncTaskExecutor` (optionally virtual threads on Java 21), or simply fall back to `new CompletableFuturePromiseFactory()` and wrap its executor with the decorators. Add a two-promise concurrency test.
### Medium
**M1. `WebPromises` no longer propagates the request unless the plugin bean has been instantiated.**
Previously `WebPromises.getPromiseFactory()` / `setPromiseFactory()` always attached `AsyncWebRequestPromiseDecoratorLookupStrategy`, so `task { render ... }` worked in controller unit tests and in any context where `grailsPromiseFactory` had not been created yet. Now propagation lives only on the Spring-registered executor; `WebPromises.groovy:50` builds a bare `CompletableFuturePromiseFactory` with its own cached pool and no `GrailsWebRequestTaskDecorator`. `grails-testing-support-web` does not load `ControllersAsyncGrailsPlugin`, so `ControllerUnitTest` specs of async actions lose `render`/`params`/`request` inside `task {}`. The rewritten `WebPromisesSpec` masks this by wiring the decorator manually in `setup()`.
*Probe:* `WebPromises.promiseFactory = null`, bind a `GrailsWebRequest`, `WebPromises.task { GrailsWebRequest.lookup() }.get()` → `null` (was a `GrailsWebRequest`).
*Fix:* when `WebPromises` builds its default factory, wrap the executor with `GrailsWebRequestTaskDecorator` (or keep a lookup strategy that applies it). Restore a spec that does not pre-wire the decorator.
**M2. `get()` exception type differs between a promise and its `then {}` child.**
`CompletableFuturePromiseFactory.groovy:81` passes `unwrapFailureOnGet = false`, while `fromStage`'s default at `CompletableFuturePromise.groovy:127` is `true`, and `onComplete`/`then` use the default. So `createPromise { throw X }.get()` throws `ExecutionException(X)` (matching `FutureTaskPromiseFactorySpec` and `PromiseListSpec`), but `createPromise { throw X }.then { it }.get()` throws `X` directly. Lines 105/118 also sneaky-throw a checked `Throwable` from a method declared `throws ExecutionException`, which Java callers cannot catch by declaration. Pick one behaviour (the legacy `ExecutionException` one keeps compatibility) and cover it.
*Probe:* `direct=java.util.concurrent.ExecutionException chained=java.lang.IllegalStateException`.
**M3. Docs still present the deprecated Servlet API as current, and the upgrade guide is silent.**
`grails-doc/src/en/guide/async/asyncServletApi.adoc:25` and `traits/traitsprovided.adoc:35` document `AsyncController`/`startAsync()` with no deprecation notice, and `upgrading/upgrading80x.adoc` has nothing on: the executor switch (pool size now governed by `spring.task.execution.*`, 8 core threads instead of unbounded), the deprecations, the `ExecutorPromiseFactory` removal from the default factory, or the events-bus change. Per the repo rule that user-facing changes ship with docs, please add an 8.0 upgrade note and mark the Servlet section deprecated.
### Low
**L1. `onError(List, Closure)` hands the callback a freshly built `ExecutionException(cause)`** (`CompletableFuturePromiseFactory.groovy:128`) while single-promise `onError` hands over the unwrapped cause. Callers of `Promises.onError(list) { e -> }` and `promise.onError { e -> }` get different types for the same failure. Align them.
**L2. Timeout inconsistency between the two entry points.** `WebPromises.prepareAsyncRequest()` (`WebPromises.groovy:192`) sets an infinite timeout, whereas an action returning a `Promises.task {}` / GORM `Domain.async` promise goes through the transformer with the container default (Tomcat: 30 s). This mirrors the old split, so not a regression, but now that the flow is Spring-managed it would be natural to honour `spring.mvc.async.request-timeout` via `DeferredResult(timeout)` in both paths.
**L3. The "task after async completion" guard is gone.** The old decorator threw `Cannot start a task once asynchronous request processing has completed`; now such a task captures and later touches a recycled servlet request. Consider checking `asyncManager.asyncWebRequest?.isAsyncComplete()` in `prepareAsyncRequest()`.
**L4. `grailsWebRequestTaskDecorator` is a global `TaskDecorator` bean**, so Boot also applies it to `@Async` methods and (Boot ≥ 3.5) the task scheduler. Harmless when no request is bound, but it is a behaviour change for `@Async` methods called from controllers (they now see a `GrailsWebRequest` copy). Worth a sentence in the docs.
**L5. Commit history.** `479f5e0e2e Restore URL mapping state on async dispatch` and `c982feb634 Reuse matched URL mappings on async dispatch` cancel each other out (`UrlMappingsHandlerMapping` ends up unchanged). Please squash before merge per the contribution guide.
---
### Verified as correct
- **Fallback bean does not suppress Boot's executor.** `OnBeanCondition` in Boot 4.1.1 filters fallback definitions (`getNonFallbackBeans`/`isNotFallback` → `BeanDefinition.isFallback()`), and `TaskExecutorConfigurations$OnExecutorCondition$ExecutorBeanCondition` is `@ConditionalOnMissingBean(Executor.class)`, so `grailsPromiseExecutor` does not stop `applicationTaskExecutor` from being created.
- **Boot composes multiple `TaskDecorator` beans**: `ThreadPoolTaskExecutorBuilderConfiguration` takes `ObjectProvider<TaskDecorator>`, uses `orderedStream()` and `getTaskDecorator(...)`, so `GrailsWebRequestTaskDecorator` is applied alongside user decorators on `applicationTaskExecutor`.
- **`AsyncActionResultTransformer` + `UrlMappingsInfoHandlerAdapter`** now follow the same protocol as Spring's `RequestMappingHandlerAdapter` (`hasConcurrentResult()` → read → `clearConcurrentResult()` → rethrow `Exception` / return `ModelAndView`), and a `null` concurrent result correctly falls through to "no view" for actions that `render` inside the task (the `AsyncFunctionalSpec` path).
- **Joining an eagerly started async cycle**: `StandardServletAsyncWebRequest.startAsync()` is a no-op when already started, so `WebPromises.task {}` followed by returning the promise works (covered by the new transformer spec).
- **Executor affinity**: `defaultExecutor()` + `newIncompleteFuture()` keep `thenApplyAsync` etc. on the configured executor; the decorator therefore also covers derived stages.
- **Explicit decorators are honoured** by `WebPromises.createPromise(c, decorators)` — the old code silently replaced them with the lookup result, so this is a bug fix.
- **`@PreDestroy close()`** only shuts down an executor the factory owns, so the Boot-managed executor is left to Boot's lifecycle.
- All three affected module suites and their code-style checks pass on a fresh run.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "codeconsole (via GitHub)" <gi...@apache.org>.
codeconsole commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5513975637
> We've discussed the gpars removal in the past. I agree we should drop the older rxjava, etc versions but gpars I've objected to.
>
> I think this PR is a major shift, and not necessarily a bad one, but I don't think it should go into 8.0.
@jdaugherty I am fine with retargeting? Which do you prefer 8.1 or 9? I am fine with either
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "codeconsole (via GitHub)" <gi...@apache.org>.
codeconsole commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5429317555
Follow-up on the legacy async-library integrations: the current PR does **not** remove them. The branch still builds, publishes, documents, and discovers these optional PromiseFactory implementations through `ServiceLoader`:
- GPars 1.2.1 (`grails-async-gpars`)
- RxJava 1.3.8 (`grails-async-rxjava`)
- RxJava 2.2.21 (`grails-async-rxjava2`)
- RxJava 3 (`grails-async-rxjava3`)
None of these libraries is required for `grails-async` functionality anymore. The modern baseline can be implemented entirely with JDK `CompletableFuture`, Spring Boot's managed `applicationTaskExecutor`, Spring MVC async processing, and the existing Groovy `Promise` facade.
Recommended disposition:
- Remove RxJava 1 support because it is end-of-life.
- Remove RxJava 2 support because it has been superseded by RxJava 3.
- Remove GPars support from `grails-async`; it provides no required capability over the new JDK/Spring implementation.
- Prefer removing RxJava 3 as well unless Grails intentionally wants to maintain first-party RxJava interoperability.
Removing all four adapters would leave a single supported JDK/Spring implementation while retaining the `PromiseFactory` SPI for independently maintained integrations. It would also eliminate the current behavior where adding a provider library to the classpath can silently replace the global promise engine through `ServiceLoader`.
This is a user-visible breaking change because these modules are published artifacts, so it should be documented in the Grails 8 release and migration notes. It also requires a broader repository review: `grails-events-gpars` remains a separate optional event bus, `grails-cache` exposes GPars as an API dependency, and Neo4j uses GPars in tests.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "codeconsole (via GitHub)" <gi...@apache.org>.
codeconsole commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5724744040
Addressed the round-2 review in `69b234e3a5`, `683342d225`, `b698b3f540`, and `f3624cb8c3`, following upstream merge `b09d755655`.
- **N1:** Replaced the relevant proxy-based closure coercions with real Groovy lambdas. Added checked-exception coverage for direct/timed/chained results, completion and error callbacks, aggregate callbacks, non-CompletableFuture promise bridges, web tasks, and controller error handling. `IOException` now remains the original cause rather than an `UndeclaredThrowableException`.
- **N2:** Standalone `WebPromises` now decorates the owned executor, keeping request context bound through CompletableFuture completion and attached `then` callbacks. Third-party providers retain the compatibility lookup-strategy path. Latched tests cover default, virtual-thread, and legacy factories. Also fixed list task creation to use the receiving factory rather than the global factory, preserving standalone web-context propagation.
- **N3:** `GrailsExceptionResolver` now resolves `AsyncRequestTimeoutException` as 503, including status-specific URL mappings, without logging an ERROR stack trace. Added resolver coverage and a real HTTP timeout integration test. Documented the container default (normally 30 seconds on Tomcat), configuration, and that response timeout does not cancel the task.
- **N4:** Returning a promise after async request completion now throws `IllegalStateException`, consistent with submitting through `WebPromises`.
- **N5:** Renamed the static helper to `AsyncRequestSupport`, made the request variable explicitly typed, and cached the parsed timeout per application context using weak keys.
- **N6:** Added debug logging for executor selection and a regression test for a mistyped named executor. One clarification: `BeanNotOfRequiredTypeException` extends `BeansException`, not `NoSuchBeanDefinitionException`, so a mistyped `applicationTaskExecutor` already fails startup rather than silently selecting the fallback; the new test pins that behavior.
- **N8:** Converted `VirtualThreadPromiseFactory` to a thin CompletableFuture factory over its owned virtual-thread executor. It now shares the same failure/aggregate contracts, composes task decorators, propagates web request context, exposes its executor for asynchronous event delivery, and closes the owned executor on context shutdown. Plugin tests exercise request propagation, custom decoration, virtual-thread event delivery, and lifecycle cleanup. The changed aggregate contracts and distinction from Boot-managed virtual threads are documented.
- **N9:** Merged upstream `8.0.x` through `e749cc79a9`, retained both upstream upgrade sections, and moved the async migration section to 66. GitHub currently reports the PR as mergeable.
- **N7:** Kept the commits focused and unsquashed, as explicitly requested by the PR author. No AI trailers were added.
Verification: Java 21 module suites cover 427 tests (one existing skip); Java 25 async/MVC suites cover 156 (one existing skip, build cache disabled); the Java 21 sample integration suite passes all 18 tests, including the new timeout case. Affected-module style and dependency-version checks pass. These were resource-limited runs, not a repository-wide clean/aggregate sweep.
Updated the PR's combined summary and LOC table. Relative to the merged upstream base: 1,804 lines added, 256 removed, net +1,548; 1,018 retained compatibility lines are slated for future removal, leaving a projected net +530 overall, or -560 for production code alone.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5725974273
## ✅ All tests passed ✅
🏷️ Commit: f3624cb8c36d79b4d5fce4761e3ec4d7818f5aab
▶️ Tests: 88196 executed
⚪️ Checks: 90/90 completed
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [PR] Modernize Grails async integration for Spring Boot 4.1 [grails-core]
Posted by "testlens-app[bot] (via GitHub)" <gi...@apache.org>.
testlens-app[bot] commented on PR #16230:
URL: https://github.com/apache/grails-core/pull/16230#issuecomment-5648060707
## 🔎 No tests executed 🔎
🏷️ Commit: 8dd2b0a1dd3db9406fa1caa14df591a74df7e9ce
▶️ Tests: 0 executed
⚪️ Checks: 3/3 completed
---
_Learn more about TestLens at [testlens.app/docs](https://testlens.app/docs/features/pr-comment/)._
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@grails.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org