Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] Implementing AspectJ in JSP with Tag

The problem is that your JSP libraries are generated code, so you
don't know exactly what the method/class names are.  Also, it seems
like you are not exposing them to the weaver.

There are some ways around this, however.

1. use cflow.  Is there a package name that you know the JSPs are
coming from such that any (transitive) call from that package will be
a JSP call?  Or is there a class?  If so, then add a
cflow(within(com.package.of.jsps..*)) to your pointcut

2. Ensure that whatever is targeted by the cflow is added to the
weaver (add the jar to the inpath).

On Tue, Jan 27, 2009 at 4:08 AM, Saurabh Khattar, HCL-Industry
Solutions <ksaurabh@xxxxxx> wrote:
> Hi
>
>
>
> ·         I have already tried the first point but we are using the tag
> libraries so it fails. Otherwise this works for the code in the scriptlets.
>
>
>
> ·         Second point I tried but it's not solving our problem.
>
> public aspect Example{
>
> pointcut requiredField() : execution(*
> encompass.studymaintenance.beans.*.*get*(..));
>
> before() : requiredField() {
>
>     System.out.println("entering: " + thisJoinPoint);
>
>     System.out.println("      at: " + thisJoinPoint.getSourceLocation());
>
>   }
>
>
>
>
>
> But it was not able to serve my purpose as I want the beans to return
> formatted text to the JSP using Tag Libraries. So I need to apply advice
> only when it's called from the JSP tag libraries and not from anywhere else.
> With the execution approach it will execute for all the calls to the getters
> of the bean. But I want the advice to execute only when called from jsp.
>
>
>
> Also I tried to get the source location with the execution approach but it's
> not giving the correct value from where the joint point is called.
>
>
>
> Will appreciate if someone can help me.
>
>
>
> Thanks
>
> Saurabh
>
>
>
> ---------------------------------------------------------------------------------------------------------------------------------------------
>
>>Hi,
>
>>
>
>>First, it looks like you are compiling your jsps separately from your
>
>>aspects, and then recompiling them with your aspects.  Not exactly
>
>>sure how jspc works, if it produces Java source or Java byte code.
>
>>Regardless, you probably want to put the jsp code on your in path so
>
>>that ajc knows to apply aspects to it.
>
>>
>
>>Second, try using execution, not call.  This will pick out the join
>
>>point inside the called method, not at the method that is doing the
>
>>calling.  If you do this, then you may not even need to put your jsps
>
>>through ajc at all since it is only the beans that should be affected
>
>>by the advice.  Of course, this implies that *any* time one of these
>
>>bean get methods are called, you want the advice to run (in your
>
>>description you say that you only want it to run when called by a
>
>>jsp).
>
>>
>
>>On Fri, Jan 23, 2009 at 4:35 AM, Saurabh Khattar, HCL-Industry
>
>>Solutions <ksaurabh@xxxxxx> wrote:
>
>> Hi all
>
>>
>
>>
>
>>
>
>> I am trying to implemenet AspectJ in my application.
>
>>
>
>>
>
>>
>
>> My application have package containing all the beans( mypackage.beans).
>> What
>
>> I want to do is whenever I the getters of the beans are called from the
>> jsp
>
>> it should call the advice and return the formatted value.
>
>>
>
>>
>
>>
>
>> What I have done is:
>
>>
>
>>
>
>>
>
>> STEP1: Created an aspect :
>
>>
>
>>
>
>>
>
>> public aspect Example{
>
>>
>
>>
>
>>
>
>> pointcut requiredField() : call(*mypackage.beans.*get*(..));
>
>>
>
>> before() : requiredField() {
>
>>
>
>>     System.out.println("entering: " + thisJoinPoint);
>
>>
>
>>     System.out.println("      at: " + thisJoinPoint.getSourceLocation());
>
>>
>
>>   }
>
>>
>
>> }\
>
>>
>
>>
>
>>
>
>> STEP 2: I am usning ant in the project to build. So I first precompiled by
>
>> jsp  through JspC. And then I am trying to compile these jsp servlets
>
>> through iajc.
>
>>
>
>>
>
>>
>
>> <iajc source="${javac.source}"
>
>>
>
>>                           deprecation="false"
>
>>
>
>>                           debug="${javac.debug}"
>
>>
>
>>                           debuglevel  =
>
>> "${javac.debuglevel}"
>
>>
>
>>                           destdir="@{output.dir}"
>
>>
>
>>                           classpathref="@{classpath.pathref}"
>
>>
>
>>                           fork        = "true"
>
>>
>
>>                     maxmem      ="512m">
>
>>
>
>>                         <sourceroots>
>
>>
>
>>                               <path refid="@{src.pathref}" />    <!—path
>> for
>
>> the Java source-->
>
>>
>
>>                               <path location="jasper_src" />     <!--path
>
>> for the jsp servlets source-->
>
>>
>
>>                         </sourceroots>
>
>>
>
>>                   </iajc>
>
>>
>
>>
>
>>
>
>>
>
>>
>
>> My problem is that I am using JSTL in my JSP's and whenever I am fetching
>
>> value from my bean in my jsp I am using tags rather than writing java code
>
>> in scriptlets to fetch the data. And the jsp compiler converts these tags
>
>> into :
>
>>
>
>>
>
>>
>
>>
>> org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate("${bean.value}",
>
>> java.lang.Object.class, (PageContext)_jspx_page_context, null, false));
>
>>
>
>>
>
>>
>
>> This function gets the value from the bean by calling the getter function
>
>> only but all this is done internally.Due to this the jointpoint is not
>
>> applied here. Also this functions gets the vale from the bean at runtime
>> so
>
>> I am not able to identify the jointpoint.
>
>>
>
>>
>
>>
>
>> Kindly let me know how to overcome this problem and my advice is called
>
>> whenever jsp gets the value from bean.
>
>>
>
>>
>
>>
>
>> Thanks in Advance.
>
>>
>
>>
>
>>
>
>> Saurabh
>
> DISCLAIMER:
> -----------------------------------------------------------------------------------------------------------------------
> The contents of this e-mail and any attachment(s) are confidential and
> intended for the named recipient(s) only.
> It shall not attach any liability on the originator or HCL or its
> affiliates. Any views or opinions presented in
> this email are solely those of the author and may not necessarily reflect
> the opinions of HCL or its affiliates.
> Any form of reproduction, dissemination, copying, disclosure, modification,
> distribution and / or publication of
> this message without the prior written consent of the author of this e-mail
> is strictly prohibited. If you have
> received this email in error please delete it and notify the sender
> immediately. Before opening any mail and
> attachments please check them for viruses and defect.
> -----------------------------------------------------------------------------------------------------------------------
>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
>


Back to the top