Вопрос

У меня есть приложение, которое пытается использовать аннотацию @ejb, чтобы ввести удаленные ссылки на EJBS в моем файле EJB.jar. Я получаю непоследовательные результаты. В одном случае у меня есть слушатель в web.xml, который вызывается и, по-видимому, имеет правильно введенный EJB, поскольку я могу видеть его подключение к методам EJB и вызова на нем. В другом классе (действие Struts2) я получаю NPE, когда он пытается получить доступ к ссылке EJB. Насколько я могу сказать, они одинаковые звонки, в классах Java, которые живут в том же файле .war.

В качестве работы, я добавил код в конструкторе, чтобы найти EJBS их глобальными именами JNDI, и он работает нормально. Я просто не могу понять, почему один @ejb работает, а не другой.

Это было полезно?

Решение

Как вы вводите EJBS в стойках 2 действия? Вы используете CDI? Вы используете Struts2 CDI плагин?

Обновлять: Проблема в том, что контейнер не создает объекты стойки, стойки, поэтому контейнер не получает возможность ввести что-либо. Вам придется использовать упомянутый плагин для CDI. чтобы включить инъекцию в ваших действиях.

Если вы хотите попробовать, получите стойки 2 источника:

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

потом cd в struts2 каталог и запустить следующую команду (это будет скомпилировать необходимые модули для 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/ Например.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top