Приложение My Java EE 6 состоит из модуля войны и ejb, упакованного в файл уха. Я использую CDI для DI (т. Е. У меня есть файл beans.xml в обоих модулях). Я хочу использовать перехватчик регистрации, который также определен в модуле ejb в военном модуле. Я включил перехватчик в beans.xml EJB-в:CDI: Использование перехватчиков в разных архивах модулей/бобов
<beans>
<interceptors>
<class>com.test.interceptor.LoggingInterceptor</class>
</interceptors>
</beans>
Это работает только для классов, которые снабженными перехватчика в модуле в EJB. Классы в военном модуле не перехватываются (хотя они тоже аннотируются с перехватчиком). Я думал, что решение будет состоять в том, чтобы включить перехватчик в перехватчике войны (как и выше). Но приложение не может быть развернуто со следующим сообщением:
СИЛЬНОЕ: Исключение при загрузке приложения: WELD-001417 Enabled перехватчика класса класса com.test.interceptor.LoggingInterceptor не является ни аннотированным @Interceptor ни регистрироваться с помощью портативного расширения
Мои LoggingInterceptor выглядит следующим образом:
@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)});
}
}
}
И перехватчик связывания:
@InterceptorBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface Log {}
Как использовать перехватчик для обоих модулей?
Вы нашли решение этой проблемы? Было бы интересно увидеть это. – mik
@milk нет, у меня его нет. Я объединил все модули в один боевой модуль, что возможно, так как Java EE 6. – Theo
wow, спасибо, что выложили это так ясно. У меня была одна и та же проблема, и все ее объединение в один модуль решило. Иногда J2EE просто пытается усложнить ya ... – JoshC13