Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Campus Escuela de Groovy

Grails

Aspecto se ejecuta dos veces con metodo de Servicio con Transactional = true

dlodos - viernes 17/06/2011
Hola, necesito efectuar una accion especifica cuando un metodo de un Servicio es ejecutado. Cree el Aspecto que intercepta con execution al metodo, pero si el Servicio tiene Transactional = true el Aspect se ejecuta doble. Si Transactional = false el Aspecto se ejecuta solo una vez como yo deseo.
El codigo del Aspecto (para probar) es
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*

@Aspect
class TestAspect
{
        @Around("execution (* *.*Service.*SM(..))")
        Object testExecution (ProceedingJoinPoint method)
        {
                println "antes"
                Object o = method.proceed()
                println "despues"
                return o
        }
}

Debuguee el codigo y verifique que el Aspecto se invoca la primera vez al llamarse el metodo del Servicio con Transactional = true, pero al ejecutarse la linea Object o = method.proceed() el Aspecto reentra provocando su doble ejecución lo cual se verifica por 2apariciones de los mensajes de "antes" y "despues".
Por que ocurre esto? Como puedo evitar la doble ejecucion del Aspecto para Servicios con Transactional = true?
Responder al hilo | Volver al foro "Grails" | Volver a los foros