com.curso.ejemplotareaplanificada.Principal.java Source code

Java tutorial

Introduction

Here is the source code for com.curso.ejemplotareaplanificada.Principal.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.curso.ejemplotareaplanificada;

import com.curso.beans.ServicioAsincrono;
import com.curso.config.Configuracion;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;

/**
 *
 * @author usuario
 */
public class Principal {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //solo estamos usando anotaciones
        //en esta clase no hay nada de los metodos planificados porque esos ya los llama spring solito
        //esta clase es para pegarnos con los servicios asincronos
        ApplicationContext ctx = new AnnotationConfigApplicationContext(Configuracion.class);
        System.out.println("Contexto cargado");
        ServicioAsincrono sa = ctx.getBean(ServicioAsincrono.class);
        System.out.println("Hilo principal " + Thread.currentThread());

        //Este metodo devuelve void asi que el hilo arranca un nuevo hilo pero continua sin esperar ni ahora ni a un futuro
        sa.metodoUno();

        //Este metodo devuelve un futuro, y cuando llamemos a get espera 5 segundos a ver si termina el nuevo hilo
        //Si sobre pasa esos 5 segundos lanza una excepcion
        Future<Double> numero = sa.factorial(100);
        try {
            System.out.println("El factorial es desde un Future:" + numero.get(5L, TimeUnit.SECONDS));
        } catch (InterruptedException | ExecutionException | TimeoutException ex) {
            Logger.getLogger(Principal.class.getName()).log(Level.SEVERE, null, ex);
        }

        //Este metodo devuelve un escuchable
        ListenableFuture<Double> valor = sa.factorialLf(100);
        //Al metodo escuchable le aadimos una clase anonima de tipo llamable con dos metodos, uno que se ejecutara cuando acabe con exito
        //y otro si no acaba correctamente
        valor.addCallback(new ListenableFutureCallback<Double>() {

            @Override
            public void onSuccess(Double result) {
                System.out.println("El resultado es desde un ListenableFuture: " + result);
            }

            @Override
            public void onFailure(Throwable ex) {
                LOG.log(Level.SEVERE, "Ha ocurrido un error:", ex);
            }
        });
    }

    private static final Logger LOG = Logger.getLogger(Principal.class.getName());

}