IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java EE Discussion :

Injecter un EJB dans une classe Java


Sujet :

Java EE

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de Tom1x
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut Injecter un EJB dans une classe Java
    Bonjour,

    Est il possible d'injecter un EJB dans une classe Java avec CDI ?
    Si oui comment ?

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 326
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Analyste Programmeur

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 326
    Billets dans le blog
    12
    Par défaut
    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

  3. #3
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    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.

  4. #4
    Membre averti Avatar de Tom1x
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    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 ?

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    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.

  6. #6
    Membre averti Avatar de Tom1x
    Femme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 22
    Par défaut
    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 ?

Discussions similaires

  1. Injection d'EJB dans une appli web lance java.lang.NullPointerException
    Par Sylvain__A_ dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 20/06/2011, 23h31
  2. Réponses: 15
    Dernier message: 28/04/2009, 07h26
  3. Réponses: 5
    Dernier message: 28/09/2007, 14h58
  4. script sh dans une classe java
    Par decksroy dans le forum Langage
    Réponses: 2
    Dernier message: 11/09/2007, 18h33
  5. Réponses: 13
    Dernier message: 25/03/2005, 11h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo