2つのWARを1つのEARに移行しようとしています。EARのCDI + EJBが失敗する:未対応の依存関係
Java EE 7(CDI 1.1およびEJB 3.1)のようにWebLogic 12.2.1で稼動します。 2 WARを個別に展開された古い状況では
状況
WAR1
|- WEB-INF/lib/ejb-cdi.jar (type=jar)
|- WEB-INF/lib/**.jar
WAR2
|- WEB-INF/lib/ejb-cdi.jar (type=jar)
|- WEB-INF/lib/**.jar
と:
各WARには、多くの@Stateless EJBのと@Named CDIは豆にを管理含む同じJARライブラリが含まれていますすべて正常に動作します。私はいくつかの必要な手順を実行した
EAR
|- WAR1.war (skinny, without ejb-cdi.jar)
|- WAR2.war (skinny, without ejb-cdi.jar)
|- ejb-cdi.jar (type=ejb)
|- lib/**.jar
:
- はに、包装の種類を変更し
今、私は2 WARさんのようになります1つのEARファイル、にをパッケージ化しなければなりませんEJB のejb-cdi.jar EJBのとCDIを含むためはejbModulとして構成されたEJB-cdi.jar
- 豆を管理しますpom.xmlの電子は、EJB-cdi.jarなしスキニー戦争としてWAR1とWAR2構成のpom.xml
- にwebModuleとしてWAR1とWAR2構成
- は
- はを使用して、EJBルックアップが成功していることを保証しました@Stateless(にmappedName = "XX")と@EJB(のbeanName = "XX")
通報
EJBルックアップEARが起動します。 EARファイル内のEJBのルックアップとCDIの注射はプレーンなWARファイルよりも完全に異なる処理されているようですいくつかは、読んだ後
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied
dependencies for type MyBean with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private my.package.Foo.myBean
:起動時にすべての私のCDI @Inject sが次の例外で失敗します。
ejb-cdi.jarがマニフェストのクラスパス上にないので、マネージドBeanはわかりません。
私が試してみました:
- は、クラスパスにEJB-cdi.jarを追加 - > EJBのルックアップが完全に失敗する - > EJBさんは今曖昧
- メイクのejb-cdi.jar定期JAR再定義されています
- /libのに余分な異なる分類器とのejb-cdi.jarを追加 - > EJBさんは現在曖昧
を定義している(私は簡素化しましたので、私はJARを再編成する必要はありません願っています状況と実際にそのような結合された瓶は1つ以上です。)
EJBとCDIが正しく動作するEARを取得する最適なソリューションは何でしょうか?
古典的なクラス読み込みの問題のようです。 WARアーカイブ内のBeanにアクセス(注入)しようとしているEJBアーカイブ内から推測してみましょうか? – Siliarus
私はそれが答えではないことを知っていますが、...あなたはEARからWARにパッケージを移すことができますか? –