= Tolerancia a fallos (Fault Tolerance) en MicroProfile - Timeout (Tiempo de espera)
:index-group: MicroProfile
:jbake-type: page
:jbake-status: published

Este es un ejemplo de como usar Microprofile `@Timeout` en TomEE.

[discrete]
== Funcionalidad de tiempo de espera (Timeout)

`Fault Tolerance Timeout` permite especificar cuánto tiempo puede tomar una tarea en completar su ejecución y abortarla en caso que tarde más del tiempo especificado. La funcionalidad de Timeout puede ser usada en conjunto con otras anotaciones para guiar la ejecución y resultado de una tarea. Mira la
https://download.eclipse.org/microprofile/microprofile-fault-tolerance-1.1/microprofile-fault-tolerance-spec.html#_timeout_usage[especificación]
para mas detalles.

La anotación `@Timeout` permite configurar:

* *value:* el valor del tiempo de espera
* *unit:* la unidad del tiempo de espera

[discrete]
== Ejemplo

[discrete]
=== Ejecuta la aplicación

[source,bash]
----
mvn clean install tomee:run
----

[discrete]
=== Como funciona esto?

El método `statusOfDayByAccuWeather` falla cuando se alcanza el umbral de la
anotación `@Timeout` debido a una larga ejecución del método
`longProcessingTask`. Para responder bien a la solicitud, se ejecutará un
método alternativo para completar la solicitud exitosamente. El método
alternativo está determinado por la anotación `@Fallback`.

[source,java]
----
@RequestScoped
public class WeatherGateway {

    private static final Logger LOGGER = Logger.getLogger(WeatherGateway.class.getName());

    @Timeout(50)
    @Fallback(fallbackMethod = "statusOfWeekByMetEireann")
    public String statusOfDayByAccuWeather(){
        return longProcessingTask();
    }

    public String statusOfWeekByMetEireann(){
        LOGGER.log(Level.WARNING, "MetEireann backup service has been requested due to AccuWeather timeout");
        return "Beautiful day";
    }

    private String longProcessingTask(){
        try {
            Thread.sleep(80);
        } catch (InterruptedException e) {
            LOGGER.log(Level.WARNING,"AccuWeather task has been interrupted.");
        }
        return null;
    }
    ...
}
----

Llamada al estado del día

[source,text]
----
GET http://localhost:8080/mp-faulttolerance-timeout/weather/day/status
----

Logs en el Servidor

[source,text]
----
WARNING AccuWeather task has been interrupted.
WARNING MetEireann fallback service has been requested due to AccuWeather timeout.
----

Respuesta HTTP

[source,text]
----
Beautiful day!
----

[discrete]
=== Ejecutando las pruebas

También puedes probarlo usando el
link:src/test/java/org/superbiz/rest/WeatherServiceTest.java[WeatherServiceTest.java] disponible en el proyecto.

[source,text]
----
mvn clean test
----

----
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
----
