Programmatic API Integration Concerns
This page describes integration concerns of the Programmatic API of SmallRye Fault Tolerance.
CDI Implementation
Runtimes that provide the CDI implementation of the programmatic API don’t have to do any extra integration work. The existing integration is enough.
Standalone Implementation
The standalone implementation exposes a single integration point: the StandaloneFaultTolerance.configure()
static method.
This method must be called before fault tolerance is first used.
It accepts a custom implementation of the Configuration
interface, which allows customizing:
-
enabled()
: iffalse
, all fault tolerance strategies except fallback and thread offload are disabled -
executor()
: executor for thread offloads and other asynchronous tasks -
metricsAdapter()
: adapter for metrics, see below
When no Configuration
is provided, sensible defaults are used:
-
fault tolerance is enabled unless system property
MP_Fault_Tolerance_NonFallback_Enabled
is set tofalse
-
a thread pool obtained using
Executors.newCachedThreadPool()
is used as an executor -
no metrics are emitted
Users of the standalone implementation that also use an event loop based library, such as Vert.x, may integrate the event loop support as described in Event Loop.
Lifecycle
The thread pool and all other internal resources are initialized lazily, on the first use.
The StandaloneFaultTolerance.shutdown()
method may be used on application shutdown to shut down these internal resources.
The executor is only shut down when no Configuration
was provided and SmallRye Fault Tolerance had to create an executor on its own.
If Configuration
was provided, the executor shutdown is left to the integrator; it is not attempted automatically.
At the end of StandaloneFaultTolerance.shutdown()
, the Configuration.onShutdown()
method is called.
After StandaloneFaultTolerance.shutdown()
, it is not possible to reinitialize SmallRye Fault Tolerance again.
Metrics
In the standalone implementation, MicroProfile Metrics make no sense, as that is exclusively based on CDI. It is however possible to integrate with OpenTelemetry or Micrometer.
The Configuration.metricsAdapter()
method must be implemented and return an instance of io.smallrye.faulttolerance.standalone.OpenTelemetryAdapter
or io.smallrye.faulttolerance.standalone.MicrometerAdapter
.
The constructor of OpenTelemetryAdapter
accepts the Meter
to which metrics shall be emitted.
The constructor of MicrometerAdapter
accepts the MeterRegistry
to which metrics shall be emitted.