Estoy usando eventos de aplicaciones Spring en mi capa de servicio para notificar al sistema en general cuando ocurren eventos específicos. El problema que tengo es que los eventos se disparan dentro de un contexto transaccional (estoy usando la anotación de Spring @Transactional
). El peligro es que dispare un evento y luego la transacción falla en la confirmación (puede ocurrir al usar, por ejemplo, Hibernate). En este escenario, los oyentes del evento asumirán algún estado que luego se revertirá después de que se hayan ejecutado. El peligro aquí es que, por ejemplo, puedo haber enviado un correo electrónico para confirmar el registro de un usuario en un sitio web cuando, de hecho, su cuenta de usuario no se creó realmente.Anotaciones de transacciones de primavera: Ejecutar en caso de éxito
¿Existe alguna manera, preservando el uso de anotaciones, de marcar en algún lugar un evento para que se active después de que se compromete la transacción? En cierto modo, parece algo similar al uso de SwingUtilities.invokeLater(Runnable runnable)
al hacer la programación de la GUI en Java Swing. Quiero decir, ejecutar este código poco después, una vez que la transacción actual se haya confirmado correctamente.
¿Alguna idea?
Gracias,
Andrew
Todo esto es manejado de forma nativa en la primavera de ahora a través de anotaciones. Ver https://spring.io/blog/2015/02/11/better-application-events-in-spring-framework-4-2https://spring.io/blog/2015/02/11/better -application-events-in-spring-framework-4-2 específicamente la sección sobre la nueva anotación @TransactionalEventListener. – PaulNUK