いくつかの Web アーティファクト (.war) を含むプロジェクトがあり、単純な POJO を挿入する際に問題に直面しています。次のコードは、最も単純な作業ケースを表しています。
.war (WAR1)
public class MyManagedBean {
@Inject
private MyPojo myPojo;
}
.war (WAR1) の POJO
public class MyPojo {
public void doSomething() {}
}
同じ POJO (MyPojo) がパッケージ化された Web アーティファクト (.war --> WAR2) をもう 1 つ追加すると、問題が発生します。意味的には、外部アーカイブ (.jar) ではなく、各 Web アーティファクトに POJO が必要です。基本的に、追加された最新のコンポーネント (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
いくつかのシナリオの詳細:
- WAR2 を削除すると、WAR1 によるインジェクションが機能し始めます。
- 両方の成果物 (WAR1 と WAR2) には、同じ POJO と beans.xml (/WEB-INF) があります。
私が見逃している点はありますか?私が必要とするのは、たとえば「*.Helper」のようなクラスを注入する可能性だけです。私が知っているように、CDI ではプリミティブ型でさえも注入できます。
- JDK1.7
- JBoss 6.1.0
- 溶接 1.1.Beta2