Package org.eclipse.microprofile.faulttolerance

# Annotation Type Retry

@Inherited @Documented @Retention(RUNTIME) @Target({METHOD,TYPE}) @InterceptorBinding public @interface Retry
The retry annotation to define the number of retries. Any invalid config value causes `FaultToleranceDefinitionException`.

When a method returns and the retry policy is present, the following rules are applied:

1. If the method returns normally (doesn't throw), the result is simply returned.
2. Otherwise, if the thrown object is assignable to any value in the `abortOn()` parameter, the thrown object is rethrown.
3. Otherwise, if the thrown object is assignable to any value in the `retryOn()` parameter, the method call is retried.
4. Otherwise the thrown object is rethrown.

If a method throws a `Throwable` which is not an `Error` or `Exception`, non-portable behavior results.

Author:
  Emily Jiang, John Ament
See Also:
  - `maxRetries()`
  - `delay()`
  - `delayUnit()`
  - `maxDuration()`
  - `durationUnit()`
  - `jitter()`
  - `jitterDelayUnit()`
  - `retryOn()`
  - `abortOn()`

## Optional Element Summary

Optional Elements
Modifier and Type
Optional Element
Description
`Class<? extends Throwable>[]`
`abortOn`
The list of exception types that should not trigger a retry.
`long`
`delay`
The delay between retries.
`ChronoUnit`
`delayUnit`
The unit for `delay()`.
`ChronoUnit`
`durationUnit`
The duration unit for `maxDuration()`.
`long`
`jitter`
Set the jitter to randomly vary retry delays for.
`ChronoUnit`
`jitterDelayUnit`
The delay unit for `jitter()`.
`long`
`maxDuration`
The max duration.
`int`
`maxRetries`
The max number of the retries.
`Class<? extends Throwable>[]`
`retryOn`
The list of exception types that should trigger a retry.

## Element Details

### maxRetries

int maxRetries
The max number of the retries.

Returns:
  the max number of retries. -1 means retry forever. The value must be greater than or equal to -1.

Default:
  3

### delay

long delay
The delay between retries. Defaults to 0. The value must be greater than or equal to 0.

Returns:
  the delay time

Default:
  0L

### delayUnit

ChronoUnit delayUnit
The unit for `delay()`. Defaults to `ChronoUnit.MILLIS` if not set.

Returns:
  the delay unit

Default:
  MILLIS

### maxDuration

long maxDuration
The max duration. The max duration must be greater than the delay duration if set. 0 means not set.

Returns:
  the maximum duration to perform retries for

Default:
  180000L

### durationUnit

ChronoUnit durationUnit
The duration unit for `maxDuration()`. Defaults to `ChronoUnit.MILLIS` if not set.

Returns:
  the duration unit

Default:
  MILLIS

### jitter

long jitter

Set the jitter to randomly vary retry delays for. The value must be greater than or equals to 0. 0 means not set.

The effective delay will be [delay - jitter, delay + jitter] and always greater than or equal to 0. Negative effective delays will be 0.

Returns:
  the jitter that randomly vary retry delays by. e.g. a jitter of 200 milliseconds will randomly add between -200 and 200 milliseconds to each retry delay.

Default:
  200L

### jitterDelayUnit

ChronoUnit jitterDelayUnit
The delay unit for `jitter()`. Defaults to `ChronoUnit.MILLIS` if not set.

Returns:
  the jitter delay unit

Default:
  MILLIS

### retryOn

Class<? extends Throwable>[] retryOn
The list of exception types that should trigger a retry.

Note that if a method throws a `Throwable` which is not an `Error` or `Exception`, non-portable behavior results.

Returns:
  the exception types on which to retry

Default:
  {java.lang.Exception.class}

### abortOn

Class<? extends Throwable>[] abortOn
The list of exception types that should not trigger a retry.

This list takes priority over the types listed in `retryOn()`.

Note that if a method throws a `Throwable` which is not an `Error` or `Exception`, non-portable behavior results.

Returns:
  the exception types on which to abort (not retry)

Default:
  {}