Синтетический компонент не обнаружен в архиве компонентов из-за добавления в архив WeldDeployment.additionalClasses

Я играю с Weld и CDI уже несколько месяцев и недавно столкнулся со следующей проблемой.

Проблемная ситуация

  • Использование Weld SE 3.1.5.Final
  • Создано расширение CDI, которое добавляет компонент (SomeBean) с помощью @Observes AfterBeanDiscovery abd.
  • SomeBean — это пользовательский компонент, который имеет ArrayList.class в качестве класса и возвращает 1 квалификатор (@CustomQualifier).
  • Затем другой компонент (DifferentBean) объявляет @Inject @CustomQualifier ArrayList<String> variableName;
  • Эта точка впрыска не работает из-за Unsatisfied dependencies.

Расследование

Из отчета о проверке компонентов я смог определить, что:

  • Weld creates 2 Bean Archives
    1. With:
      • Identifier: MyProject\build\classes\java\main
      • Тип: Все
      • Beans.xml: версия не определена.
    2. With:
      • Identifier: org.jboss.weld.environment.deployment.WeldDeployment.additionalClasses
      • Тип: Аннотированный
      • Beans.xml: Нет beans.xml
  • Расширение CDI — это bean-компонент, расположенный в архиве 1.
  • The result of the DifferentBean instantiation is located in Archive 1.
    • This bean has:
      • Kind: MANAGED
      • Класс: my.package.DifferentBean
      • Квалификаторы: @Default
      • Объем: @Dependent
  • The result of the SomeBean instantiation is located in Archive 2.
    • This bean has:
      • Kind: SYNTHETIC
      • Класс: j.u.ArrayList
      • Квалификаторы: @CustomQualifier
      • Объем: @ApplicationScoped

Причина

Исходя из этого, я предполагаю, что по какой-то причине SomeBean, которое добавляет мое пользовательское расширение, добавляется в архив 2 и, следовательно, недоступно из архива 1, где находится DifferentBean.

Если эта оценка верна, как мне решить эту проблему?


person Byebye    schedule 22.10.2020    source источник


Ответы (1)


Я отследил проблему. Я ожидал, что Weld разрешит общий для ArrayList.class класс ArrayList. Этого не произошло, после удаления дженерика моя проблема решилась.

person Byebye    schedule 22.10.2020