CDI: Utilisation d'intercepteurs dans différents modules / archives de bean

Mon application Java EE 6 est constitué d'une guerre et d'un module ejb emballé dans un fichier ear. Je suis en CDI pour l'ai (c'est à dire que j'ai un beans.xml fichier dans les deux modules). Je veux utiliser un enregistrement à l'intercepteur qui est défini dans le module ejb dans la guerre du module, ainsi. J'ai activé l'intercepteur dans les ejb beans.xml:

<beans>
    <interceptors>
        <class>com.test.interceptor.LoggingInterceptor</class>
    </interceptors>
</beans>

Cela fonctionne uniquement pour les classes annotées avec l'intercepteur dans le module ejb. Les Classes dans la guerre du module ne sont pas interceptés (même s'ils sont annotés avec l'intercepteur trop). J'ai pensé que la solution serait de permettre à l'intercepteur dans la guerre de l'intercepteur, ainsi (comme ci-dessus). Mais l'application ne peut pas être déployé avec le message suivant:

SÉVÈRE: Exception lors du chargement de l'application : SOUDURE-001417 Activé intercepteur de classe de la classe com.test.l'intercepteur.LoggingInterceptor est ni annoté @Interceptor, ni enregistré par le biais d'un portable extension

Mon LoggingInterceptor ressemble à ceci:

@Log
@Interceptor
public class LoggingInterceptor {
    private static final Logger logger =  Logger.getLogger(LoggingInterceptor.class.getName());

    static {
        logger.setLevel(Level.ALL);
    }

    @AroundInvoke
    public Object logMethod(InvocationContext ctx) throws Exception {
        logger.log(Level.FINE, "ENTRY {0} {1}",
                new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
        long startTime = System.nanoTime();
        try {
            return ctx.proceed();
        } finally {
            long diffTime = System.nanoTime() - startTime;
            logger.log(Level.FINE, "RETURN {0} {1}",
                new Object[]{ ctx.getTarget().getClass().getName(), ctx.getMethod().getName() });
            logger.log(Level.FINE, "{0} took {1} ms", new Object[]{ ctx.getMethod(),
                    TimeUnit.MILLISECONDS.convert(diffTime, TimeUnit.NANOSECONDS)});
        }
    }

}

Et de l'intercepteur de liaison:

@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Log {}

Comment puis-je utiliser de l'intercepteur pour les deux modules?

source d'informationauteur Theo