This commit adds support for exposing endpoint operations over HTTP.
Jersey, Spring MVC, and WebFlux are all supported but the programming
model remains web framework agnostic. When using WebFlux, blocking
operations are automatically performed on a separate thread using
Reactor's scheduler support. Support for web-specific extensions is
provided via a new `@WebEndpointExtension` annotation.
Closes gh-7970
Closes gh-9946
Closes gh-9947
This commit adds support to the new endpoint infrastructure for
exposing endpoint operations via JMX. It also introduces support for
JMX-specific extensions to a general-purpose endpoint. Such an
extension is identified by the `@JmxEndpointExtension` annotation.
See gh-9946
This commit introduces a new annotation-based programming model for
implementing endpoints. An endpoint is identified by a type-level
`@Endpoint` annotation. Method-level `@ReadOperation` and
`@WriteOperation` are used to identify methods on an endpoint class
that implement an operation and should be exposed (via JMX for
exmaple) to remote clients.
See gh-9946
Update `ApplicationPid` to check POSIX file permissions in addition to
`File.canWrite()` before PID file. This helps to provided consistent
behavior, regardless of if the application is running as root or not.
Fixes gh-9922
Previously, TomcatEmbeddedWebappClassLoader would find resources
in WEB-INF/classes. However, unlike standalone Tomcat, we know that in
a Boot app WEB-INF/classes is on the class path of the parent class
loader so the resources will be found when the parent is queried
(which happens as part of the normal search algortithm for both
getResource(String) and getResources(String)).
This commit overrides findResource(String) and findResources(String)
to return null and an empty enumeration respectively. This prevents
TomcatEmbeddedWebappClassLoader from finding resources in
WEB-INF/classes and returning war: URLs for them that duplicate the
jar: URLs that will be found when the parent is queried.
Closes gh-9014
Add a general purpose `Configurations` class that encapsulates the
sorting and merging rules that are usually apply. The class is
particularly useful in tests where configuration classes often need
to be specified, but an `@Import` or `ImportSelector` cannot be easily
used.
Two `Configurations` subclasses have been initially added. The
`UserConfigurations` class can be used to represent user defined
configuration and the `AutoConfigurations` class can be used to
represent a subset of auto-configurations. Auto configurations are
sorted using the same `@AutoConfiguraionBefore`/`@AutoConfiguraionAfter`
logic as the `@EnableAutoConfiguration` annotation.
Fixes gh-9795
Split the current `ReactiveWebApplicationContext` into two distinct
interfaces to mirror other Spring context interfaces. The
`ReactiveWebApplicationContext` interface now only exposes getters. The
`ConfigurableReactiveWebApplicationContext` exposes setters and extends
from `ConfigurableApplicationContext`.
Fixes gh-9794