[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
RE: [aspectj-users] [newbie] General help needed here.....
|
Hi Otavio,
That's right, if you need to bind to the currently executing object it does have a performance impact. But if you are using execution(* method(..)) && this(Type) only to filter the objects matching, it does not have a performance impact when compared to using execution(* Type.method(..))
Ron
> ------------Original Message------------
> From: Otávio Augusto Lazzarini Lemos <oall@xxxxxxxxxxx>
> To: aspectj-users@xxxxxxxxxxx
> Date: Sat, Jul-17-2004 9:51 AM
> Subject: RE: [aspectj-users] [newbie] General help needed here.....
>
> About the last example you gave, you are not actually using the join
> point´s
> currently executing object (this(ExecBytecode)) in your advice. Try to
> use it
> in the before advice and you will have some differences at the bytecode
> level.
> I guess that at least the object will be pushed on to the stack to be
> used by
> the before advice. I don´t know the performance implications of that,
> but the
> bytecode will not be the same.
>
> Otávio
>
> .---------------------- -- --- ---- -----
> |Otávio Augusto Lazzarini Lemos
> |M. Sc. candidate
> |Labes - Software Engineering Laboratory
> |USP - University of São Paulo
> |São Carlos, SP - Brasil
> |oall@xxxxxxxxxxx - otaviolemos@xxxxxxxxxx
> -------------------------------------------- --- - -
>
> Citando Ron Bodkin <rbodkin@xxxxxxxxxxxxxx>:
>
> > Yes Wes, it is true that using the declaring type in the signature is
> useful
> > and can be appropriate for those who have some experience with
> AspectJ.
> > However, for new users it's helpful to get in the mindset of using
> this to
> > specify types instead of doing it in the method signature, instead of
> trying
> > to remember that using declaring types with call is problematic and
> using
> > them with execution is ok (remember that Jerry started off using call
> with a
> > static type in the signature!) And it is also a good rule because
> it's
> > binding the currently executing object in your pointcut is commonly
> done.
> >
> > By the way, this(Type) && execution(...) has *no* dynamic test (+),
> and with
> > the AspectJ 1.2 compiler optimizations should be compiled about
> equally
> > quickly (e.g., slide 96 from Andy Clement's data at
> >
> http://newaspects.com/presentations/Enterprise%20AOP%20AOSD%202004.ppt which
> > shows some related improvements, although not the performance of
> this(..) &&
> > execution(..)).
> >
> > It is true that it's not statically resolvable for declare
> warning/error
> > (although I'd like to see the compiler restriction eased to allow use
> > pointcuts for any special cases where no dynamic test would be
> required to
> > resolve a pointcut; maybe some day). And it also isn't useful for
> statics
> > (clearly). But these are specialized scenarios, not the general rule.
> >
> > Re: configuring AspectJ with Struts, the aTrack project is a working
> example
> > that uses Struts with AspectJ.
> >
> > Ron
> >
> > (+) See section 4.1.2 in "Advice Weaving in AspectJ"
> > http://www.hugunin.net/papers/aosd-2004-cameraReady.pdf. Also I
> compiled two
> > versions of an aspect with AspectJ 1.2 and found identical bytecode:
> >
> > public aspect ExecBytecode {
> > void foo() {}
> > before() : this(ExecBytecode) && execution(* foo()) {}
> > }
> >
> > Then from "javap -c ExecBytecode"
> >
> > foo();
> > Code:
> > 0: invokestatic #49; //Method aspectOf:()LExecBytecode;
> > 3: invokevirtual #51; //Method
> ajc$before$ExecBytecode$1$eb4dac00:()V
> > 6: return
> >
> > public void ajc$before$ExecBytecode$1$eb4dac00();
> > Code:
> > 0: return
> >
> > public aspect ExecBytecode {
> > void foo() {}
> > before() : execution(* ExecBytecode.foo()) {}
> > }
> >
> > Produces:
> > void foo();
> > Code:
> > 0: invokestatic #49; //Method aspectOf:()LExecBytecode;
> > 3: invokevirtual #51; //Method
> ajc$before$ExecBytecode$1$b5db75e4:()V
> > 6: return
> >
> > public void ajc$before$ExecBytecode$1$b5db75e4();
> > Code:
> > 0: return
> >
> > Ron Bodkin
> > Chief Technology Officer
> > New Aspects of Software
> > o: (415) 824-4690
> > m: (415) 509-2895
> >
> > > ------------Original Message------------
> > > From: "Wes Isberg" <wes@xxxxxxxxxxxxxx>
> > > To: aspectj-users@xxxxxxxxxxx
> > > Date: Fri, Jul-16-2004 11:06 PM
> > > Subject: RE: [aspectj-users] [newbie] General help needed here.....
> > >
> > > Hi Ron (, Jerry) -
> > >
> > > re:
> > > > As a general rule, you probably don't want to use the form of
> > > signature
> > > > you have in that pointcut (which matches based on static types
> > > instead
> > > > of runtime instances).
> > >
> > > I've never heard this rule and I believe it is not correct;
> > > The original form
> > >
> > > execution(ReturnType DeclaringType.methodName(..))
> > >
> > > is better than
> > >
> > > execution(ReturnType methodName(..)) && this(DeclaringType)
> > >
> > > *because* it can be resolved staticly and requires no dynamic test
> > > (faster compile, faster implementation, and better IDE support).
> > >
> > > You might be confusing this situation with the suggestion for
> > > the call pointcut not to use the declaring type in the call.
> > > This suggestion is because the signature of a call join point
> > > refers to the type of the reference (at the call site), not the
> > > type of the referent class (at run time). So when people
> > > write
> > >
> > > call(ReturnType DeclaringType.methodName(..))
> > >
> > > they usually mean
> > >
> > > call(ReturnType methodName(..)) && target(DeclaringType)
> > >
> > > (hence the suggestion).
> > >
> > > Wes
> > >
> > > P.S. - If someone does figure out how to configure AspectJ
> > > with Struts, etc, it would be great to contribute back a
> > > description to the mailing list or a bug, for inclusion in
> > > the sample code repository...
> > >
> > >
> > > > ------------Original Message------------
> > > > From: "Ron Bodkin" <rbodkin@xxxxxxxxxxxxxx>
> > > > To: aspectj-users@xxxxxxxxxxx
> > > > Date: Fri, Jul-16-2004 4:09 PM
> > > > Subject: RE: [aspectj-users] [newbie] General help needed
> here.....
> > > >
> > > > Jerry,
> > > >
> > > > A couple of things to try:
> > > > 1) Make sure that you are opening the affected file with the
> AspectJ
> > > > editor and not the Java editor. You should go into window |
> > > preferences |
> > > > file associations and make sure that AspectJ is set the the
> default
> > > for
> > > > .java files
> > > > 2) Try adding this line, to see if the pointcut is matching:
> > > >
> > > > declare warning: actionCall() : "in action execution";
> > > >
> > > > As a general rule, you probably don't want to use the form of
> > > signature
> > > > you have in that pointcut (which matches based on static types
> > > instead
> > > > of runtime instances). It should work for executions, but a
> better
> > > > version is:
> > > >
> > > > pointcut actionExecute() : execution(public ActionForward
> > > > execute(ActionMapping, ActionForm,
> > > > HttpServletRequest, HttpServletResponse))) && this(Logon_Action);
> > > >
> > > > Ron
> > > >
> > > > p.s. there's an already defined, debugged version of a pointcut
> for
> > > > struts action execution in the aTrack project: see
> > > > ajee.component.StrutsPointcuts. aTrack is at
> > > https://atrack.dev.java.net/
> > > >
> > > > public pointcut actionExecute(Action action, ActionMapping
> > > mapping,
> > > > ActionForm form,
> > > > HttpServletRequest request, HttpServletResponse response)
> :
> > > > execution(ActionForward Action.execute(ActionMapping,
> > > > ActionForm,
> > > > HttpServletRequest, HttpServletResponse)) &&
> this(action)
> > >
> > > > &&
> > > > args(mapping, form, request, response);
> > > >
> > > >
> > > > Ron Bodkin
> > > > Chief Technology Officer
> > > > New Aspects of Software
> > > > o: (415) 824-4690
> > > > m: (415) 509-2895
> > > >
> > > > > ------------Original Message------------
> > > > > From: "Jerry Jalenak" <Jerry.Jalenak@xxxxxxxxxx>
> > > > > To: "'aspectj-users@xxxxxxxxxxx'" <aspectj-users@xxxxxxxxxxx>
> > > > > Date: Fri, Jul-16-2004 1:07 PM
> > > > > Subject: RE: [aspectj-users] [newbie] General help needed
> here.....
> > > > >
> > > > > Another possibility that just occurred to me....
> > > > >
> > > > > Since Logon_Action extends Action, do I need to 'expose' the
> > > > > org.apache.struts.action.Action class to the aspect?
> > > > >
> > > > > Jerry Jalenak
> > > > > Development Manager, Web Publishing
> > > > > LabOne, Inc.
> > > > > 10101 Renner Blvd.
> > > > > Lenexa, KS 66219
> > > > > (913) 577-1496
> > > > >
> > > > > jerry.jalenak@xxxxxxxxxx
> > > > >
> > > > >
> > > > > > -----Original Message-----
> > > > > > From: Ramnivas Laddad [mailto:ramnivas@xxxxxxxxxxxxxxx]
> > > > > > Sent: Friday, July 16, 2004 2:29 PM
> > > > > > To: aspectj-users@xxxxxxxxxxx
> > > > > > Subject: Re: [aspectj-users] [newbie] General help needed
> > > here.....
> > > > > >
> > > > > >
> > > > > > Hi Jerry,
> > > > > >
> > > > > > Otávio's suggestion of using execution() PCD is the right
> one.
> > > > > >
> > > > > > It is okay to use any number of aspects crosscutting a class.
>
> > > > > > Just a guess: Do you have every referred type in the pointcut
>
> > > > > > definition (in your case ActionMapping, ActionForm,
> > > > > > HttpServletRequest, HttpServletResponse) appropriately
> imported.
> > > > > >
> > > > > > -Ramnivas
> > > > > >
> > > > > > ===
> > > > > >
> > > > > > Ramnivas Laddad,
> > > > > > Author, AspectJ in Action
> > > > > > http://ramnivas.com
> > > > > >
> > > > > > Jerry Jalenak wrote:
> > > > > >
> > > > > > >Otavio,
> > > > > > >
> > > > > > >Thanks for the reply. Change the PCD from call to execution
>
> > > > > > didn't seem to
> > > > > > >change anything. However, I starting to think I have
> > > > > > something else wrong.
> > > > > > >In the AspectJ Visualizer perspective, I am only seeing
> > > > > > where one aspect has
> > > > > > >been applied (I have two). Is it not possible to have more
> > > > > > than one aspect
> > > > > > >class?
> > > > > > >
> > > > > > >Thanks....
> > > > > > >
> > > > > > >Jerry Jalenak
> > > > > > >Development Manager, Web Publishing
> > > > > > >LabOne, Inc.
> > > > > > >10101 Renner Blvd.
> > > > > > >Lenexa, KS 66219
> > > > > > >(913) 577-1496
> > > > > > >
> > > > > > >jerry.jalenak@xxxxxxxxxx
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >>-----Original Message-----
> > > > > > >>From: Otávio Augusto Lazzarini Lemos
> [mailto:oall@xxxxxxxxxxx]
> > > > > > >>Sent: Friday, July 16, 2004 1:31 PM
> > > > > > >>To: aspectj-users@xxxxxxxxxxx
> > > > > > >>Subject: Re: [aspectj-users] [newbie] General help needed
> > > > here.....
> > > > > > >>
> > > > > > >>
> > > > > > >>You should use an execution PCD. In your example the calls
> to
> > > > > > >>Logon_action.execute(ActionMapping, ActionForm,
> > > > HttpServletRequest,
> > > > > > >>
> > > > > > >>
> > > > > > >>>HttpServletResponse) are the intercepted join points, and
> > > > > > >>>
> > > > > > >>>
> > > > > > >>not the actual
> > > > > > >>execution of the method (try to look at the places where
> you
> > > > > > >>call the method).
> > > > > > >>Tell me if it works with the execution instead of the call
> PCD.
> > > > > > >>
> > > > > > >>Otávio
> > > > > > >>
> > > > > > >>Citando Jerry Jalenak <Jerry.Jalenak@xxxxxxxxxx>:
> > > > > > >>
> > > > > > >>
> > > > > > >>
> > > > > > >>>First, thanks to Rod, Adrian, and Ramnivas for their help
> > > > > > >>>
> > > > > > >>>
> > > > > > >>the other day. I
> > > > > > >>
> > > > > > >>
> > > > > > >>>think I'm starting to get the hang of this....
> > > > > > >>>
> > > > > > >>>That being said, I'm stuck as to why the following doesn't
>
> > > > > > >>>
> > > > > > >>>
> > > > > > >>work. I've just
> > > > > > >>
> > > > > > >>
> > > > > > >>>upgraded to the AJDT 1.1.11 plug-in, if it matters.
> > > > > > >>>
> > > > > > >>>Here's the aspect :
> > > > > > >>>
> > > > > > >>> public aspect MemberSolutions_BaseActionAspect
> > > > > > >>> {
> > > > > > >>> // ~ Pointcut definitions
> > > > > > >>>
> > > > > > >>> pointcut actionCall() :
> > > > > > >>> (call(public ActionForward
> > > > > > >>>Logon_Action.execute(ActionMapping, ActionForm,
> > > > > HttpServletRequest,
> > > > > > >>>HttpServletResponse)));
> > > > > > >>>
> > > > > > >>> // ~ Advice definitions
> > > > > > >>>
> > > > > > >>> before() : actionCall()
> > > > > > >>> {
> > > > > > >>> System.out.println("here i am");
> > > > > > >>> }
> > > > > > >>> }
> > > > > > >>>
> > > > > > >>>and the class I'm trying to weave it into :
> > > > > > >>>
> > > > > > >>> public class Logon_Action extends Action
> > > > > > >>> {
> > > > > > >>> public ActionForward execute(ActionMapping
> > > _actionMapping,
> > > > > > >>> ActionForm _actionForm, HttpServletRequest
> > > > _request,
> > > > > > >>> HttpServletResponse _response)
> > > > > > >>> {
> > > > > > >>> Logon_ActionForm form = (Logon_ActionForm)
> > > _actionForm;
> > > > > > >>> return null;
> > > > > > >>> }
> > > > > > >>> }
> > > > > > >>>
> > > > > > >>>Everything compiles OK (no errors, anyway), but when I
> > > > > > >>>
> > > > > > >>>
> > > > > > >>check the class I
> > > > > > >>
> > > > > > >>
> > > > > > >>>don't see any indication that the aspect is being applied.
>
> > > > > > >>>
> > > > > > >>>
> > > > > > >>I expect to see
> > > > > > >>
> > > > > > >>
> > > > > > >>>an indicator on the first statement of the class....
> > > > > > >>>
> > > > > > >>>I'm probably being dense on this, and it's something
> really
> > > > > > >>>
> > > > > > >>>
> > > > > > >>stupid, but I
> > > > > > >>
> > > > > > >>
> > > > > > >>>can't seem to figure it out. Any help?
> > > > > > >>>
> > > > > > >>>Thanks guys!
> > > > > > >>>
> > > > > > >>>Jerry Jalenak
> > > > > > >>>Development Manager, Web Publishing
> > > > > > >>>LabOne, Inc.
> > > > > > >>>10101 Renner Blvd.
> > > > > > >>>Lenexa, KS 66219
> > > > > > >>>(913) 577-1496
> > > > > > >>>
> > > > > > >>>jerry.jalenak@xxxxxxxxxx
> > > > > > >>>
> > > > > > >>>
> > > > > > >>>This transmission (and any information attached to it) may
>
> > > > > > >>>
> > > > > > >>>
> > > > > > >>be confidential
> > > > > > >>
> > > > > > >>
> > > > > > >>>and
> > > > > > >>>is intended solely for the use of the individual or entity
>
> > > > > > >>>
> > > > > > >>>
> > > > > > >>to which it is
> > > > > > >>
> > > > > > >>
> > > > > > >>>addressed. If you are not the intended recipient or the
> > > > > > >>>
> > > > > > >>>
> > > > > > >>person responsible
> > > > > > >>
> > > > > > >>
> > > > > > >>>for
> > > > > > >>>delivering the transmission to the intended recipient, be
> > > > > > >>>
> > > > > > >>>
> > > > > > >>advised that you
> > > > > > >>
> > > > > > >>
> > > > > > >>>have received this transmission in error and that any use,
>
> > > > > > >>>
> > > > > > >>>
> > > > > > >>dissemination,
> > > > > > >>
> > > > > > >>
> > > > > > >>>forwarding, printing, or copying of this information is
> > > > > > >>>
> > > > > > >>>
> > > > > > >>strictly prohibited.
> > > > > > >>
> > > > > > >>
> > > > > > >>>If you have received this transmission in error, please
> > > > > > >>>
> > > > > > >>>
> > > > > > >>immediately notify
> > > > > > >>
> > > > > > >>
> > > > > > >>>LabOne at the following email address:
> > > > > > >>>
> > > > > > >>>
> > > > > > >>securityincidentreporting@xxxxxxxxxx
> > > > > > >>
> > > > > > >>
> > > > > > >>>_______________________________________________
> > > > > > >>>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
> > > > > > >>
> > > > > > >>
> > > > > > >>
> > > > > > >
> > > > > > >This transmission (and any information attached to it) may
> > > > > > be confidential and is intended solely for the use of the
> > > > > > individual or entity to which it is addressed. If you are not
>
> > > > > > the intended recipient or the person responsible for
> > > > > > delivering the transmission to the intended recipient, be
> > > > > > advised that you have received this transmission in error and
>
> > > > > > that any use, dissemination, forwarding, printing, or copying
>
> > > > > > of this information is strictly prohibited. If you have
> > > > > > received this transmission in error, please immediately
> > > > > > notify LabOne at the following email address:
> > > > > > securityincidentreporting@xxxxxxxxxx
> > > > > > >
> > > > > > >_______________________________________________
> > > > > > >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
> > > > > >
> > > > >
> > > > > This transmission (and any information attached to it) may be
> > > > > confidential and is intended solely for the use of the
> individual
> > > or
> > > > entity to
> > > > > which it is addressed. If you are not the intended recipient or
> the
> > >
> > > > > person responsible for delivering the transmission to the
> intended
> > > > > recipient, be advised that you have received this transmission
> in
> > > > error and
> > > > > that any use, dissemination, forwarding, printing, or copying
> of
> > > this
> > > >
> > > > > information is strictly prohibited. If you have received this
> > > > transmission
> > > > > in error, please immediately notify LabOne at the following
> email
> > > > > address: securityincidentreporting@xxxxxxxxxx
> > > > >
> > > > > _______________________________________________
> > > > > 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
> >
>
>
> --
> -----------------------------------------------------------.__
> Otávio Augusto Lazzarini Lemos |
> oall@xxxxxxxxxxx - otaviolemos@xxxxxxxxxx |
> ------------------------------------------------------------- |
> Insituto de Ciências Matemáticas e de Computação - ICMC/USP |
> --------------------------------------------- -------- ---- ==
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>