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 :

[Weld-1.1.8][Glassfish 3.1] Injection d'un bean se trouvant dans une lib [CDI]


Sujet :

Java EE

  1. #1
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut [Weld-1.1.8][Glassfish 3.1] Injection d'un bean se trouvant dans une lib
    Bonjour,

    je rencontre actuellement un problème d'injection d'un bean dans un EJB.

    Ce bean se trouve dans une de nos librairies contenant bien le beans.xml.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    public class MainMailer extends DefaultMailer {
     
        @Inject
        public MainMailer(@EmailConfig final Properties emailConfig) {
            super(emailConfig);
        }
     
        @Override
        public LabelKeyBundle getBundle(final Locale locale) {
            return new LabelKeyBundle(locale, this.getClass().getClassLoader(),
                "mail");
        }
     
    }

    Ensuite nous avons bien un producer pour injecter le fichier properties.
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Singleton
    public class EmailConfigProvider {
     
        @Produces
        @EmailConfig
        private final Properties emailConfig = ConfigurationUtils.loadProperties("xx/xxxxxxx/emailconfiguration");
     
    }

    Ensuite dans notre EJB nous injectons le Mailer ainsi que le fichier properties.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    @Inject
        private Mailer mailer;
    @Inject
        @EmailConfig
        private Properties emailConfig;
    C'est là que cela se gâte car cela ne fonctionne tout simplement pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: org.jboss.weld.exceptions.IllegalArgumentException: WELD-001324 Argument bean must not be null
    Après avoir ajouté un conditional breakpoint lors du déploiement dans le BeanManagerImpl, je vois bien que l'InjectionPoint est bien le mailer et que le resolvedBean est bien null.

    Par contre dès que l'on transforme cette librairie en module EJB, comme par magie cela fonctionne.

    Voilà si vous avez une idée, elle est la bienvenue.

    Merci.
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  2. #2
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Je suppose que c'est à cause de notre grande application monolithique que ça foire.

    En faisant un projet composé d'un module EJB avec un singleton dans lequel on injecte un bean CDI se trouvant dans un autre module non EJB, je n'ai aucun problème.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    import javax.annotation.PostConstruct;
    import javax.ejb.Singleton;
    import javax.ejb.Startup;
    import javax.inject.Inject;
     
    import test.cdi.ConstructorWithInjectedProperty;
     
    @Singleton
    @Startup
    public class TestEjb {
     
        @Inject
        ConstructorWithInjectedProperty prop;
     
        @PostConstruct
        public void onInit() {
            System.out.println(this.test());
        }
     
        public String test() {
            return this.prop.getClass().getSimpleName();
        }
     
    }

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import java.util.Properties;
     
    import javax.inject.Inject;
     
    public class ConstructorWithInjectedProperty {
     
        @Inject
        public ConstructorWithInjectedProperty(@InjectionProperty final Properties props) {
     
        }
     
    }

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import java.util.Properties;
     
    import javax.enterprise.inject.Produces;
    import javax.inject.Singleton;
     
    @Singleton
    public class PropertyInjectionProvider {
     
        @Produces
        @InjectionProperty
        Properties propToInject = new Properties();
     
    }
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  3. #3
    Membre régulier
    Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 42
    Points : 96
    Points
    96
    Par défaut
    Je n'ai pas de réponse directe à ton soucis, bien désolé, mais par contre nous avons pu contourner certaines limitations et bugs gênants de CDI/Weld sur notre grosse appli monolithique (Serait-ce un standard ? ;-) ) grâce à ce framework. J'espère qu'à défaut de te fournir une vraie solution, tu y trouveras peut être un contournement simple, mais tu connais peut être déjà :
    https://deltaspike.apache.org/docume.../overview.html

  4. #4
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Bonjour,

    oui je connais Deltaspike. Mais c'est vrai que l'on ne l'a jamais utilisé.

    Merci pour ta réponse.
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Glassfish][EJB3 Stateless]Injection de dependance marche pas.
    Par AbdouPoulou dans le forum Glassfish et Payara
    Réponses: 9
    Dernier message: 18/12/2009, 16h51
  2. Réponses: 6
    Dernier message: 08/12/2006, 14h07
  3. injection de code dans une application
    Par youp_db dans le forum C
    Réponses: 16
    Dernier message: 21/07/2006, 13h33
  4. injecter le contenu d'un fichier dans un tableau
    Par rogerio dans le forum C++
    Réponses: 5
    Dernier message: 03/05/2006, 17h37
  5. [VB.NET] fonction qui injecte du html dans une zone précise
    Par denisvignes dans le forum ASP.NET
    Réponses: 5
    Dernier message: 27/10/2005, 10h33

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