Il servizio My Grails sta riscontrando un problema in cui un'eccezione ingerita non correlata a una transazione sta causando il rollback della transazione anche quando non è correlata alla persistenza dell'oggetto dominio.Come impedire che le eccezioni causino il rollback della transazione in Grails?
Nel mio servizio ho qualcosa sulla falsariga di
updateSomething(domainObj) {
def oldFilename = domainObj.filename
def newFilename = getNewFilename()
domainObj.filename = newFilename
domainObj.save(flush: true)
try {
cleanUpOldFile(oldFilename)
} catch (cleanupException) {
// oh well, log and swallow
}
}
quello che sto vedendo è che quando ho eccezione quando sto pulendo il vecchio file, ho il login e ingoiare, ma ancora causa il rollback della transazione, anche se ho già finito di aggiornare l'oggetto dominio.
Come limitare il completamento della transazione dell'oscilloscopio prima della pulizia o c'è un altro modo per ottenere che l'eccezione di pulizia non causi un rollback?
Solo per la cronaca che sto usando Grails 2.1.1
Una cosa che non capisco del tutto, il mio blocco di cattura non dovrebbe intercettare tutte le eccezioni, sia in fase di esecuzione sia controllate? Come fa la primavera a sapere che ho qualche eccezione? –
Suppongo che stia notando l'eccezione tra i livelli di servizio, nel mio caso ho avuto un livello di servizio che parlava con un altro. Questa è l'unica cosa che ha senso per me. –
Se tutto ciò che si fa è aggiungere @Transactional (noRollbackFor = [FooException, BarException]) a cleanUpOldFile(), quale effetto ha su ogni altro metodo nella classe? Sono ancora transazionali o no? –