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?
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?