I agree that the error message from Spring about the treatment of aspects
compiled with 'ajc' could be improved. If you can file a JIRA issue (for
Spring), that will be great.
As for LTW picking up @Aspect aspects, it shouldn't really happen; only
aspects that are declared in aop,xml (and variations of it such as
aop-ajc.xml) are woven in as long as no exclude statements exclude it. So
something else is going on here. Do you have another aop.xml (or aop-ajc.xml
created by 'ajc -outxml' option). What happens when you explicitly exclude
the aspect?

-Ramnivas

On Wed, Jul 29, 2009 at 7:41 PM, Satish Terala <[email protected]>wrote:

> I have an aop.xml that declares certain aspects that I would like to be
> woven by AspectJ LTW. I also have other aspects that I would like Spring
> to apply (i want regualr proxy based mechanism for these).
>
> Spring has a restriction that it will not apply any aspects that have
> been woven by AspectJ Compiler.It does these by checking for any fields
> that start with 'ajc$'.
>
> After struggling to understand why my Aspect that was not declared in
> aop.xml was not getting applied, I tried to apply the aspect
> programatically using
> AspectJProxyFactory aspectJProxyFactory=new AspectJProxyFactory(bean);
> aspectJProxyFactory.addAspect(DtExceptionHandlerAdvice.class);
>
> Then I get the exception
> org.springframework.aop.framework.AopConfigExcepti on: Advice must be
> declared inside an aspect type: Offending method 'public void
> ca.xxxx.yy.remote.endpoint.impl.DtExceptionHandler
> Advice.runtimeError(java.lang.RuntimeException)' in class
> [ca.xxxx.yy.remote.endpoint.impl.DtExceptionHandler Advice]
>
> Once I dig thru I find that the exception message is misleading because
> the advice is declared in an aspect type. The issue really is that when
> Spring checks if an advice class that is being applied is really an
> aspect type it checks for @Aspect to be present, or if its an aspect
> type and also if it has any ajc$ variables in it. Ideally the error
> message should have said that aspect has been woven by AspectJ Compiler,
> but thats another issue anyways.
>
> But really my problem is that AspectJ is weaving an aspect thats not
> been declared in its aop.xml file.
>
> Here is my aop.xml file
> <aspectj>
> <weaver options="-debug -verbose -showWeaveInfo">
> <!-- only weave classes in our application-specific packages -->
> <include within="org.quartz..*"/>
> <include within="ca.xxxx.yy.services..*"/>
> <include within="ca.xxxx.yy.dao..*"/>
> <include within="ca.xxxx.yy.newdispatch..*"/>
> <include within="ca.xxxx.yy.domain.entity.energy..*"/>
> <!-- <include within="ca.xxxx.yy.event.reciever..*"/> -->
> </weaver>
> <aspects>
> <!-- weave in just this aspect including only the aspects that we want
> woven by AspectJ Runtime -->
> <aspect name="ca.xxxx.yy.eventqueue.impl.SystimeAspect"/>
> <aspect name="ca.xxxx.yy.services.advices.LimitAdvice"/>
> <aspect name="ca.xxxx.yy.services.advices.ApplyDispatchLevelsAdvice"/>
> <aspect name="ca.xxxx.yy.services.advices.DDSAvailableOffsetAdvice"/>
> <aspect name="ca.xxxx.yy.services.advices.EnergyMarketAuto
> ReductionOffsetAdvice"/>
> <aspect name="ca.xxxx.yy.services.advices.FilterLongLeadAssetAdvice"/>
> <aspect name="ca.xxxx.yy.services.pointcuts.OffsetAspectsPrecedence"/>
> </aspects>
>
> and My aspect is declared in a file
>
>
> package ca.xxxx.yy.remote.endpoint.impl;
>
> @Aspect
> public class DtExceptionHandlerAdvice {
>
> @Log
> Logger logger;
> }
>
> In my debug log I see the line
>
> [appclassloa...@130c19b] debug weaving
> 'ca.xxxx.yy.remote.endpoint.impl.DtExceptionHandle rAdvice'
>
> And when running thru my debugger i do see that the
> DtExceptionHandlerAdvice does have two variables starting with ajc$
> proving that it has indeed been woven by AspectJ load time weaver.
>
> Any reason why this might be happening, Does AspectJ LTW simply pick up
> all classes with @Aspect and consider them as aspects, if that is the
> case should I now have to exclude the ones that I don't want to be woven
> explicitly.
>
> Any help would be appreciated.
>
> Thanks
> -Satish
> _______________________________________________
> aspectj-users mailing list
> [email protected]
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to