Sorry I'm slow following up - guess I'm running out of options.  It
all sounds like the runtime check is failing but tricky to know why.

With regard to:

> [WARNING] does not match because declaring type is java.lang.Object, if match 
> desired use target(org.apache.log4j.Logger) [Xlint:unmatchedSuperTypeInCall]

we could try loosening up the pointcut and see why it is misbehaving:

From:

 pointcut logCall() : call(* org.apache.log4j.Logger.*(..)) &&
!within(*..*Aspect);

to:
 pointcut logCall() : call(* *(..)) && !within(*..*Aspect) && target(Logger);

maybe also try removing the percflow() model to see if that makes the
advice spring to life - if not singleton then perhaps try
pertypewithin(com.mycompany.myapp.webservices..*).

that may give us more clues.

cheers
Andy



On 3 June 2011 16:02, Abhijit Inamdar <ainam...@intrepidls.com> wrote:
>> Have you definetly confirmed the advice actually isn't being called?
> Yes that seems to be the case. I ripped out the MDC stuff and put in plain 
> logger calls(just like System.out) & also attached a debugger to the tomcat 
> instance, but no luck in either case.
>
>  > the 'duringMyOp()' is actually redundant here because all advice in a 
> 'percflow(X)' aspect has the implicit additional condition ...<snip>
> Thanks for the tip.  Please bear with my noobishness here.
>
>>That would just be at one joinpoint though (if you see it once)
> Actually I see it a bunch of times.  I'll try to see whether there is any 
> correlation between the number of warnings and the number of logger calls.  I 
> guess it shouldn't matter as we see the join points in the bytecode.
>
>>Tricky to diagnose without a small failing sample.
> The problem is that my small sample(i.e. my prototype) doesn't fail :(.  I'll 
> continue plugging away at it making small diagnostic changes and see if I can 
> come up with some interesting symptoms.
>
> You help is really appreciated.  Have a great weekend.
>
> Abhi
>
> ________________________________________
> From: aspectj-users-boun...@eclipse.org [aspectj-users-boun...@eclipse.org] 
> on behalf of Andy Clement [andrew.clem...@gmail.com]
> Sent: Friday, June 03, 2011 3:19 PM
> To: aspectj-users@eclipse.org
> Subject: Re: [aspectj-users] Puzzling problem using AspectJ
>
> Hi,
>
> Tricky to diagnose without a small failing sample.
>
> Have you definetly confirmed the advice actually isn't being called?
> Or are you inferring that because the log messages aren't prefixed?  I
> just wonder if a System.out.println() in the before/after advice may
> tell us if the advice is actually running.  It would seem very strange
> for the other before() advice to run and yet the MDC related advices
> not to run.
>
> Also, just to note:
>
>  before():(duringMyOp() && !within(*..*Aspect) && !logCall() )   { ... etc
>
> the 'duringMyOp()' is actually redundant here because all advice in a
> 'percflow(X)' aspect has the implicit additional condition of '&&
> cflow(X)'.  It does no harm though as the pointcut optimizer will be
> discarding the dup.
>
>
>> Another possible clue might be(in the compilation) ...
>>
>> [WARNING] does not match because declaring type is java.lang.Object, if 
>> match desired use target(org.apache.log4j.Logger) 
>> [Xlint:unmatchedSuperTypeInCall]
>
> That would just be at one joinpoint though (if you see it once) - I
> imagine you are expecting many joinpoints to hit.  Perhaps another
> interesting datapoint would be changing it to be a call to something
> else.  However, that wouldn't explain why it works in your prototype
> and not in the real app.
>
> cheers
> Andy
>
>
> On 3 June 2011 10:53, Abhijit Inamdar <ainam...@intrepidls.com> wrote:
>> One other thing ... I mentioned "my prototype" and "my real app" in my 
>> original post and it seems that in your original reply you may have 
>> misunderstood that to mean that I was trying load time weaving.  Actually 
>> neither use load time weaving.  "My prototype" only refers to a toy app I 
>> have to learn AspectJ, while "my real app" is the production app that I am 
>> trying to enhance with AspectJ.  The pointcuts in the two are identical 
>> besides the fact that the paths in myOp() look different 
>> (com.mycompany.myapp.webservices..*(..) vs ajia.messaging..*(..)).  In the 
>> prototype both myOp() and logCall() work exactly as expected while in the 
>> real app only myOp() works while logCall() doesn't.
>
>> ________________________________________
>> From: aspectj-users-boun...@eclipse.org [aspectj-users-boun...@eclipse.org] 
>> on behalf of Abhijit Inamdar [ainam...@intrepidls.com]
>> Sent: Friday, June 03, 2011 10:35 AM
>> To: aspectj-users@eclipse.org
>> Subject: Re: [aspectj-users] Puzzling problem using AspectJ
>>
>> Hi Andy,
>> Just to clarify, my aspect looks like this
>>
>> *************************************************
>> public aspect ChainAspect  percflow(myop()) { ...
>>
>> <snipped>
>>        private static final String MDC_KEY = "caller";
>>
>>        pointcut logCall() : call(* org.apache.log4j.Logger.*(..)) && 
>> !within(*..*Aspect);
>>
>>        before() : logCall() {
>>                MDC.put(MDC_KEY, " " + myId + " " + depth++ + " " + " (" + 
>> thisEnclosingJoinPointStaticPart.getSourceLocation()
>>                                + ") " + 
>> thisEnclosingJoinPointStaticPart.getSignature().toShortString());
>>        }
>>
>>        after() : logCall() {
>>                MDC.remove(MDC_KEY);
>>        }
>>
>> pointcut myop(): call(* com.mycompany.myapp.webservices..*(..))  ;
>>
>> pointcut duringMyOp() : cflow(myop());
>>
>> before():(duringMyOp() && !within(*..*Aspect) && !logCall() )   { ... etc
>>
>> *************************************************
>>
>> The before advice for myop() works fine.  It basically logs entry into 
>> methods(basic tracing) with a unique Id per cflow  and depth of the call.  
>> the logCall() pointcut is intended to wrap existing logging with the unique 
>> Id of the cflow.  The logCall() pointcut is the one that does not seem to 
>> work. i.e. neither the before nor the after advice for it is never entered.
>> In the bytecode below myOp() seems to be myAspect$4$48864b4c, while 
>> logCall() is myAspect$3$58016c43.
>>
>> Another possible clue might be(in the compilation) ...
>>
>> [WARNING] does not match because declaring type is java.lang.Object, if 
>> match desired use target(org.apache.log4j.Logger) 
>> [Xlint:unmatchedSuperTypeInCall]
>>
>> Google shows old discussion about how this is an unhelpful and possibly 
>> misleading message.
>>
>> Thanks for all your help,
>> Abhi
>>
>>
>>
>>
>>
>>
>>
>> ________________________________________
>> From: aspectj-users-boun...@eclipse.org [aspectj-users-boun...@eclipse.org] 
>> on behalf of Andy Clement [andrew.clem...@gmail.com]
>> Sent: Friday, June 03, 2011 9:35 AM
>> To: aspectj-users@eclipse.org
>> Subject: Re: [aspectj-users] Puzzling problem using AspectJ
>>
>> Hi,
>>
>> I see, that explains it, the [with runtime test] is a check to
>> determine if you are in the cflow.
>>
>>> I am a little puzzled by what seem to be two calls to after(119 & 135).
>>
>> You have after advice, so it must intercept both the main exit paths
>> (after returning) and any exception exit routes (after throwing).
>>
>> This one shows the call to the aspect prior to exiting via exception 
>> (athrow):
>>
>>>   119: invokevirtual   #336; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.ajc$after$com_mycompany_myapp_aspects_tracing_myAspect$3$58016c43:()V
>>>   122: aload   13
>>>   124: athrow
>>
>> Are you positive the trace calls you are expecting to be augmented are
>> in the cflow of the myop() pointcut?
>>
>> Also that wherever myop() is matching is accessible to be woven by
>> AspectJ?  It will need to insert code at where myop() matches to tag
>> the subsequent flows as being 'in the cflow of myop()'.  You could try
>> something simple like a separate aspect:
>>
>> aspect Foo {
>>  before(): myop() {}
>> }
>>
>> Check if that aspect weaves ok or if it complains that it cannot
>> access something in order to weave it.
>>
>> cheers
>> Andy
>>
>> On 31 May 2011 12:52, Abhijit Inamdar <ainam...@intrepidls.com> wrote:
>>> Thanks for your response Andy.
>>> This is not a singleton aspect.  It is actually percflow(myop()) { ... 
>>> where myop() is another pointcut.
>>>
>>> Here is a snippet of the woven output around a log statement("Entering 
>>> isValidRequest" in this case):
>>>
>>>   76:  invokestatic    #367; //Method 
>>> org/aspectj/runtime/reflect/Factory.makeJP:(Lorg/aspectj/lang/JoinPoint$StaticPart;Ljava/lang/Object;Ljava/lang/Object;)Lorg/aspectj/lang/JoinPoint;
>>>   79:  getstatic       #379; //Field 
>>> ajc$tjp_4:Lorg/aspectj/lang/JoinPoint$EnclosingStaticPart;
>>>   82:  invokevirtual   #355; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.ajc$before$com_mycompany_myapp_aspects_tracing_myAspect$4$48864b4c:(Lorg/aspectj/lang/JoinPoint;Lorg/aspectj/lang/JoinPoint$StaticPart;)V
>>>   85:  getstatic       #34; //Field logger:Lorg/apache/log4j/Logger;
>>>   88:  ldc     #48; //String Entering isValidRequest
>>>   90:  invokestatic    #331; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.hasAspect:()Z
>>>   93:  ifeq    102
>>>   96:  invokestatic    #325; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.aspectOf:()Lcom/mycompany/myapp/aspects/tracing/myAspect;
>>>   99:  invokevirtual   #328; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.ajc$before$com_mycompany_myapp_aspects_tracing_myAspect$2$58016c43:()V
>>>   102: invokevirtual   #50; //Method 
>>> org/apache/log4j/Logger.warn:(Ljava/lang/Object;)V
>>>   105: goto    125
>>>   108: astore  13
>>>   110: invokestatic    #331; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.hasAspect:()Z
>>>   113: ifeq    122
>>>   116: invokestatic    #325; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.aspectOf:()Lcom/mycompany/myapp/aspects/tracing/myAspect;
>>>   119: invokevirtual   #336; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.ajc$after$com_mycompany_myapp_aspects_tracing_myAspect$3$58016c43:()V
>>>   122: aload   13
>>>   124: athrow
>>>   125: nop
>>>   126: invokestatic    #331; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.hasAspect:()Z
>>>   129: ifeq    138
>>>   132: invokestatic    #325; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.aspectOf:()Lcom/mycompany/myapp/aspects/tracing/myAspect;
>>>   135: invokevirtual   #336; //Method 
>>> com/mycompany/myapp/aspects/tracing/myAspect.ajc$after$com_mycompany_myapp_aspects_tracing_myAspect$3$58016c43:()V
>>>
>>>
>>> I am a little puzzled by what seem to be two calls to after(119 & 135).
>>>
>>>
>>>
>>> ________________________________________
>>> From: aspectj-users-boun...@eclipse.org [aspectj-users-boun...@eclipse.org] 
>>> on behalf of Andy Clement [andrew.clem...@gmail.com]
>>> Sent: Monday, May 30, 2011 8:56 AM
>>> To: aspectj-users@eclipse.org
>>> Subject: Re: [aspectj-users] Puzzling problem using AspectJ
>>>
>>> Hi,
>>>
>>> So you are not loadtime weaving, you are just compile time weaving.
>>> The weaveinfo messages indicate the bytecode is being modified.  I
>>> guess you could check the woven output from the compile and verify the
>>> calls to the logger have been advised.  Using 'javap -private
>>> -verbose' against a class in the woven output you should see wherever
>>> there is a call to getLogger there is a call to the advice?
>>>
>>> Actually, one thing does seem unusual.  Is your pointcut definetly just 
>>> this:
>>>
>>> call(* org.apache.log4j.Logger.*(..)) && !within(*..*Aspect);
>>>
>>> and in a singleton aspect?
>>>
>>> Because that can be fully statically matched, so I don't understand
>>> why your weaveinfo message is suffixed with '[with runtime test]'.  If
>>> the runtime test (whatever it is) is failing it will not be running
>>> your advice.  If you want to post the snippet of bytecode around the
>>> calls to getLogger we can check what the runtime test is.
>>>
>>> Andy
>>>
>>>
>>> _______________________________________________
>>> aspectj-users mailing list
>>> aspectj-users@eclipse.org
>>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@eclipse.org
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@eclipse.org
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
aspectj-users@eclipse.org
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to