質問

@EJBアノテーションを使用して、EJB.jarファイルにEJBにリモート参照を挿入しようとしているアプリがあります。一貫性のない結果が得られています。あるケースでは、web.xmlにリスナーが呼び出され、EJBがEJBに接続して電話をかけることができるため、EJBが正しく注入されているようです。別のクラス(Struts2アクション)では、EJBリファレンスにアクセスしようとするとNPEが表示されます。私が知る限り、それらは同じ.WARファイルに住んでいるJavaクラスの同一の呼び出しです。

回避策として、コンストラクターにコードを追加して、Global JNDI名でEJBSを検索しましたが、正常に機能します。 1つの@ejbが別の@ejbが機能する理由を理解できません。

役に立ちましたか?

解決

Struts 2のアクションにどのようにEJBを注入しますか? CDIを使用していますか?使用していますか Struts2 CDIプラグイン?

アップデート: 問題は、コンテナがストラットオブジェクトを作成していないことです。そのため、コンテナは何も注入する機会を得られないことです。あなたは言及を使用する必要があります CDIのプラグイン あなたの行動に注入を可能にするため。

試してみたい場合は、2つのソースを把握してください。

svn co http://svn.apache.org/repos/asf/struts/struts2/trunk/ struts2

それで cdstruts2 ディレクトリと次のコマンドを実行します(これにより、必要なモジュールがコンパイルされます struts-cdi-plugin)

mvn install -pl plugins -am

次に、cdi-pluginのソースを取得します。

svn co https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-cdi-plugin/

コンパイル:

mvn install

さて、私のpom.xmlに次の依存関係があります:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-cdi-plugin</artifactId>
    <version>2.2.0-SNAPSHOT</version>
</dependency>
<dependency>
  <groupId>javassist</groupId>
  <artifactId>javassist</artifactId>
  <version>3.8.0.GA</version>
</dependency>

アクションでEJBを注入することができました。

public class HelloWorld extends ActionSupport {

    @Inject
    HelloEJB helloEjb;

    @Override
    public String execute() throws Exception {
        setMessage(helloEjb.getMessage());
        return SUCCESS;
    }

    private String message;

    public void setMessage(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

}

見る https://svn.apache.org/repos/asf/struts/sandbox/trunk/struts2-cdi-example/ 例として。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top