0

次の構造の EAR ファイルがあります。

  • ライブラリ
    • jar.jar
      • テスト1
      • テスト2
  • ejb.jar
    • Test1Impl
  • 戦争.戦争
    • Test2Impl
    • テストサーブレット

jar.jar には 2 つのインターフェースが含まれています

  • テスト1
  • テスト2

TestServlet は、war.war に ejb.jar へのマニフェスト Class-Path エントリがある場合にのみ、Test1Impl に解決される Test1 を注入します。Test1Impl は、ejb.jar に war.war へのマニフェスト Class-Path エントリがある場合にのみ、Test2Impl に解決される Test2 を注入します。

ヒント エントリのMatching the classloader structure for deployment of Weld ドキュメントは、マニフェスト エントリが必要な理由を説明しています。このクロス BDA インジェクションはどのように正常に機能するはずですか? Class-Path マニフェスト エントリの追加は、実際には実装を表示したくないため、少しばかげているように思えます。他のサブデプロイメントの Bean が表示されるようにしたいだけです。それを行う方法はありますか?

ここでの実装

public class Test1Impl implements Test1 {

    @Inject
    private Test2 test2;

    public void hello() {
        System.out.println(test2.getString());
    }

}

public class Test2Impl implements Test2 {

    public String getString() {
        return "Hello";
    }

}

@WebServlet(urlPatterns = "/test")
public class TestServlet implements Servlet {

    @Inject
    private Test1 test;

    public void init(ServletConfig config) throws ServletException {
    }

    public ServletConfig getServletConfig() {
        return null;
    }

    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        test.hello();
    }

    public String getServletInfo() {
        return null;
    }

    public void destroy() {
    }

}

そして、ここで application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
             version="7">
  <description>The EAR</description>
  <display-name>ear</display-name>
  <module>
    <ejb>ejb.jar</ejb>
  </module>
  <module>
    <web>
      <web-uri>war.war</web-uri>
      <context-root>/</context-root>
    </web>
  </module>
  <library-directory>lib</library-directory>
</application>
4

1 に答える 1

0

デプロイメント外から CDI Bean を使用するセクションのCDI リファレンスで説明されているように、適切な依存関係を持つ jboss-deployment-structure.xml が必要です。これで問題は解決しましたが、エンタープライズ アプリケーションでこれを行うための移植可能な方法を CDI 仕様で定義する必要があると思います。

于 2014-08-25T18:47:26.473 に答える