[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
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 |
--------------------------------------------- -------- ---- ==