outside create grails gorm grails-services

create - ¿Cómo saber si un método transaccional en un servicio de Grails fue exitoso?



gorm outside grails (2)

Hay varias formas de verificar lo mismo:

  1. Como no desea rastrear todos los saves en la clase de servicio, supongo que tampoco le gustaría rastrear cada uno de los failOnError para establecer el indicador failOnError . El enfoque alternativo es establecer grails.gorm.failOnError=true en Config.groovy que verifica automáticamente cada guardado y arroja una ValidationException en caso de que falle la validación en la clase de dominio. ValidationException es una RuntimeException por lo tanto, la transacción se revertirá si se lanza. Echa un vistazo a failOnError para entender la idea.

  2. (Poco menos detallado en su caso) El método Save devuelve el objeto de dominio en sí mismo en caso de éxito, de lo contrario nulo si falla la validación. Nuevamente ha rastreado todos los if(a.save()){...} para verificar algo como if(a.save()){...} , if(b.save()){...} , blah, blah ...

  3. (Creo que el enfoque apropiado) será usar TransactionAspectSupport para obtener el estado de la transacción y verificar si está configurado para deshacer solo. Si no es así, eres bueno.

Por ejemplo:

def someMethod(){ try{ ... a.save() .... b.save() .... c.save() .... etc... }catch(e){ //It can also be used as a last line in method instead of checking //in catch block. println TransactionAspectSupport.currentTransactionStatus().isRollbackOnly() } //println TransactionAspectSupport.currentTransactionStatus().isRollbackOnly() }

Tengo algo como esto:

class SomeService { static transactional = true def someMethod(){ ... a.save() .... b.save() .... c.save() .... etc... }

}

Quiero saber si el método transaccional fue exitoso o no, no quiero verificar la propiedad de error en cada objeto de dominio porque la lógica involucra muchas clases de dominio y sería difícil.


Utilizar

a.save(failOnError: true) b.save(failOnError: true) c.save(failOnError: true) d.save(failOnError: true)

Supongo que lo que quiere es que el servicio arroje una excepción por error de un solo guardado de dominio y deshaga la transacción en tales casos.