Victor Catalán

Spring Framework: Transactional Event Listener

February 27, 2016 | Victor Catalán | 1 Minute Read

Desarrollo de aplicaciones Java con Spring Framework y sus listener de eventos.

En el mundo del desarrollo de software en el lenguaje Java, es casi un estandar el uso del framework Spring. Su eslogan es un hecho "Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.".

Dentro de Spring hay numerosos modulos que se pueden incorporar a nuestras aplicaciones. Todos ellos nos facilitan algunas situaciones comunes. Yo he utilizado los siguientes:

  • Spring Boot
  • Spring Framework
  • Spring Data
  • Spring Integration
  • Spring Batch
  • Spring Security
  • Spring Web Services
  • Spring MVC

Aquí podeis encontrar un listado de todos los proyectos dentro de Spring.

Después de esta introducción para los que no conozcan este framework, quería comentar una nueva funcionalidad que han introducido en la versión 4.2 que he tenido que utilizar esta semana. Una nueva anotación que se puede utilizar @TransactionalEventListener.

Esta mejora de los listener de eventos que han introducido es la habilidad de linkar el listener de un evento dependiendo de la fase de la transacción que nos interese.

@TransactionalEventListener se utiliza igual que la anterior anotación @EventListener y además nos permite controlar la transacción. Por defecto se inicializará el listener tras realizarse el commit AFTERCOMMIT, pero también se puede utilizar en las siguientes fases (BEFORECOMMIT, AFTERROLLBACK and AFTERCOMPLETION).

Nota: Si no hay transacción el evento no se lanzará por defecto, a no ser que se haya anotado el método con el atributo "fallbackExecution".

Un ejemplo de como utilizarlo, sencillamente a continuación:

@Component
public class MyComponent {
  
  @TransactionalEventListener
  public void handleCreatedEvent(CreationEvent<Order> creationEvent) { 
    ...
  }

}

Saludos.