Struts 2 작업에서 EJB를 어떻게 주입합니까? CDI를 사용하고 있습니까? Struts2 CDI plugin을 사용하고 있습니까?
업데이트 : 문제는 컨테이너가 Struts 개체를 생성하지 않는다는 것입니다. 따라서 Struts는 컨테이너에 아무것도 주입 할 기회가 없습니다. 당신이 언급 한 plugin for CDI을 사용하여 당신의 행동을 주입 할 수 있어야합니다.
당신은 스트럿츠 2 소스를 얻을, 그것을 시도를 제공 할 경우 : struts2
디렉토리에
svn co http://svn.apache.org/repos/asf/struts/struts2/trunk/ struts2
다음
cd
을하고 다음 명령을 실행
(이것은
struts-cdi-plugin
에 필요한 모듈을 컴파일)
mvn install -pl plugins -am
그런 다음 CDI-플러그인의 소스를 얻을 :
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/을 참조하십시오.
아니오, 그냥 곧은 @EJB 주석입니다. – g051051
설명해 주셔서 감사합니다. 이것은 청취자가 (web.xml 항목에서 컨테이너에 의해 인스턴스화 된) 리스너가 왜 작동하지만 스트럿츠에 의해 인스턴스화 된 내 작업이 왜 실패했는지 설명합니다. 방금 주석 달린 클래스가 어떤 종류의 클래스 로더 부두를 통해 처리 될 것이라고 가정했습니다. 이런 종류의 것이 문서화되어 있습니까? – g051051
@ g051051 리스너는 소위 "관리되는"구성 요소이며 주입이 작동합니다 (예 : Java EE 5, http://java.sun.com/developer/technicalArticles/J2EE/intro_ee5/#injection을 참조하십시오). Java EE 6는 CDI를 사용하여 POJO에서 주입을 가능하게함으로써 이러한 한계를 뛰어 넘습니다 (그러나 CDI 또는 CDI "인식"프레임 워크를 사용해야합니다). –