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