mvn clean install tomee:run
MicroProfile Fault Tolerance - Fallback
Este es un ejemplo de como usar Microprofile @Fallback en TomEE.
Fallback Feature
Fault Tolerance Fallback provee una alternativa en caso de fallo de una ejecución. Esta alternativa será llamada cuando
un Retry o CircuitBreaker ha fallado.
Para usar esta funcionalidad es necesario anotar el método con  @Fallback.
Las politicas del Fallback permiten configurar :
- 
value: Una clase que implementa FallbackHandler
- 
fallbackMethod: El método que será ejecutado. 
Los parámetros value and fallbackMethod no pueden ser especificados a la vez.
Para más detalles revisar Especificación
Ejemplos
Ejecutar la aplicación
Ejemplo 1
El método statusOfDay siempre fallará lanzando WeatherException y como la anotación
@CircuitBreaker esta configurada con failOn en caso de una excepción, el fallback,
WeatherDayStatusFallbackHandler#handle será invocado.
@RequestScoped
public class WeatherService {
   ...
   @GET
   @Path("/day/status")
   @CircuitBreaker(failOn = WeatherException.class)
   @Fallback(WeatherDayStatusFallbackHandler.class)
   public String dayStatus() {
       throw new WeatherException();
   }
   ...
 }
public class WeatherDayStatusFallbackHandler implements FallbackHandler<String> {
   @Override
   public String handle(ExecutionContext executionContext) {
       return "Hi, today is a sunny day!";
   }
}Llama el estado del tiempo del dia
GET http://localhost:8080/mp-faulttolerance-fallback/weather/day/status
Bitácora del servidor
SEVERE [http-nio-8080-exec-2] org.superbiz.rest.WeatherDayStatusFallbackHandler.handle WeatherDayStatusFallbackHandler was triggered due a failRespuesta
Hi, today is a sunny day!Ejemplo 2
El método statusOfDay siempre fallará lanzando WeatherException y como la anotación
@Retry está configurada con maxRetries = 1 en caso de fallo, el método fallback,
fallbackForWeekStatus se invocará después de reintentar una vez.
@RequestScoped
public class WeatherService {
  ...
  @GET
  @Path("/week/status")
  @Retry(maxRetries = 1)
  @Fallback(fallbackMethod = "fallbackForWeekStatus")
  public String weekStatus() {
      throw new WeatherException();
  }
  public String fallbackForWeekStatus() {
      return "Hi, week will be mostly sunny!";
  }
  ...
}Llamada del estado del tiempo de la semana
GET http://localhost:8080/mp-faulttolerance-fallback/weather/week/status
Bitácora del servidor
SEVERE [http-nio-8080-exec-2] org.superbiz.rest.WeatherService.fallbackForWeekStatus Fallback was triggered due a failRespuesta
Hi, week will be mostly sunny!Ejecución de las pruebas
Puede además usar la prueba WeatherServiceTest.java disponible en este proyecto.
mvn clean test
[INFO] Results:
[INFO]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0