Является ли @Intercepted Bean<?> Допустимой парой типа и спецификатора для внедрения?

Я использую механизм транзакций Narayana через стандарт CDI 2.0 (SE). Все отлично работает со сваркой, но я получаю странное исключение из OpenWebBeans 2.0.8, как описано ниже.

Механизм транзакций Narayana имеет точку впрыска, объявленную примерно так же в базовом классе своих перехватчиков:

@Inject
@Intercepted
private Bean<?> interceptedBean;

По мере появления моего приложения CDI 2.0 SE на базе OpenWebBeans 2.0.8, я вижу следующее (я добавил разрывы строк для удобочитаемости):

org.apache.webbeans.exception.WebBeansDeploymentException: 
javax.enterprise.inject.UnsatisfiedResolutionException:
Api type [javax.enterprise.inject.spi.Bean] is not found with the qualifiers 
Qualifiers: [@javax.enterprise.inject.Intercepted(),@javax.inject.Named(value="interceptedBean")]
for injection into Field Injection Point, field name :  interceptedBean,
Bean Owner : [TransactionalInterceptorNotSupported, WebBeansType:INTERCEPTOR, Name:null, API Types:[java.lang.Object,com.arjuna.ats.jta.cdi.transactional.TransactionalInterceptorBase, [...and so on...]

Это кажется мне очень подозрительным. Использование Intercepted именно так явно указано в документации CDI 2.0, поэтому я ожидаю, что это будет прекрасно работать в OpenWebBeans.

Сообщение об ошибке, однако, указывает на то, что где-то по пути OpenWebBeans решил неявно добавить @Named квалификатор к этому полю (которого, как вы видите, он не имеет). Очевидно, что дополнительный квалификатор может привести к сбою, поскольку спецификация CDI 2.0 не требует (я не думаю), что перехваченному бину должно быть присвоено имя.

Мой вопрос: допустима ли эта ошибка валидации в соответствии со спецификацией CDI 2.0? Я спрашиваю, потому что соответствие спецификации очень важно для меня; Я уже знаю, что могу использовать Weld в этом сценарии, но я хотел бы понять, является ли это ошибкой OpenWebBeans или каким-то образом (не знаю, как) неясной областью спецификации CDI.

0 ответов

Другие вопросы по тегам