Почему внедрение CDI не работает в одних модулях, но не работает в других?

В моем проекте Java EE есть несколько модулей «Java EE» и веб-модуль. Один из модулей Java EE предоставляет класс CDI, который будет использоваться другими модулями:

@ApplicationScoped
public class XFactory {

  @Produces @Actual
  public X create() {
     return new X();
  }
}

Их вводят в

   @SessionScoped
   public class Target implements Serializable {
       X x;

      @Inject
      public void setX(@Actual X x){
        this.x = x;
      }
   }

Однако это работает только в одном из модулей Java EE и в веб-модуле. Во всех оставшихся модулях Java EE внедрение постоянно терпит неудачу, и я не понимаю, почему: все, что я получаю, это WELD-1408, неудовлетворенная зависимость.

Все модули имеют beans.xml в нужных местах, все они работают, пока я не переключаюсь на инъекцию. Большинство целевых bean-компонентов уже используются как внедренные bean-компоненты в JSF. Что особенного в работающем модуле Java EE, так это то, что компонент вставляется в сервлет в веб-модуле, а не в JSF.

Проект работает с Java EE 6, EJB 3.1 в GlassFish 3.1. Зависимости управляются Maven 3. X сам по себе Serializable, чтобы удовлетворить пассивные области.

Вы сталкивались с этим раньше? Что я мог сделать не так?

Обновление: выше добавлено замечание по управлению зависимостями.

Обновление: исправлено положение @Actual в Target.

Обновление: после дня экспериментов обновлено описание с более подробной информацией.


person Urs Reupke    schedule 28.07.2011    source источник
comment
Ответов пока нет. Я собираюсь переписать модуль шаг за шагом и посмотреть, в какой момент инъекция не работает. Тем не менее, мы все еще ценим ваш вклад.   -  person Urs Reupke    schedule 29.07.2011
comment
Кажется, здесь гораздо больше ошибок, чем я думал вначале. Мое заявление о том, что вне этого единственного проекта все работает нормально, могло быть неверным: внедрение не работает даже в простейших модулях. Я начинаю задаваться вопросом, почему это работает в одном из них.   -  person Urs Reupke    schedule 29.07.2011


Ответы (2)


Похоже, это проблема в Glassfish 3.1, в одной из включенных в него библиотек или, возможно, в JDK 6.

Я только что обновил свою систему до Glassfish 3.1.1 и JDK 7, и проблема больше не возникает.

person Urs Reupke    schedule 29.07.2011
comment
Прежде чем принять ответ, я еще немного изучу замену X на рабочий код. - person Urs Reupke; 29.07.2011

В моем недавнем опыте работы с Weblogic я обнаружил, что пространства имен, содержащие символы подчеркивания, не позволяют модулям EJB вводить какие-либо bean-компоненты.

Предлагаю вам попробовать и Glassfish.

С Уважением!

person Antonio Petricca    schedule 08.10.2020
comment
Вы понимаете, что на этот вопрос был дан ответ 9 лет назад? - person Smutje; 08.10.2020
comment
Вы понимаете, что мой ответ может быть полезен кому-то еще в будущем? - person Antonio Petricca; 08.10.2020