[
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
>
>