Struts 2 アクションに EJB をどのように注入しますか? CDIを使用していますか?Struts2 CDI プラグインを使用していますか?
更新:問題は、コンテナーが Struts オブジェクトを作成していないことです。Struts は作成しているため、コンテナーは何も注入する機会がありません。アクションでインジェクションを有効にするには、前述の CDI 用プラグインを使用する必要があります。
試してみたい場合は、Struts 2 のソースを入手してください。
svn co http://svn.apache.org/repos/asf/struts/struts2/trunk/ struts2
次にcd
、struts2
ディレクトリに移動し、次のコマンドを実行します (これにより、に必要なモジュールがコンパイルされます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/を参照してください。