4 Replies Latest reply on Jan 11, 2012 9:03 AM by jharting

    Abstract method and Interceptor

    v.masterov

      There is an AbstractSimpleBean abstract class with the doAction() method and the handle() abstract method. SimpleBean is a child of AbstractSimpleBean, SimpleBean implements the handle() method. Also there are an Interceptor class and the @Simple qualifier with @InterceptorBinding.
      If the handle() method is annotated as @Simple, the interceptor class does not work.


      @InterceptorBinding
      @Target({TYPE, METHOD})
      @Retention(RUNTIME)
      @Documented
      public @interface Simple {
           
      
      }
      


      @Interceptor @Simple
      public class SimpleInterceptor implements Serializable {
           
           private static final long serialVersionUID = 6824959430435594183L;
           
           @Inject
           private Logger log;
           
           @AroundInvoke
           public Object around(InvocationContext ctx) throws Exception {
                log.info("... around() ...");
                return ctx.proceed();
           }
      
      }
      


      public abstract class AbstractSimpleBean {
           
           @Inject
           protected Logger log;
                          
           public abstract void handle();
                     
           public void doAction() {
                log.info("... doAction() ...");
                handle();
           }     
      
      }
      


      public class SimpleBean extends AbstractSimpleBean {
      
           private static final long serialVersionUID = 7944713842447575257L;
                
           @Simple
           public void handle() {
                log.info("... handle() ...");
           }
           
      }
      


      When the doAction() method is annotated as @Simple in the AbstractSimpleBean parent class, all works fine. Is this a limitation for abstract methods in CDI and Weld or is it a bug?