Kann ich die CDI-Konstruktor-Injektion für EJBs?
Möchte ich etwas wie das hier tun:
@Stateless
public class GreeterEjb {
private final Greeter greeter;
@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}
public String greet() {
return greeter.greet();
}
}
Versuchte ich es mit Glassfish 3.1.1 und JBoss 7.0.2 mit gemischten Ergebnissen. Unter Umständen funktioniert es, unter anderen Umständen nicht.
Sehen dieser thread im forum Glassfisch, wenn Sie an den details interessiert sind.
Den EJB 3.1 SpezifikationAbschnitt 4.9.2 Bean-Klassen sagt:
Die Klasse muss über einen öffentlichen Konstruktor ohne Parameter.
Das klingt wie der constructor injection ist nicht erlaubt, für die EJBs.
ABER die Die CDI-spec sagt am Anfang von Kapitel 3, dass die Session Beans werden unterstützt durch die CDI. Abschnitt 3.2 spricht dann ausführlich über CDI und EJB, aber nie erwähnt nichts über Konstruktor-injection nicht funktioniert. Das macht mich denken, dass es erlaubt sein sollte.
So, die Spezifikationen erlauben CDI Konstruktor-Injektion für EJBs oder nicht?
InformationsquelleAutor der Frage Arend v. Reinersdorff | 2012-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kris und Pete Muir haben, hat mich schließlich überzeugt: Die EJB muss eine public no-arg-Konstruktor, auch wenn ein anderer Konstruktor verwendet wird, für Spritzguss. Seltsam ist die Verwendung von zwei Konstruktoren zur gleichen Zeit, aber es funktioniert. Danke Jungs.
Erfolgreich getestet auf Glassfish 3.1.1, JBoss 7.0.2 und TomEE 1.0.0-beta-2.
InformationsquelleAutor der Antwort Arend v. Reinersdorff
Konstruktor Injektion von EJBs ist es erforderlich, die Java-EE-6 NUR, WENN der CDI-aktivierten Glas. Wenn dies nicht funktioniert in einem appserver-Datei einen Fehler.
Bitte auch Datei ein Problem hier - http://java.net/jira/browse/EJB_SPEC - das EJB-Sprache spec behoben (es ist falsch).
Getestet habe ich dies in der CDITCK - https://github.com/jboss/cdi-tck/blob/master/impl/src/main/java/org/jboss/cdi/tck/tests/implementation/enterprise/definition/ExplicitConstructorSessionBean.java - aber nicht für no-interface-Ansichten, so heben Sie bitte ein Problem in https://issues.jboss.org/browse/CDITCK und wir können hinzufügen, ein test für Ihren Fall.
InformationsquelleAutor der Antwort Pete Muir