2015-04-22 4 views
4

Контекст:CDI перехватчик Scope аннотацию

Wildfly 8.1.0 с CDI 1.2

В соответствии с CDI спецификации CDI1.2, вам не нужно объявить КДИ в beans.xml если он помечается @Priority(somepriorityvalue)

Однако, следующие перехватчики cdi никогда не вызываются, если я не добавлю аннотацию @Dependent

@RequiresLoggedInAccount 
@Interceptor 
@Priority(Interceptor.Priority.APPLICATION) 
public class MyInterceptor { 

    @AroundInvoke 
    public Object intercept(final InvocationContext ic) throws Exception { 
    //intercept something and then... 
    return ic.proceed(); 
    } 
} 

и связывание перехватчика:

@Inherited 
@Documented 
@InterceptorBinding 
@Target({METHOD, TYPE}) 
@Retention(RUNTIME) 
public @interface RequiresLoggedInAccount { 
} 

Обратите внимание, что перехватчик связывания и перехватчик определен в другом модуле баночки от того, где они используются (поэтому цель для @Priority).

Это что-то, что я упустил? Почему я должен добавить область CDI@Dependent для перехватчика?

Это потому, что я конкретно указано в beans.xmlbean-discovery-mode="annotated"

+0

WildFly 8.1 поставляется с Weld 2.1. Вы обновили вручную до Weld 2.2? –

+0

@JohnAment О, проклятый. Он поставляется с CDI 1.1, объясняет ли это поведение? – maress

+0

будет ли это объяснять, почему аннотирование одного перехватчика с двумя разными InterceptorBindings заставляет перехватчик не загружаться? – maress

ответ

0

WildFly 8,1 судов с Weld 2.1.x (я забыл х, но 2.1 CDI 1.1 совместимый). Вы можете применить исправления для обновления до Weld 2.2, совместимого с CDI 1.2, и эта проблема должна исчезнуть для вас.

Поведение, которое вы видите, согласуется с реализациями CDI 1.1.

Смежные вопросы