J2EE 6 : @Inject ou @EJB
Depuis J2EE5 et la spécification EJB (JSR-318), l’annotation @javax.ejb.EJB
permet d’injecter une instance d’un EJB dans une variable.
Grâce à J2EE6 et la spécification Dependency Injection (JSR-330), l’annotation @javax.inject.Inject
permet d’injecter n’importe quelle sorte de POJO (Plain Old Java Object) dont, bien entendu, des EJB dans une variable. Quelle annotation utiliser ?
Dans la plupart des cas, il est préférable d’utiliser l’annotation @javax.inject.Inject
au lieu de @javax.ejb.EJB
car elle est globale à toutes les sortes d’objets. Il faudra impérativement utiliser @javax.ejb.EJB
lorsque :
- Le conteneur où est déployée l’application n’est pas compatible avec CDI
- L’EJB à injecter est un EJB remote
Comme indiqué dans la documentation de référence de Weld, si l’on souhaite utiliser l’annotation @javax.inject.Inject
pour injecter un EJB remote, il est nécessaire de passer par un autre objet référenceant l’EJB remote via l’annotation @javax.ejb.EJB
:
@Produces @EJB(ejbLink="../their.jar#PaymentService") PaymentService paymentService;
Pour plus d’information, lire la documentation de Weld ou ce message intéressant sur le forum JBoss : https://community.jboss.org/thread/179388?start=15&tstart=0,