CDI interceptor binding doesn't work
dstepien Jul 24, 2014 1:22 AMHi,
I'm New to the forum so first of all I want to say hello. I'm learning JEE from few months and like every newbie I encounter issues. In most cases I find the solutions at google, books, forums, stackoverflow etc., but sometimes it doesn't work. So I'm here and I believe that I find few answers from the more experienced developers.
Recently I created a little project with CDI examples. Everything works fine except features that are configured with deployment descriptor. My simple app works without interceptor bindings or alternatives defined in beans.xml. So my question is do I need to configure something else in the JBoss?
Below I present my interceptor binding files. You can find all project here: https://github.com/dstepien/jee7-examples
beans.xml
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd" version="1.1" bean-discovery-mode="all"> <interceptors> <class>pl.dawidstepien.jee.examples.ProfileInterceptor</class> </interceptors> </beans>
ProfileInterceptor.java
package pl.dawidstepien.jee.examples; import java.util.logging.Logger; import javax.annotation.PostConstruct; import javax.inject.Inject; import javax.interceptor.AroundInvoke; import javax.interceptor.Interceptor; import javax.interceptor.InvocationContext; @Interceptor @Profiling public class ProfileInterceptor { @Inject Logger logger; @PostConstruct public void logMethod(InvocationContext invocationContext) throws Exception { logger.info("\n\nWelcome, this is " + invocationContext.getTarget().getClass().getSimpleName() + "\n"); invocationContext.proceed(); } @AroundInvoke public Object profile(InvocationContext invocationContext) throws Exception { long initTime = System.currentTimeMillis(); logger.info("ENTER: " + invocationContext.getMethod().getName()); try { return invocationContext.proceed(); } finally { long diffTime = System.currentTimeMillis() - initTime; logger.info(invocationContext.getMethod().getName() + " took " + diffTime + " millis"); } } }
DatePrinterBean.java
package pl.dawidstepien.jee.examples; import java.util.logging.Logger; import javax.ejb.Remote; import javax.ejb.Stateless; import javax.inject.Inject; @Stateless @Remote(DatePrinter.class) @Profiling public class DatePrinterBean implements DatePrinter { @Inject Logger logger; @Inject @SimpleDate DateGenerator dateGenerator; @Override public void printDate() { logger.info("Today's date: " + dateGenerator.generateDate()); } }
Profiling.java
package pl.dawidstepien.jee.examples; import static java.lang.annotation.ElementType.METHOD; import static java.lang.annotation.ElementType.TYPE; import static java.lang.annotation.RetentionPolicy.RUNTIME; import java.lang.annotation.Retention; import java.lang.annotation.Target; import javax.interceptor.InterceptorBinding; @InterceptorBinding @Retention(RUNTIME) @Target({TYPE, METHOD}) public @interface Profiling { }
Thanks,
Dawid