[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] pointcut definition problems

right - for 

> to log the entry and exit of methods in the 
> business code, but not in any getters or setters

do 

  execution(* *(..))          // any method-execution
  && ! execution(* get*(..))  // except for getters
  && within(com.business..*)  // in the lexical scope of business
  && {any cflow/other constraints...}

otherwise, you get *all* kinds of join points (field set/get,
constructor-execution, etc.)

Wes

> ------------Original Message------------
> From: Jonathan Amir <jamir@xxxxxxxxxxxxxx>
> To: aspectj-users@xxxxxxxxxxx
> Date: Tue, Sep-7-2004 4:29 PM
> Subject: Re: [aspectj-users] pointcut definition problems
>
> I think that if you have a class in com.business..* and somewhere in 
> that class you call StringBuffer.append(), that method call would be 
> captured in your pointcut. The same thing applies to getter and 
> setters.
> 
> The issue is with understanding how within and withincode works when 
> used in conjunction with call and execution. I suggest reading this 
> page:
> 
> http://dev.eclipse.org/viewcvs/indextech.cgi/~checkout~/aspectj-home/doc/progguide/language-joinPoints.html#d0e1288
> 
> If the link is not working, go to the aspectj documentations 
> (http://www.eclipse.org/aspectj/) and click on the title "call vs. 
> execution" in chapter 2.
> 
> Secondly, I think that you need to explicitly add either a call or 
> execution to your pointcut, otherwise you risk catching too many join 
> points.
> 
> Thanks,
> 
> Jonathan
> 
> 
> Adrian Powell wrote:
> > 
> > Hi all,
> > 
> > I'm working on refining a trace aspect and am having troubles pruning 
> 
> > the output.  I would like to log the entry and exit of methods in the 
> 
> > business code, but not in any getters or setters.  This is my 
> pointcut:
> > 
> >         pointcut perfExecExec(ControllerCommandImpl controller):
> >                         cflowbelow(execution(* 
> > ControllerCommandImpl+.performExecute()))
> >                         && this(controller)
> >                         && !within(TraceAspect)
> >                         && within(com.business..*)
> >                         && !withincode(* *.get*(..));
> > 
> > (the cflowbelow() is added so we can log the session information with 
> 
> > each statement.)
> > 
> > The problem is that when I log 
> > thisJoinPointStaticPart.getSignature().getDeclaringTypeName() and 
> > getSignature().getName(), I am getting:
> > 
> > -  java.lang.StringBuffer.append() (and other library methods) which 
> I 
> > thought was blocked by the "within(com.business..*)" and
> > - any number of get() methods, both inside and outside of the 
> > com.business.* hierarchy
> > 
> > I've tried a number of variations of this pointcut, but none seem to 
> > work.  Considering that I'm not weaving either the Java runtime jars 
> or 
> > any of our library jars, the appearance of entry and exit statements 
> for 
> > library methods is really confusing me.  It makes me think there's 
> > something simple but profound that I am missing.  Can anyone spot it, 
> 
> > because I'm lost.
> > 
> > Thanks!
> > 
> > cheers,
> > -adrian.
> > --
> > Adrian Powell
> > Centre for IBM e-Business Innovation :: Vancouver
> > apowell@xxxxxxxxxx / 604-297-3194
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>