[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] Guidaance on Cflow usage
|
1. Thanks for pointing out that calls in the body of advice will be
matched. I think this is the behaviour I'm seeing rather, and not a
mismatch with advice execution. Oh me of little faith in AspectJ QA!
However, observing that I can get cflow to match advice execution join
points in AspectJ V1.0.6, I get the feeling that the introduction of
advice execution join points is a case of a bug being turned into a
feature :)
Cheers for the help!
DL
-----Original Message-----
From: aspectj-users-admin@xxxxxxxxxxx
[mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Wes Isberg
Sent: 19 August 2003 13:26
To: aspectj-users@xxxxxxxxxxx
Subject: Re: [aspectj-users] Guidaance on Cflow usage
Hi -
Donal Lafferty wrote:
> 2. With respect to Wes Isberg's comments, I think that I'm working
off
> the wrong documents. Specifically, the docs I was looking at did not
> mention advice execution join points. Perhaps I could take this
> opportunity to request the future documentation include the relevant
> AspectJ version in their title?
Good point. We'll include the version in the docs.
> 3. There seems to be a bug with V1.1 in that the 'call' primitive
> pointcut designator can be made to select advice execution join
points.
> As pointed out earlier 'call ( * *.*())' will match advice execution
> join points, which is not in synch with the Programming Guide
> description of the 'call' designator.
Sounds like a bug! Please do submit, with a test case if possible.
(It's not a bug if it matches calls from the body of advice.)
Wes
>
>
>
> -----Original Message-----
> From: aspectj-users-admin@xxxxxxxxxxx
> [mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Gregor Kiczales
> Sent: 18 August 2003 05:52
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] Guidaance on Cflow usage
>
> Ramnivas has already pointed out the !within(<aspect>) idiom you want
to
> use here.
>
> I want to use Donal's message to bring up a couple of points that may
be
> more
> generally helpful. His message raises some issues that I've heard
> several
> times now, so it seemed worth trying to write down some of the answer.
>
> (Apologies to Donal for dumping all this in response to your message.
> Since you're a teacher and a textbook developer I hope you'll forgive
> me using your message to stress a general set of points!)
>
> The two key points I want to make are that:
>
> - Join points, pointcuts and advice are orthogonal.
> - Advice are on pointcuts, and pointcuts match join points.
>
> So an advice "knows" what pointcut it is on; and poincuts "know"
> what join points they match. But there is relationship in the other
> direction -- pointcuts don't know what advice is on them; join points
> don't know what pointcuts match them, or what advice runs at them.
>
> One consequence of this is that when you are trying to think about why
> a particular advice is (or isn't) running, you can focus on the
> pointcut,
> and what join points it matches. It doesn't matter about what kind of
> advice it is.
>
> It can also help sharpen other questions about pointcuts.
>
> For example, in:
>
> Maybe cflow should match all join points during the execution,
> even if they are introduced by virtue of the same cflow call.
>
> That description doesn't really fit the AspectJ model. There is no
> such thing as a "cflow call". All that is happening is that cflow is
> matching a join point, and that join point just happens to arise
because
> of advice on that pointcut. But the cflow part of the pointcut knows
> nothing about the advice.
>
> Similarly, in:
>
> If it is okay for advice statements of an aspect to match pointcuts
> in the same aspect, then I shouldn't have to use the mangled name to
> do it.
>
> In the AspectJ model, advice statements don't match. Just pointcuts
> do. And, as before, the orthogonality of the three concepts makes
> how poincuts match join points independent of advice.
>
>
> Finally, with regard to the details of matching advice execution join
> points, the pointcut that does that is 'adviceexecution()'. I can't
> remember whether we ever considered trying to have the execution
> pointcut
> match advice execution join points. adviceexecution came up pretty
> late,
> so probably not.
>
>
>
>
>
>
>>-----Original Message-----
>>From: aspectj-users-admin@xxxxxxxxxxx
>>[mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Donal Lafferty
>>Sent: Sunday, August 17, 2003 1:35 PM
>>To: aspectj-users@xxxxxxxxxxx
>>Subject: RE: [aspectj-users] Guidaance on Cflow usage
>>
>>
>>1. Using cflowbelow does not help. In the example provided, the
>>pointcut argument of the cflow designator does not explicitly
>>match the
>>advice in Cflow.aj. So, using cflowbelow should result in the same
>>behaviour, and I get the same behaviour when I modify the pointcut to
>>use cflow instead of cflowbelow.
>>
>>2. Perhaps the behaviour I'm seeing is not a problem. Maybe cflow
>>should match all join points during the execution, even if they are
>>introduced by virtue of the same cflow call. In this light its okay
>>that calls advice in Cflow.aj are caught.
>>
>>3. If it is okay for advice statements of an aspect to match
>>pointcuts
>>in the same aspect, then I shouldn't have to use the mangled
>>name to do
>>it. Should I? If advice statements are legitimate join
>>points, then I
>>would expect to be able to use execution designators to pick them out.
>>In a way I can, ex. call( * *.*( * )) seems to select calls to the
>>advice in cflow.aj. However, given the claim that aspects
>>are modelled
>>on Java types, I would expect that something like call( *
>>Cflow.*( * ))
>>would also select advice from the aspect Cflow. Unfortunately it does
>>not.
>>
>>
>>DL
>>
>>
>>-----Original Message-----
>>From: aspectj-users-admin@xxxxxxxxxxx
>>[mailto:aspectj-users-admin@xxxxxxxxxxx] On Behalf Of Ramnivas Laddad
>>Sent: 16 August 2003 20:08
>>To: aspectj-users@xxxxxxxxxxx
>>Subject: Re: [aspectj-users] Guidaance on Cflow usage
>>
>>Donal,
>>
>>You need to use cflowbelow() pointcut to exclude the join point
>>itself.
>>
>>There is a sample chapter (chapter 3) from my book posted that
>>covers control-flow based pointcuts:
>>http://www.manning.com/laddad/
>>
>>-Ramnivas
>>
>>--- Donal Lafferty <laffertd@xxxxxxxxx> wrote:
>>
>>>Hi!
>>>
>>>I'm having trouble coming to grasps with cflow pointcuts. In the
>>>example below, I was surprised to find out that cflow advice is
>>>included
>>>in the set of cflow join points, which leads to an infinite
>>>recursion.
>>>Although I'm tempted to submit this as a bug, I'm not wholly
>>>convinced I
>>>understand what I'm doing. Moreover, the bug submission system is
>>>down.
>>>
>>>Any comments on the problem are more than welcome!
>>>
>>>Cheers,
>>>
>>>
>>>DL
>>>
>>>
>>>WordCounterDemo.java
>>>
>>>class WordCounterDemo
>>>{
>>> static String[] smallSample= {"This", "demos", "infinite", "loop",
>>>"in",
>>> "cflow", "before", "advice"};
>>>
>>> public static void main(String[] args) {
>>> WordCounter wordCounter = new WordCounter();
>>> String word;
>>> String[] wordList1 = smallSample;
>>> int words = 0;
>>> for (int i = 0; i < wordList1.length; i++) {
>>> word = smallSample[i];
>>> System.out.println("Adding " + word +", as word #" +
>>>(++words));
>>> wordCounter.Add(word);
>>> }
>>> }
>>>}
>>>
>>>WordCounter.java
>>>
>>>public class WordCounter {
>>> public void Add(String word) {
>>> System.out.println("Add entry, word = "+word.toString());
>>> }
>>>}
>>>
>>>Cflow.aj
>>>
>>>public aspect Cflow {
>>> pointcut AddCflow(): cflow( execution( * WordCounter.Add( * )));
>>>
>>> // In AspectJ 1.0.6 and 1.1 here is an infinite loop here, because
>>>the
>>>
>>> // before advice is itself considered a join point in the cflow.
>>> before(): AddCflow() { System.out.println("Before advice
>>
>>call" ); }
>>
>>>}
>>>
>>>CflowWeave.lst
>>>
>>>WordCounterDemo.java
>>>WordCounter.java
>>>Cflow.aj
>>>
>>>
>>>Which compiles with:
>>>
>>>ajc -argfile CflowWeave.lst
>>>
>>>And runs with:
>>>
>>>java -classpatch "%CLASSPATH;./" WordCounterDemo
>>>
>>>Gives the output
>>>
>>>Adding This, as word#1
>>>Exception in thread "main" java.langStackOverflowError
>>>
>>>
>>>
>>>_______________________________________________
>>>aspectj-users mailing list
>>>aspectj-users@xxxxxxxxxxx
>>>http://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
>>__________________________________
>>Do you Yahoo!?
>>Yahoo! SiteBuilder - Free, easy-to-use web site design software
>>http://sitebuilder.yahoo.com
>>_______________________________________________
>>aspectj-users mailing list
>>aspectj-users@xxxxxxxxxxx
>>http://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>_______________________________________________
>>aspectj-users mailing list
>>aspectj-users@xxxxxxxxxxx
>>http://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>
>
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
aspectj-users@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/aspectj-users