Puis-je utiliser l'injection de constructeur CDI pour les EJB?
Je veux faire quelque chose comme ceci:
@Stateless
public class GreeterEjb {
private final Greeter greeter;
@Inject
public GreeterEjb(Greeter greeter) {
this.greeter = greeter;
}
public String greet() {
return greeter.greet();
}
}
Je l'ai essayé avec Glassfish 3.1.1 et JBoss 7.0.2 avec des résultats mitigés. Dans certaines circonstances, il travaille, dans d'autres circonstances, il n'est pas.
Voir ce fil dans la Glassfisch forum si vous êtes intéressé par les détails.
La EJB 3.1 specsection 4.9.2 Classes de Haricots dit:
La classe doit avoir un constructeur public qui ne prend pas de paramètres.
Qui sonne comme constructeur d'injection n'est pas autorisé pour les Ejb.
MAIS la CDI spec dit au début de la section 3 de cette Session, les Haricots sont pris en charge par le CDI. La Section 3.2, puis s'adresse à la longueur de la CDI et les Ejb, mais ne mentionne jamais rien à propos de constructeur d'injection ne fonctionne pas. Ce qui me fait penser qu'il devrait être autorisé.
Oui, les spécifications permettent CDI constructeur d'injection pour les Ejb ou pas?
source d'informationauteur Arend v. Reinersdorff
Vous devez vous connecter pour publier un commentaire.
Kris et Pete Muir ont finalement convaincu de moi: L'EJB doit avoir un public de non-arg constructeur, même si un autre constructeur est utilisé pour l'injection. Bizarre d'utiliser deux constructeurs dans le même temps, mais il fonctionne. Merci les gars.
Testé avec succès sur Glassfish 3.1.1, JBoss 7.0.2 et TomEE 1.0.0-beta-2.
Constructeur injection des Ejb est nécessaire dans Java EE 6 SEULEMENT SI le CDI est activé pour le pot. Si cela ne fonctionne pas sur un serveur d'applications, de fichiers d'un bug.
Veuillez également déposer un sujet ici - http://java.net/jira/browse/EJB_SPEC - avoir de l'EJB de la langue spec fixe (c'est mal).
Ceci est testé dans le CDITCK - https://github.com/jboss/cdi-tck/blob/master/impl/src/main/java/org/jboss/cdi/tck/tests/implementation/enterprise/definition/ExplicitConstructorSessionBean.java - mais pas pour les non-interface-vues, donc s'il vous plaît faire un problème dans https://issues.jboss.org/browse/CDITCK et nous pouvons ajouter un test pour votre cas.