A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Rollback con la anotaci贸n transactional

26/31
Recursos

Aportes 4

Preguntas 3

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

Al aplicar la anotaci贸n @transactional podemos presenciar al conjunto de operaciones ejecut谩ndose de manera total, integral y at贸mica. Se sigue el acr贸nimo ACID (Atomicity, Consistency, Isolation and Durability: Atomicidad, Consistencia, Aislamiento y Durabilidad, en espa帽ol).

Las caracter铆sticas de una transacci贸n tienen el acr贸nimo ACID:

  • Atomicidad: Las actividades de un m茅todo se consideran como una unidad de trabajo. Esto se conoce como Atomicidad. Este concepto asegura que todas las operaciones en una transacci贸n se ejecuta todo o nada.
    Si todas las instrucciones o l铆neas de c贸digo de un m茅todo transaccional son ejecutadas con 茅xito, entonces al finalizar se realiza un commit, es decir, guardado de la informaci贸n.
    Si alguna de las instrucciones falla se realiza un rollback, es decir, ninguna de la informaci贸n es guardada en la base de datos o el repositorio donde ser persiste dicha informaci贸n鈥

  • Consistente: Una vez que termina una transacci贸n (sin importar si ha sido exitosa o no) la informaci贸n queda en estado consistente, ya que se realiz贸 todo o nada, y por lo tanto los datos no deben estar corruptos en ning煤n aspecto.

  • Aislado: M煤ltiples usuarios pueden utilizar los m茅todos transaccionales, sin afectar el acceso de otros usuarios. Sin embargo debemos prevenir errores por accesos m煤ltiples, aislando en la medida de lo posible nuestros m茅todos transaccionales. El aislamiento normalmente involucra el bloqueo de registros o tablas de base de datos, esto se conoce como locking鈥

  • Durable: Sin importar si hay una ca铆da del servidor, una transacci贸n exitosa debe guardarse y perdurar posterior al termino de una transacci贸n.

private void saveWithErrorTransational(){
        User test1 = new User("TestTransactional1", "[email protected]", LocalDate.now());
        User test2 = new User("TestTransactional2", "[email protected]", LocalDate.now());
        User test3 = new User("TestTransactional3", "[email protected]", LocalDate.now());
        User test4 = new User("TestTransactional4", "[email protected]", LocalDate.now());

        List<User> users = Arrays.asList(test1,test2,test3,test4);

        try{
            userService.saveTransactional(users);
        }catch (Exception e){
            LOGGER.error("Esta es una excepcion dentro del metodo transational" + e);
        }
        userService.getAllUsers()
                .stream()
                .forEach(user -> LOGGER.info("Este es el usuario dentro del metodo Transational :" + user));
    }
驴 por qu茅 en el caso del Repository solo creamos una Interface y no fue necesario implementar una clase ?