0

いくつかの 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

いくつかのシナリオの詳細:

  1. WAR2 を削除すると、WAR1 によるインジェクションが機能し始めます。
  2. 両方の成果物 (WAR1 と WAR2) には、同じ POJO と beans.xml (/WEB-INF) があります。

私が見逃している点はありますか?私が必要とするのは、たとえば「*.Helper」のようなクラスを注入する可能性だけです。私が知っているように、CDI ではプリミティブ型でさえも注入できます。

  • JDK1.7
  • JBoss 6.1.0
  • 溶接 1.1.Beta2
4

1 に答える 1

0

残念ながら、JBoss 6.1.0 ASpackaged with の使用はWeld 1.1.Beta2実際には機能しません。テストとして、同じ実装を試してみるとGlassfish 3.1.2CDIインジェクションは魅力的に機能しました。

于 2013-07-25T11:32:00.433 に答える