Я имею файл уха с (среди других) следующее содержание работает на JBoss EAP 7.0.3: common.jar протокола-v4.jarКДИ выбора экземпляра с помощью аннотации не найден после перехода на JBoss EAP 7
В common.jar у меня есть следующий код (частичное):
MessageServiceImpl.java:
@Any
@Inject
private Instance<MessageMapper<M>> mappers; // M -> SimpleMessage
// ...
MessageMapper<M> mapper = findInstance(mappers, new MapperType.Literal(messageType, parameters.getProtocolVersion()), "message mapper");
// inside findInstance:
Instance<T> candidate = instance.select(annotationLiteral);
Первый результат: candidate
выше, имеет isUnsatisfied() в действительности.
Теперь реализация находится внутри протокола-v4.jar:
@MapperType(messageType = MessageType.HANDSHAKE, version = Protocol.VERSION)
public class HandshakeMessageMapper extends AbstractPositiveMessageMapper {
AbstractPositiveMessageMapper
в своей цепи где-то реализует MessageMapper<SimpleMessage>
Я использовал, чтобы использовать это в JBoss EAP 6.4.10, но теперь с JBoss EAP 7.0.3 неожиданно неудовлетворен. Что мне не хватает? Это была ошибка, с которой раньше работала? Заранее спасибо.
EDIT
Я начал использовать BeanManager исследовать немного больше, что происходит. Это прямо перед instance.select
:
Set<Bean<?>> beans = beanManager.getBeans(Object.class, new AnnotationLiteral<Any>() {});
for(Bean<?> bean : beans) {
if(bean.getBeanClass().getName().contains("v104.mapper.Handshake")) {
for(Annotation annotation : bean.getQualifiers()) {
if(annotation.annotationType() == MapperType.class) {
MapperType mapper = (MapperType) annotation;
logger.info("Type: {}, Version: {}", mapper.messageType(), mapper.version());
} else {
logger.info("Qualifier: {}", annotation.annotationType());
}
}
logger.info("Bean: " + bean);
}
}
Это работает и показывает мой HandshakeMessageMapper как боб с правильными классификаторами (@Any и @MapperType (значение & протокола)).
Если, однако, я изменяю getBeans
на: beanManager.getBeans(MessageMapper.class, new AnnotationLiteral<Any>() {});
, никакой фасоли не могут быть найдены. Так по какой-то причине BeanManager
не считает мой HandshakeMessageMapper
быть боб, который может предложить интерфейсной MessageMapper
Спасибо за ваш ответ. Я также читал об этом раньше и использовал аннотацию @Dependent в одном из моих предыдущих тестов, что не помогло. Я также попытался изменить режим обнаружения бина для протокола-v4 для всех, но он все еще не может найти компонент, используя 'select' в экземпляре. –