2013-07-23 2 views
0

У меня есть проект с некоторыми веб-артефактами (.war), и у меня возникают проблемы с Inject simple POJO. Следующий код представляет собой простейший рабочий случай:CDI Injection поднимает «WELD-001408» для проекта с несколькими модулями

.war (WAR1)

public class MyManagedBean { 
    @Inject 
    private MyPojo myPojo; 
} 

POJO в .war (WAR1)

public class MyPojo { 
    public void doSomething() {} 
} 

Проблема возникает, когда я добавить один больше веб-артефакта (.war -> WAR2) с тем же пакетом POJO (MyPojo). Семантически я хочу, чтобы POJO в каждом сетевом артефакте, а не в внешнем архиве (.jar). В основном новейший добавленный компонент (WAR2) идентичен WAR1, т. Е. Он имитирует, как если бы он существовал многомодульным проектом. Во время выполнения контейнер вызывает следующее сообщение об ошибке при попытке использовать модуль:

Caused by: org.jboss.weld.exceptions.DeploymentException: WELD-001408 Unsatisfied dependencies for type [MyPojo] with qualifiers [@Default] at injection point [[field] @Inject private com.projectx.MyManagedBean.myPojo] 
at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:270) [:6.1.0.Final] 
at org.jboss.weld.bootstrap.Validator.validateInjectionTarget(Validator.java:299) [:6.1.0.Final] 
at org.jboss.weld.manager.InjectionTargetValidator.addInjectionTarget(InjectionTargetValidator.java:34) [:6.1.0.Final] 
at org.jboss.weld.manager.BeanManagerImpl.createInjectionTarget(BeanManagerImpl.java:1055) [:6.1.0.Final] 
at org.jboss.weld.manager.BeanManagerImpl.fireProcessInjectionTarget(BeanManagerImpl.java:1249) [:6.1.0.Final] 
at org.jboss.weld.integration.injection.Jsr299SimpleNonContextualInjector.inject(Jsr299SimpleNonContextualInjector.java:66) [:6.1.0.Final] 
at org.jboss.injection.manager.core.DefaultInjectionContext.proceed(DefaultInjectionContext.java:58) [:1.0.0-alpha-7] 
at org.jboss.injection.manager.core.DefaultInjectionManager.inject(DefaultInjectionManager.java:58) [:1.0.0-alpha-7] 
at org.jboss.injection.manager.core.DefaultInjectionManager.inject(DefaultInjectionManager.java:64) [:1.0.0-alpha-7] 
at org.jboss.web.tomcat.service.TomcatInjectionContainer.processInjectors(TomcatInjectionContainer.java:410) [:6.1.0.Final] 
at org.jboss.web.jsf.integration.injection.JBossDelegatingInjectionProvider.inject(JBossDelegatingInjectionProvider.java:77) [:1.0.3] 
... 66 more 

Некоторые сценарии детали:

  1. Если удалить war2, инъекции сделаны WAR1 начинает работать.
  2. Оба артефакта (WAR1 и WAR2) имеют одинаковые POJO и beans.xml (/ WEB-INF).

Есть ли какой-либо момент, я не хватает? Все, что мне нужно, это возможность ввести класс, например, «* .Helper». Как я знаю, CDI позволяет вводить даже примитивные типы.

  • JDK 1.7
  • JBoss 6.1.0
  • Weld 1.1.Beta2
+0

Какие зависимости не удовлетворяются? –

+0

@RobertHarvey это атрибут «myPojo» в «MyManagedBean». – axcdnt

+0

Развертываете ли вы свою войну прямо на сервере или они упакованы в EAR? –

ответ

0

К сожалению, с помощью JBoss 6.1.0 AS упакованного с Weld 1.1.Beta2 действительно не работает. В качестве теста попробовали ту же самую реализацию с Glassfish 3.1.2 и CDI инъекция работала как шарм.

+0

Он будет делать то же самое с JBoss AS 7.1.1 –

+0

@ AntoineSabot-Durand уверен! – axcdnt