On Tue, Nov 16, 2010 at 4:39 AM, Andy Clement [via AspectJ] <
ml-node+3043478-702256456-202...@n4.nabble.com<ml-node%2b3043478-702256456-202...@n4.nabble.com>
> wrote:

> Hi Brett,
>
> On 14 November 2010 12:41, javabrett <[hidden 
> email]<http://user/SendEmail.jtp?type=node&node=3043478&i=0>>
> wrote:
>
> >
> > This exercise sparked the following questions for me:
> >
> > 1) Is the no-search and explicit weaver-need for the annotation-based
> advice
> > behaviour change in 1.6.8 mentioned anywhere in the changes docs?  I
> > couldn't spot it in the 1.6.8 README [2].  Might be a good one to point
> out
> > somewhere if not already noted, perhaps a FAQ entry for those using
> > annotation-style javac-compiled advice.
> > 2) To me it seems like the bulk of aop.xml examples are either pre this
> > change, or expect non-annotation-based advice or use of the ajc compiler
> > (which does the advice-weaving).  I reckon most if not all examples of
> > aop.xml I've encountered do not include weaving directives for the advice
>
> > itself, only for the classes to be woven/advised at load-tim.  It might
> be
> > worth having such an example with a commented <weaver> inclusion for an
> > annotation-style javac-compiled advice.
>
> You are exactly right that previously (prior to 1.6.7 actually) it
> used to more actively search for annotation based aspects because they
> needed 'finishing off'.  A change to this wasn't really made due to
> more people using ajc rather than javac, but because of the sheer cost
> of searching for annotation based aspects.  Usually there are far
> fewer aspects than regular classes in a normal system, and the only
> way to discover annotation based aspects was by actually loading the
> bytes, it was found to drastically improve performance if the change
> was made requiring the user to actively list the aspects in the
> aop.xml file.
>
> I had thought some text to this effect had made it into either the
> 1.6.7 or 1.6.8 readmes.  (1.6.7 covered the bulk of changes in this
> area, 1.6.8 was an emergency release a few days later to address some
> serious issues that were found with the big changes in 1.6.7).
> However, I double checked and it isn't  - so I raised
> https://bugs.eclipse.org/bugs/show_bug.cgi?id=330269 as a placeholder
> bug to remind me to document it (and a FAQ entry would be nice, yes).
>
> Normally I would always say that all aspects should be listed in an
> aop.xml - without them listed reweaving won't work very well.
> Recently I had to address a situation where Spring Roo (which heavily
> uses aspects) was not listing all aspects and that caused reweaving to
> fail at application server startup time (due to Spring Insight, which
> uses LTW, attempting to reweave the Roo application).  This was
> nothing to do with code style vs annotation style.
>
> My gut reaction is that you only need to list them in the aspects
> section so we know what they are - are you finding you also need to
> list them in the weaver section?  (I would need to double check my
> expectations here.)
>
> cheers
> Andy
>

Thanks for the note Andy.

This was my development sequence/experience:

* Target code to advise and JVM are 1.6/Sun 1.6.
* I created a new Eclipse Helios AspectJ project with defaults (although I
always intended to write the advice in Java).
* Added a new/single aspect class, written in plain-old .java and using
@Aspect annotation-style.
* Single/inline execution pointcut (with args and returning bindings) in an
@AfterReturning annotation.
* Added META-INF/aop.xml as part of Eclipse-exported JAR.  Contains single
<weaver> include (advised package) and a single <aspects><aspect> (the
advice class).
* Exported JAR with Eclipse - at this point AJDT is active.  Configured the
LTW agent and the advice is correctly weaved.
* Built the advice project with plain-old javac (via Maven actually, but not
using ajc or special Maven plugins - plain Java JAR project).  Advice is no
longer weaved with this JAR.
* Converted the Eclipse project to a plain Java project, so AJDT becomes JDT
compiler.  Advice is also no longer weaved, so nothing wrong with Maven
options.
* Read your mailing list post.
* Added a new entry to <weaver>, <include>ing the Java package name of the
advice Java class.
* Advice is again woven by the LTW.

Conclusion is that the advice class, as well as the advised class must be
explicitly exposed to the weaver when the plain javac compiler is used, and
that this is a behavioural change in 1.6.7/8 caused by removing the
annotation-hunt.  Listing it as <advice> seems to not be sufficient (this is
probably a violation of DRY principle - i.e. I've named the advice, this
should be sufficient to have it woven?).  This is not required if the ajc
compiler is used, as it performs some enhancement/weaving of the advice
class before deployment and exposure to the LTW (the additional bytecode is
visible when comparing the java output with the ajc output).

Let me know if you feel that there is a DRY principle violation here and I
can raise a bug.  It feels like advice named in aop.xml should be auto-woven
if required (built with javac) rather than repeating it in <weaver>.

Cheers
Brett

-- 
View this message in context: 
http://aspectj.2085585.n4.nabble.com/LTW-requirements-for-annotation-style-Aspect-s-compiled-with-javac-tp3042139p3044142.html
Sent from the AspectJ - users mailing list archive at Nabble.com.
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to