[jboss-user] [JBoss AOP] - AOP 2GA JBoss 5GA set pointcut not working

attel75 do-not-reply at jboss.com
Mon Jan 12 12:25:50 EST 2009


I am trying to set a pointcut to a field when it gets written, no matter what I do, the set pointcut never seems to work. I am using AOP 2.0GA and JBoss 5.0GA. Here is what I have:

aop.xml:

  | 
  | 
  | <?xml version="1.0" encoding="UTF-8"?>
  | 
  |    
  | <aop xmlns="urn:jboss:aop-beans:1.0">
  | 	<aspect class="com.acme.aop.FieldAspect"/> 
  | 	<interceptor class="com.acme.aop.FieldSetterInterceptor"/>
  |    
  |    
  |     <bind pointcut="execution(void $instanceof{com.acme.IMarkMe}->*(..))">  
  |        <around aspect="com.acme.aop.FieldAspect" name="log"/>  
  | 	</bind> 
  |    
  |        <bind pointcut="execution($instanceof{com.acme.IMarkMe}->new())">  
  |          <around aspect="com.acme.aop.FieldAspect" name="log"/>     
  |        </bind>  
  | 
  |     <bind pointcut="set(private java.lang.String com.acme.aop.POJO->var2)">  
  |        <around aspect="com.acme.aop.FieldAspect" name="log"/>  
  |     </bind>
  | 
  |    <bind pointcut="set(private java.lang.String com.acme.aop.POJO->var2)">
  |        <interceptor-ref name="com.acme.aop.FieldSetterInterceptor"/>
  |    </bind>
  | 
  |    
  | </aop>
  | 
  | 


FieldSetterInterceptor:

  | 
  | package com.acme.aop;
  | 
  | import org.apache.log4j.Logger;
  | import org.jboss.aop.advice.Interceptor;
  | import org.jboss.aop.joinpoint.FieldWriteInvocation;
  | import org.jboss.aop.joinpoint.Invocation;
  | 
  | 
  | public class FieldSetterInterceptor implements Interceptor {
  | 
  | 	private static final Logger LOG = Logger.getLogger(FieldSetterInterceptor.class);
  | 	
  | 
  | 	public FieldSetterInterceptor() {
  | 		// TODO Auto-generated constructor stub
  | 	}
  | 
  | 
  | 	@Override
  | 	public String getName() {
  | 		// TODO Auto-generated method stub
  | 		return "FieldSetterInterceptor";
  | 	}
  | 
  | 
  | 	@Override
  | 	   public Object invoke(Invocation invocation) throws Throwable
  | 	   {
  | 	      if (!(invocation instanceof FieldWriteInvocation)) return invocation.invokeNext();
  | 	      try
  | 	      {
  | 	         FieldWriteInvocation mi = (FieldWriteInvocation)invocation;
  | 	         LOG.info("<<< Entering SetInterceptor for: " + mi.getField().getName());
  | 	         return invocation.invokeNext();
  | 	      }
  | 	      finally
  | 	      {
  | 	    	  LOG.info(">>> Leaving SetInterceptor");
  | 	      }
  | 	   }
  | 
  | }
  | 
  | 


FieldAspect:

  | 
  | package com.acme.aop;
  | 
  | import java.lang.reflect.Field;
  | 
  | import org.apache.log4j.Logger;
  | import org.jboss.aop.joinpoint.ConstructorInvocation;
  | import org.jboss.aop.joinpoint.FieldReadInvocation;
  | import org.jboss.aop.joinpoint.FieldWriteInvocation;
  | import org.jboss.aop.joinpoint.Invocation;
  | import org.jboss.aop.joinpoint.MethodInvocation;
  | 
  | public class FieldAspect {
  | 	
  | 	private static final Logger LOG = Logger.getLogger(FieldAspect.class);
  | 	
  | 	public FieldAspect(){
  | 		LOG.debug("FieldAspect being instantiated");
  | 	}
  | 	public Object log(ConstructorInvocation invocation) throws Throwable  
  | 	   {  
  | 	      try  
  | 	      {  
  | 	         LOG.info("C: Creating using constructor " + invocation.getConstructor());  
  | 	         LOG.info("C:  " + invocation.getArguments());  
  | 	         return invocation.invokeNext();  
  | 	      }  
  | 	      finally  
  | 	      {  
  | 	         LOG.info("C: Done");  
  | 	      }  
  | 	   }  
  | 	     
  | 	   public Object log(MethodInvocation invocation) throws Throwable  
  | 	   {  
  | 	      try  
  | 	      {  
  | 	         LOG.info("M: Calling method " + invocation.getMethod().getName());  
  | 	         LOG.info("M: " + invocation.getArguments());  
  | 	         return invocation.invokeNext();  
  | 	      }  
  | 	      finally  
  | 	      {  
  | 	         LOG.info("M: Done");  
  | 	      }  
  | 	   }  
  | 	  
  | 	   public Object log(FieldWriteInvocation invocation) throws Throwable  
  | 	   {  
  | 	      LOG.info("F: setting field " + invocation.getField().getName());  
  | 	      LOG.info("F: New value will be " + invocation.getValue());  
  | 	      try  
  | 	      {  
  | 	         return invocation.invokeNext();  
  | 	      }  
  | 	      finally  
  | 	      {   
  | 	         LOG.info("F: Done");  
  | 	      }  
  | 	
  | 	   }
  | }
  | 
  | 

POJO:


  | 
  | package com.acme.aop;
  | public class POJO implements com.acme.IMarkMe
  | {
  |    private String var1 = "hello";
  |    private String var2;
  | 
  |    public static int var3;
  | 
  |    public String getVar1() { return var1; }
  |    public String getVar2() { return var2; }
  |    public void setVar2(String str) { var2 = str; }
  | 
  | }
  | 
  | 

I am deploying aop.xml to $JBOSS_HOME/server/all/deploy. I can see the poincuts and the aspect and interceptor classes registered in the jmx console, however  when I run the code all the pointcuts work except for both the set pointcuts defined in aop.xml.
Am I doing something wrong?

Thanks for all you help.

Andres.

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

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



More information about the jboss-user mailing list