Sto utilizzando gli eventi di applicazione Spring all'interno del mio livello di servizio per notificare il sistema più ampio quando si verificano eventi specifici. Il problema che ho è che gli eventi vengono lanciati all'interno di un contesto transazionale (sto usando l'annotazione di Spring @Transactional
). Il pericolo è che spari un evento e quindi la transazione non riesce sul commit (può accadere quando si usa, per esempio, Hibernate). In questo scenario, gli ascoltatori di eventi assumeranno uno stato che verrà poi ripristinato dopo l'esecuzione. Il pericolo qui è che, ad esempio, potrei aver inviato un'email per confermare la registrazione di un utente su un sito Web quando, in realtà, il loro account utente non è stato effettivamente creato.Annotazioni transazioni a molla - Esegui in caso di successo
C'è un modo, preservando l'uso delle annotazioni, in qualche punto per segnalare un evento da attivare dopo il commit della transazione? Sembra un po 'analogo all'utilizzo di SwingUtilities.invokeLater(Runnable runnable)
durante la programmazione GUI in Java Swing. Voglio dire, eseguire questo bit di codice in seguito una volta che la transazione corrente viene eseguita correttamente.
Qualche idea?
Grazie,
Andrew
Questo è tutto gestito in modo nativo in primavera la società tramite annotazioni. Vedere 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 in particolare la sezione sulla nuova annotazione @TransactionalEventListener. – PaulNUK