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 :

Tutoriel d'introduction à CDI


Sujet :

Java EE

  1. #1
    Membre habitué

    Homme Profil pro
    Développeur JavaEE/BigData
    Inscrit en
    Mars 2013
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur JavaEE/BigData
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2013
    Messages : 14
    Points : 168
    Points
    168
    Par défaut Tutoriel d'introduction à CDI
    Bonjour,

    Je vous propose un tutoriels Java d'introduction au standard d'injection de dépendances Java "CDI" intégré à JavaEE depuis JavaEE 6.

    L'adresse du tutoriel est ici : http://rmannibucau.developpez.com/tu...roduction-cdi/

    N'hésitez pas à laisser des commentaires (c'est mon premier ).

    Merci et bonne lecture,
    Romain

  2. #2
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    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 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Bonjour Romain,


    Tout d'abord je tiens à te dire que c'est un excellent tutoriel que tu viens de créer là (en plus c'est ton 1er ). Tu vas à l'essentiel des choses et le tutoriel conserve sa richesse, c'est très bien.

    "Ce genre d'opération peut potentiellement s'avérer assez long, alors il y a une astuce : ne sont scannés que les jar avec un fichier beans.xml ou des classes décorées."
    Est-ce que par "classes décorées" tu entends "classe annoté avec une annotation scope telle que @Dependent" par exemple ? Si oui je suppose que l'opération s’avérera toujours aussi "long" qu'avant vu qu'il faut toujours chercher chacune des classes du jar pour voir lesquels sont annotées.

    Il y a une annotation qui me semble très importante dont tu n'as pas parlé :
    http://docs.oracle.com/javaee/7/api/...Singleton.html
    => PS: Il ne s'agit pas du Singleton EJB.

    Sinon : "@Dependent : crée une nouvelle instance pour l'injection en cours."
    J'ai toujours trouvé la définition de ce scope simpliste, ce dernier est le scope par défaut qui va se comporter comme le scope de la classe qui l'encapsule.

    Tu dis : "définir une méthode public Object around(InvocationContext ctx) throws Exception décorée avec @AroundInvoke."
    Mais dans l'exemple tu utilises le nom de méthode "audit".

    La fin (CDI en mode standalone) est un peu rapide :
    • Je n'ai pas très bien compris la configuration et la mise en place de CdiContainer, mais j'irais voir la documentation.
    • Pourquoi utiliser RequestScoped dans un environnement Java SE ?


    Sinon pour ma part j'aurais bien aimé en savoir plus sur les intercepteurs et @Transactional car j'ai toujours voulu savoir le fonctionnement de JTA dans la spécification JPA. Si j'ai d'autres remarques je le dirais ici.


    Bonne continuation,
    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
    dk
    dk est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 75
    Points : 238
    Points
    238
    Par défaut
    Bonjour, avant tout, merci pour ce tutoriel très clair et concis !
    Mon intention n'est pas de lancer une polémique mais bien de connaître l'avis de la communauté sur ces annotations : de prime abord j'ai trouvé ce système d'annotation assez séduisant, mais en y réfléchissant un peu je suis pas certain que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Voiture voiture = new Voiture();
        voiture.setMarque("X1");
        voiture.setCouleur("Rouge");
        voiture.puissance (120.f);
    soit pire que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @MoteurQualifier(marque = "X1", couleur="Rouge", puissance = 120.f)
    Au contraire, ce n'est pas pour rien que dans les bonnes pratiques java on limite à 2-3 max le nombre d'arguments d'une méthode.

    Les stéréotypes c'est pareil, à la moindre spécificité il va y avoir de la duplication, sur les grosses applications ça va vite devenir le bazar. Et puis je trouve ça dangereux d'avoir des objets qui peuvent posséder énormément de responsabilités, c'est quand même une violation non négligeable d'un des 5 piliers fondateur de la POO.

    Néanmoins je reconnais qu'il y a des choses intéressantes comme les décorateurs ou les intercepteurs, en gros tout ce qui est configurable hors des objets.

    Ma question est donc : qui a un bon retour d'expérience sur ces annotations ? lesquelles sont les plus pertinentes ? dans quel contexte ?
    Merci d'avance

  4. #4
    Modérateur
    Avatar de Gugelhupf
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Décembre 2011
    Messages
    1 320
    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 320
    Points : 3 741
    Points
    3 741
    Billets dans le blog
    12
    Par défaut
    Bonjour @dk,

    Le DI ne joue pas le rôle d'un constructeur, il serait bien trop statique (on aurait toujours les même valeurs d'attributs pour l'instance d'une classe donnée). Bien sur que l'exemple donné dans le tutoriel est simpliste et ne reflète pas avec exactitude un cas réel. L'injection de dépendance (DI) ne joue pas le rôle de constructeur ou setter, mais utilise ses mécanismes.

    Pour les cas simples où les attributs sont des Strings, int etc oui on utilise un constructeur/setter, mais pour des objets plus complexes comme les pools de connexion le concept de DI facilite grandement le développement. Un exemple concret est le suivant : Je dois créer une classe threadsafe que j'utilise dans beaucoup d'autres classes, dois-je me forcer à utiliser le pattern Singleton avec des attributs static ? Ou bien suffit-t-il d'utiliser le DI avec un scope singleton ?

    Sans DI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public class Toto {
        private MaClasse singleton = MaClasse.getInstance(); // MaClasse contient un constructeur privé, des attributs static
    }
    Avec DI :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public class Toto {
        @Inject
        private MaClasse singleton; // MaClasse est développée naturellement
    }
    Ici il s'agit d'un cas Java SE, mais en Java EE c'est encore plus riche ! Vous déterminez la portée de votre injection grâce au scope que vous lui attribuez (requête, session, application), je vous conseille d'utiliser le framework JSF2 pour mieux saisir le principe. Pour bien comprendre l'utilité de l'injection de dépendance, je vous conseille aussi de pratiquer la spécification JPA, avec l'implémentation Hibernate par exemple.
    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

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    354
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 354
    Points : 593
    Points
    593
    Par défaut Beaucoup trop théorique
    Salut, moi j'aime bien faire les tutos dans mon IDE préféré (eclipse) en même temps que je les lis. Seulement je m'aperçoit en essayant de faire celui-ci que les classes sont complètement incohérentes et que rien ne compile. La classe voiture à une méthode freiner qui joue sur l'attribut freiner qu'elle ne possède pas. Les accesseurs et les mutateurs sont censés disparaitre grâce à l'attribut Inject mais cela n'est pas fait simplement dans la partie 1. Dommage les notions abordées avaient l'air intéressantes. Elles le sont surement pour des experts les maitrisant déjà et qui aurait besoin d'une piqure de rappel. Au pire cela ferait un bon article sur une techno plutôt qu'un tutoriel...

    En espérant que cela évoluera.

    Cordialement.

  6. #6
    Membre émérite
    Avatar de Mickael_Istria
    Homme Profil pro
    Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Inscrit en
    Juillet 2008
    Messages
    1 469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Expert Eclipse IDE/RCP, pour Red Hat
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 469
    Points : 2 997
    Points
    2 997
    Par défaut
    Negstek: Au passage, JBoss Tools fournit un bon support CDI dans Eclipse http://tools.jboss.org/features/cdi.html
    Pour du HTML, CSS, JavaScript, TypeScript, JSon, Yaml, Node... dans Eclipse IDE, installe Eclipse Wild Web Developer
    Pour du Rust dans Eclipse IDE, installe Eclipse Corrosion
    Follow me on twitter

Discussions similaires

  1. Tutoriel d'introduction au langage Pascal
    Par Alcatîz dans le forum Pascal
    Réponses: 6
    Dernier message: 07/05/2010, 21h03
  2. Tutoriel d'introduction à la cryptographie
    Par Jean-Philippe Dubé dans le forum Sécurité
    Réponses: 5
    Dernier message: 22/02/2009, 15h27
  3. Tutoriel SEO : Introduction et bonnes pratiques pour l'optimisation de pages Web
    Par Community Management dans le forum Référencement
    Réponses: 0
    Dernier message: 06/07/2006, 00h03

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