Как вы вставляете EJB в Struts 2? Вы используете CDI? Вы используете Struts2 CDI plugin?
Обновление: Проблема заключается в том, что контейнер не создает объекты Struts, Struts - это значит, что контейнер не получает возможность вводить что-либо. Вам нужно будет использовать упомянутый plugin for 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
Затем получить источники КДИ-плагин:
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 выходит за рамки этого ограничения, делая инъекцию возможной в любом POJO с использованием CDI (но вы должны использовать CDI или CDI «осведомленные» рамки). –