Virtual thread executor:
- fix the virtual ThreadFactory reflection: resolve Thread.Builder methods on the
public java.lang.Thread$Builder interface (same approach as Tomcat Jre21Compat),
so running does not require --add-opens java.base/java.lang=ALL-UNNAMED
- close the aware chain when the delegate rejects a task, otherwise the performance
stopwatch entry leaks, the queue-timeout timer fires a false alarm and the
rejection is never counted
- notify the aware chain on shutdown / shutdownNow / terminated (terminated once)
- track taskCount / completedTaskCount / activeCount / largestPoolSize in the proxy,
the JDK thread-per-task executor exposes no counters and its threadCount() is not
reachable without opening java.util.concurrent
- do not arm the queue-timeout timer (there is no queue) and report queueType as
NoQueue(VirtualThread) instead of the internal UnsupportedBlockingQueue name
- flag virtual pools in ThreadPoolStats and skip the meaningless sizing / queue
gauges in the micrometer collector
- sync refreshed metadata back to the proxy bean on config change
- ExecutorWrapper: also accept a VirtualThreadExecutorProxy held as Executor
Spring integration:
- SimpleAsyncTaskExecutorAdapter: never close the container-owned executor (dtp
stops first at Integer.MAX_VALUE phase) and signal rejection with
RejectedExecutionException as the ExecutorService contract requires
- DtpPostProcessor: detect virtual threads on the instance itself, keep the user's
TaskDecorator when Spring internals cannot be read, validate the bean factory type
- DtpBeanDefinitionRegistrar: fail fast when virtual executors are configured on JDK < 21
- BeanRegistrationUtil: guard the ListableBeanFactory cast, warn on bean definition
override, tolerate null constructor args
- split the webserver adapter auto-configuration per server and drop the now unused
ConditionalOn{Jetty,Tomcat}WebServer conditions, superseded by @ConditionalOnClass
Build:
- add the maven wrapper
- bump maven-checkstyle-plugin to 3.3.0 (checkstyle 9.3) so Java 17 syntax such as
instanceof pattern matching can be parsed