Eclipse MicroProfile Fault Tolerance API

Payara Server 6.2022.1 provides MicroProfile Fault Tolerance 4.0


The Fault Tolerance API was created to help separate execution logic from execution. The execution can be configured with a number of fault tolerance policies.

The complete specification can be found on the Eclipse MicroProfile website.

Breaking changes introduced in MicroProfile Fault Tolerance 4.0 are listed in the official specification under Backwards Incompatible Changes

Additions to the Fault Tolerance Spec

In addition to the functionality detailed in the spec, the following is also implemented in Payara Server and Payara Micro:

Configurable Executor Services

The managed and scheduled managed executor pool can be configured via the set-fault-tolerance-configuration asadmin command.

The executor service is used to execute methods annotated with @Asynchronous, whereas the scheduled executor service is used by the CircuitBreaker and Timeout interceptors for their timeout operations (scheduling the circuit breaker to be set to half open, and just timing out respectively).

Alternative @Asynchronous Annotations

The Payara Platform specific configuration property MP_Fault_Tolerance_Alternative_Asynchronous_Annotations can be used to specify a comma separated list of fully qualified class names of those annotations that should have the same effect as FT’s @Asynchronous. These annotations do not have to be interceptor bindings.

For example:


Annotation Priority

Since the asynchronous annotation is invoked first, if it’s combined with any other fault tolerance annotations they will be processed on the asynchronous thread.

Interactions between annotations are handled as described by the 4.0 specification effectively nesting computation in the following way (skipping handling for annotations not present):

  1. Asynchronous

  2. Fallback

  3. Retry

  4. Circuit Breaker

  5. Timeout

  6. Bulkhead

  7. (calling annotated method; might be wrapped by other interceptors)

As specified the interceptor priority can be changed using the property mp.fault.tolerance.interceptor.priority affecting all annotations including alternative ones.

Fault Tolerance Configuration

Fault Tolerance can be configured by using Admin Console or Asadmin commands.

Using the Admin Console

To configure the Fault Tolerance in the Admin Console, go to Configuration → [instance-configuration (like server-config)] → MicroProfile → Fault Tolerance:

Set Fault Tolerance Configuration

Using Asadmin Commands



Provides a way to set the configuration of the fault tolerance service of the targeted config.

Command Options
Starting from Payara Platform release 5.2021.2, the options asyncmaxpoolsize and delaymaxpoolsize have been removed as they are no longer applicable due to the configurable managed executor pools being used.
Option Description Default Mandatory


The Logical JNDI name of the Managed Executor Service to look up. Changes to this configuration require a restart of the server to take effect.




The Logical JNDI name of the Managed Scheduled Executor Service to look up. Changes to this configuration require a restart of the server to take effect.




The target configuration object to apply the change to



asadmin> set-fault-tolerance-configuration --managedexecutorservicename=java:comp/DefaultManagedExecutorService --target instance1



asadmin> get-fault-tolerance-configuration [--target=server-config]


Returns the current configuration options for the Fault Tolerance service on the targeted config.

Command Options
Option Description Default Mandatory


The config to get the fault tolerance configuration for.



asadmin> get-fault-tolerance-configuration --target=instance1