Один из JAR-файлов, развертываемых в EAR, использует Spring и предоставляет точку входа. к ландшафту CDI, в противном случае исключительно EE/EJB:
Код: Выделить всё
@org.springframework.context.annotation.Configuration
public class MyFooComponentFactory {
@Bean
public MyFooComponent() {
return new JndiTemplate()
.lookup(name(MyFooComponent.class), MyFooComponent.class);
}
}
Код: Выделить всё
@Resource
private SessionContext ctx;
@EJB
private OtherComponent other;
Это потому, что в Wildfly 23 Spring создает org.springframework. .beans.factory.annotation.InjectionMetadata с пустыми коллекциями для полей InjectElements и CheckElements.
Но для Wildfly 26 эти поля не являются -пусто, что означает, что Spring пытается их внедрить. Но они не определены в контексте приложения Spring, поскольку они уже обрабатываются EJB.
ОБНОВЛЕНИЕ
Теперь я обнаружил, что Причина, по которой InjectionMetadata создается по-разному в версиях 23 и 26, заключается в том, что org.springframework.context.annotation.CommonAnnotationBeanPostProcessor#buildResourceMetadata перемещается вверх по иерархии классов для MyFooComponent (на самом деле это MyFooComponent$$$ view530, который, как я полагаю, является прокси-сервером JBoss?)
Для Wildfly 23 clazz.getSuperclass() возвращает java.lang.Object, но для Wildfly 26 он возвращает класс MyFooComponentImpl.
Поля -Impl отвечают за непустые метаданные.Итак, может кто-нибудь сказать мне, почему это происходит? Загрузчик классов меняется между Wildfly 23 и 26?
Подробнее здесь: https://stackoverflow.com/questions/787 ... components