[jboss-user] [JBoss AOP] - Re: Inteception on field inherited through generic superclas

dunks80 do-not-reply at jboss.com
Thu Mar 8 12:31:19 EST 2007


I've been running my application in jboss-4.2.0.CR1 and i've been seeing some really odd behavior with the aop system. Sometimes my pointcuts won't get picked up..i change nothing...i touch nothing..i just restart the server and bam! it works the next time. 

Anyway trying to test this stuff to figure out what the problem is I noticed something in my test case.  From my previous post I was getting this output which is wrong...


  | ...
  | cInstance.toString()=null
  | cInstance.getMyField()=Invoked testcase.MyMethodInterceptor on testcase.C method getMyField
  | cInstance.myField=Invoked testcase.MyFieldInterceptor on testcase.C field myField
  | cInstance.cInstance.getClass().getMethod("getMyField",new Class[0]).getName()=getMyField
  | dInstance.toString()=Invoked testcase.MyFieldInterceptor on testcase.D field myField
  | dInstance.getMyField()=Invoked testcase.MyMethodInterceptor on testcase.D method getMyField
  | dInstance.myField=Invoked testcase.MyFieldInterceptor on testcase.D field myField
  | dInstance.cInstance.getClass().getMethod("getMyField",new Class[0]).getName()=getMyField
  | ...
  | 

As i said cInstance.toString() should not result in null because my interceptor should return a value but it doens't. Ok so I added another protected annotated field to the C class called myOtherField. Now checkout the output of cInstance.toString()...


  | cInstance.toString()=Invoked testcase.MyFieldInterceptor on testcase.C field myField
  | cInstance.getMyField()=Invoked testcase.MyMethodInterceptor on testcase.C method getMyField
  | cInstance.myField=Invoked testcase.MyFieldInterceptor on testcase.C field myField
  | cInstance.myOtherField=Invoked testcase.MyFieldInterceptor on testcase.C field myOtherField
  | cInstance.cInstance.getClass().getMethod("getMyField",new Class[0]).getName()=getMyField
  | dInstance.toString()=Invoked testcase.MyFieldInterceptor on testcase.D field myField
  | dInstance.getMyField()=Invoked testcase.MyMethodInterceptor on testcase.D method getMyField
  | dInstance.myField=Invoked testcase.MyFieldInterceptor on testcase.D field myField
  | dInstance.myOtherField=Invoked testcase.MyFieldInterceptor on testcase.D field myOtherField
  | dInstance.cInstance.getClass().getMethod("getMyField",new Class[0]).getName()=getMyField
  | 

Suddenly the interceptor is run on the inherited myField attribute for C. It's almost like the aop system doens't see any direct annotations in the C class so it doesn't bother applying any aspects but if there is an annotation  in C then it will also take the time to look for any inherited fields that may be annotated.



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4026336#4026336

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4026336



More information about the jboss-user mailing list