You will need to exclude *getStatisticsSource() *from being advised (or add
!cflowbelow(within(ApplyStatisticsDaoAllPublicMethodsAspect))

The reason you get infinite recursion is the following call sequence:
1. A method executed on dao
2. Advice executes
3. Advice calls *getStatisticsSource*
4. Since that is a method on dao (and its execution is not within the
aspect)... go to 1

-Ramnivas

On Tue, Jul 13, 2010 at 1:40 PM, Stephen Boesch <java...@gmail.com> wrote:

> In the following aspect, the bolded methods cause infinite recursion due to
> re-invocation of the pointcut.  I don't get it: the pointcut conditions
> include
>
>
> * !within(ApplyStatisticsDaoAllPublicMethodsAspect) *
>
> So why did that not avoid the recursion?
>
>
> @Aspect
> public class ApplyStatisticsDaoAllPublicMethodsAspect {
>
> @Aspect
> public class ApplyStatisticsDaoAllPublicMethodsAspect {
>
> @Around(value = "execution(public * WaterfallOrmDao+.find* (..)) &&
> !within(ApplyStatisticsDaoAllPublicMethodsAspect) && this(dao)", argNames =
> "thisJoinPoint, dao")
>   public Object aroundApplyStatisticsMethod (ProceedingJoinPoint
> thisJoinPoint, WaterfallORMDao dao)
>     throws Throwable {
>
> ..
>         executedMethod =
> ((MethodSignature)thisJoinPoint.getSignature()).getMethod();
>
>  STATISTICS_FACTORY.getStatistics().addStatLine(dao.getManagedClass(),
> executedMethod, *dao.getStatisticsSource(),* stop - start);
>       LOG.warn(dao.getManagedClass()+" "+ executedMethod+" "+ *
> dao.getStatisticsSource()*+" " + (stop - start));
>  ..
>
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to