Domanda

Ho un app che sta cercando di usare @EJB annotazioni per iniettare riferimenti remoti a EJB nel mio file ejb.jar. Sto ottenendo risultati inconsistenti. In un caso, ho un ascoltatore in web.xml che viene chiamato e apparentemente ha l'EJB iniettato correttamente, dato che posso vedere la connessione a EJB e chiamare i metodi su di esso. In un'altra classe (un'azione Struts2) ottengo NPE quando si tenta di accedere al riferimento EJB. Per quanto posso dire, sono chiamate identici, in classi Java che vivono nello stesso file .war.

Come attorno al lavoro, ho aggiunto il codice nel costruttore di ricercare gli EJB con i loro nomi JNDI globale, e funziona bene. Io proprio non riesco a capire il motivo per cui si lavora @EJB e non un altro.

È stato utile?

Soluzione

Come si inietti EJB in Struts 2 azioni? Si sta utilizzando CDI? Si sta utilizzando il Struts2 CDI plug-in ?

Aggiornamento: Il problema è che il contenitore non è la creazione della Struts oggetti, Struts è, in modo che il contenitore non ottiene la possibilità di iniettare qualsiasi cosa. Dovrete usare il citato plug-in per CDI per consentire l'iniezione nelle vostre azioni.

Se si vuole fare un tentativo, ottenere Struts 2 fonti:

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

cd Poi nella directory struts2 ed eseguire il seguente comando (questo compilerà i moduli necessari per la struts-cdi-plugin)

mvn install -pl plugins -am

si metterà subito le sorgenti del cdi-plugin:

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

e compilarlo:

mvn install

Ora, con le seguenti dipendenze nel mio 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>

sono stato in grado di ottenere un EJB iniettato in un'azione:

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 / puntoni / sandbox / trunk / Struts2-cdi-example / per un esempio.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top