Bonjour,
Est il possible d'injecter un EJB dans une classe Java avec CDI ?
Si oui comment ?
Bonjour,
Est il possible d'injecter un EJB dans une classe Java avec CDI ?
Si oui comment ?
Salut,
Je pense que tu peux, mais fait gaffe à ne pas mixer les annotations de déclaration et d'injection CDI/EJB (ps: par le passé j'avais déjà essayé de mixer CDI avec des annotations d'injection propres au framework JSF et j'avais eu des problèmes).
Si tu veux tu peux toujours essayer de voir ce que ça donne :
- Pour injecter un composant CDI (annoté avec @Named + Scope CDI), utilise l'annotation @Inject dans la classe où tu injectes ta dépendance.
- Pour injecter un composant EJB (annoté avec @Stateless, @Stateful ou @Singleton en fonction de ton scope), utilise l'annotation @EJB dans la classe où tu injectes ta dépendance.
Cordialement,
N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java
Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ?Contacter Gokan EKINCI
oui, dans le dernière spec javaEE, les annotations d'injection EJB présentent dans les Beans CDI sont respectées, et inversément. Tu peux donc aussi injecter du CDI dans un EJB. J'ai du code ici où c'est l'orgie et tout le monde y trouve son compte
Tu peux aussi injecter tout ça dans les Beans JSF, mais pas l'inverse il me semble.
Merci pour vos réponses,
Je suis novice avec CDI et c'est par hasard que je me suis rendu compte que je pouvais en avoir l'utilité.
J'utilise Apache Shyro pour ma Sécurité et je dois implémenter mon propre Realm qui est une classe Java, j'utilise ensuite dans cette classe une méthode provenant de mon EJB me permettant de récupérer des valeurs depuis ma DB (via JPA) mais celui ci est null.
C'est à ce moment que j'ai vu que les injection d'EJB ne fonctionnait que dans des servlet ejbs .. mais pas dans des classes java
J'avais le choix en utilisant lookup ou CDI et je trouve que CDI est beaucoup plus pratique..
J'ai cru voir que je pouvais utiliser l'annotation Produce avec un ManagerBean mais je ne sais pas si c'est vraiment adapté à mon besoin et s'il y a d'autres moyens plus simple pour faire ça.
Je ne comprend pas pourquoi d'ailleurs l'injection d'EJB ne fonctionne pas dans une classe Java ?
Fait quand même attention si tu es dans un Realm. Je ne connais pas apache Shyro, mais en général le realm se déclenche avant de rentrer dans la partie sécurisée où on trouve les EJB / Beans CDI. Du coup ton injection pourrait foirer parce qu'il n'y a pas encore de contexte accessible quand tu es dans le Realm. Ca dépend surtout de ta sécurité comment elle travaille. Si elle fonctionne au dessus du conteneur J2EE ou en dessous.
Oui je comprend, je ferais attention à ça.
Mais je suis dans l'impasse mon Realm est appelé implicitement par les méthodes des lib Shiro je ne peux pas faire autrement que d'appeler la méthode de mon EJB à moins de créer une classe DAO exprès pour cette méthode..
Je ne vois vraiment pas comment injecter mon EJB dans ma java class avez vous d'autres idées ?
Partager