Tengo una clase de interceptor CDI anotada con javax.interceptor.InterceptorBinding @LogBinding, definida de la siguiente manera:
@InterceptorBinding @Retention(RUNTIME) @Target({METHOD, TYPE}) public @interface LogBinding {}Luego uso la anotación en el bean EJB:
@Alternative @Stateless @LogBinding public class FooService { @Asynchronous public fooMethod() { } }Invoco fooMethod desde otro bean. El problema es que el interceptor no se llama. Todo funciona cuando cambio la anotación @LogBinding a @Interceptors({LogInterceptor.class}) en FooService. No sé si puede tener impacto, pero FooService se comercializa como @Alternative, porque se inyecta en otros lugares como EJB bean, a continuación se muestra el campo productor:
@Default @Produces @EJB private FooService fooService; @Interceptor @LogBinding @Priority(Interceptor.Priority.APPLICATION) public class LogInterceptor { @AroundInvoke public Object invoke(final InvocationContext invocationContext) throws Exception { System.out.println("it works"); } }¿Por qué no funciona?
También debe anotar su clase de interceptor con ese enlace para que sepa qué clase usar como interceptor.
@LogBinding @Interceptor public class LogInterceptor {...}