В моем проекте 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
.
Обновление: после дня экспериментов обновлено описание с более подробной информацией.