3 Replies Latest reply on Aug 10, 2007 9:35 AM by jc7442

    EJB3 Interceptor never called - how to debug?

    tynor

      I am trying to add an ejb3 interceptor, but can't even get a simple one to run. From my reading of the docs, I should be able to just add the Interceptor annotations and be off and running, but my interceptor functions never run. Here's the interceptor class:

      public class MyInterceptor {
      
       @PostConstruct
       public void postConstruct(InvocationContext invocation) {
       try {
       Object target = invocation.getTarget();
      
       System.err.println("In PostConstruct MyInterceptor for " + target);
       invocation.proceed();
       } catch (Exception ex) {
       log.error("Error in PostConstruct MyInterceptor", ex);
       }
       }
      
       @AroundInvoke
       public void aroundInvoke(InvocationContext invocation) {
       try {
       Object target = invocation.getTarget();
      
       System.err.println("In AroundInvoke MyInterceptor for " + target);
       invocation.proceed();
       } catch (Exception ex) {
       log.error("Error in AroundInvoke MyInterceptor", ex);
       }
       }
      }


      I've tried annotating both the class and a method thusly:

      @Interceptors(MyInterceptor.class)
      @Entity
      @Table(name = "client")
      public class Client implements java.io.Serializable {
      ...
       @Interceptors(MyInterceptor.class)
       public void setName(String name) {
       System.err.println("In setName");
       this.name = name;
       }


      and specifically call the setName() method, but neither of my interceptor functions ever fire. No errors in the log. Can anyone spot what I've done wrong? Better yet, how can I debug this?

      Seam 1.2.1-GA
      JBoss AS 4.2.1

      Thanks!


        • 1. Re: EJB3 Interceptor never called - how to debug?
          jc7442

          For EJB entities:

          Use @EntityListener annotation with @PrePersist, @PostPersist, @PreRemove
          @PostRemove, @PreUpdate, @PostUpdate, @PostLoad


          @Interceptors works fine for session bean and MDB. I'm not sure it is supposed to works for entity

          • 2. Re: EJB3 Interceptor never called - how to debug?
            tynor

            Thanks - that's exactly right. It's unfortunate that there this disparity between the inteceptor/listener interfaces -- I'd planned to use the
            the interceptor InvocationContext's contextData map to store some object-level state. I'll have to rethink since the EntityListener doesn't pass a context - only the entity Object.

            For EJB entities:

            Use @EntityListener annotation with @PrePersist, @PostPersist, @PreRemove
            @PostRemove, @PreUpdate, @PostUpdate, @PostLoad


            @Interceptors works fine for session bean and MDB. I'm not sure it is supposed to works for entity


            • 3. Re: EJB3 Interceptor never called - how to debug?
              jc7442

              Hibernate interceptor are a little easier to use. But that's not EJB3, that's hibernate specific