Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] Question about usingwithin/cflowpointcutswiththird-party jars

Thanks again, will explore LTW and watch for your upcoming blog entry.

Cheers,
Neil

> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx 
> [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Ron Bodkin
> Sent: Friday, August 18, 2006 2:50 PM
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] Question about 
> usingwithin/cflowpointcutswiththird-party jars
> 
> LTW can be somewhat expensive if you weave into everything 
> (at least there's additional weaving time and memory use). By 
> scoping your aspects to work within Hibernate types you'll 
> reduce that (which you already did). You can also reduce the 
> overhead further by restricting the scope of weaving for your 
> aspect with an include clause, e.g.,
> 
> <aspectj>
>    <weaver>
>        <include within="org.hibernate..*"/>
>    </weaver>
> ...
> 
> If you do this, make sure you have inclusions to support any 
> other aspects that you are weaving in. I am planning to write 
> a blog entry about this
> topic: how to minimize overhead when deploying aspects for 
> load-time weaving. The other way to keep overhead down is to 
> deploy the aspects with the smallest scope possible (e.g., if 
> you deploy hibernate.jar to a single app, you can limit the 
> weaving to that one app instead of weaving into all apps).
> 
> Sorry there was a typo in my last pointcut: it should say 
> execution(new(..)) NOT execution(* new(..)). This pointcut 
> refers to execution of constructors, which have a different 
> form than methods (notably no return type).
> 
> -----Original Message-----
> From: aspectj-users-bounces@xxxxxxxxxxx
> [mailto:aspectj-users-bounces@xxxxxxxxxxx] On Behalf Of Neil Redding
> Sent: Friday, August 18, 2006 11:39 AM
> To: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] Question about using 
> within/cflowpointcutswiththird-party jars
> 
> 
> Thanks Ron - a couple followup questions below:
> 
> > To weave within the hibernate classes, you would need 
> Hibernate to be 
> > on your inpath (i.e., to weave the Hibernate jars). One way 
> you might 
> > do this without building a modified version of Hibernate would be 
> > load-time weaving.
> 
> I've been assuming LTW is expensive - is it not? I think I'll 
> give it a go, since I don't want to modify Hibernate unless I 
> have to. 
> 
> > Another option would be to use cflow of calls into Hibernate. 
> > The calls from your code into Hibernate can be woven 
> without weaving 
> > into Hibernate. E.g.,
> > 
> > 	pointcut callHibernate(): 
> > 		call(* org.hibernate..*(..)) ||
> > call(org.hibernate..*.new(..));
> > 	pointcut inHibernate(): cflow(callHibernate());
> > 
> > 	pointcut setterNotCalledByHibernate():
> > 		!calledByHibernate() && execution(* *.set*(..));
> 
> Right; the issue is that I need to exclude Hibernate 
> joinpoints regardless of where they're called from - it's not 
> always from "my code". 
> 
> > Also, note that your original pointcut is rather expensive 
> (it would 
> > weave into *all join points* in Hibernate such as field get/set, 
> > handler etc). If you were going to weave into Hibernate you'd want 
> > something like:
> > 
> > 	pointcut hibernate(): 
> > 		(execution(* *(..)) || execution(* new(..))) &&
> > 		within(org.hibernate..*);
> 
> Thanks, I was a bit method-invocation-myopic there for a 
> moment - didn't consider the other joinpoint types. :-)
> 
> Dumb question (?): Why "execution(* new(..))" in the pointcut 
> immediately above - isn't this covered by "execution(* *(..))"?
> 
> Cheers,
> Neil
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> 


Back to the top