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

Maven Java Discussion :

[M2] composant plexus et configuration


Sujet :

Maven Java

  1. #1
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut [M2] composant plexus et configuration
    Salut à tous,

    j'essaye de créer un composant Plexus pour Maven 2 permettant de gérer ma factory Hibernate afin de l'utiliser dans un ou plusieurs plugins.

    Comment faire pour configurer ce composant plexus à partir du pom.xml sans avoir à "setter" les valeurs à partir de mon Mojo ?

    merci d'avance pour votre aide

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Tu n'as pas besoin d'un composant Plexus pour celà. Un simple bean sera suffisant avec des getter/setter. Ensuite dans ton mojo, tu ajoutes ton bean comme champ de ton mojo et tu pourra le configurer dans ton pom.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class HibernateFactory
    {
        private String field1;
     
        public String getField1()
        {
            return field1;
        }
        public void setField1( String field)
        {
            field1 = field;
        }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public MyMojo
        extends AbstractMojo
    {
        /**
         * @parameter
         */
        private HibdernateFactory factory;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    <projet>
      <build>
        <plugins>
            <plugin>
               <groupId>yourMojoGroupId</groupId>
               <artifactId>yourMojoArtifactId</artifactId>
               <configuration>
                   <factory>
                      <field1>yourValue</field1>
                   </factory>
               </configuration>
        </plugins>
      </build>
    </project>

  3. #3
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    ok merci emmanuel.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Peux-tu compléter ton thread sur la mailing list utilisateur de maven? ainsi, tout le monde pourra en profiter.

  5. #5
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    je veux bien mais je ne sais pas ce que c'est "la mailing list utilisateur de maven" ?

  6. #6
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    oops, ce n'était pas la liste utilisateur, mais la liste de dev car je vois que tu as fait un post sur dev@maven.apache.org à propos de ce sujet.

    Sinon, pour info, la liste utilisateurs de maven est users@maven.apache.org

  7. #7
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    est-ce qu'utiliser un simple bean pour gerer ma factory Hibernate me permet de ne la charger qu'un seule fois , dans le cas d'un projet multi-module ?

    ou à chaque appel du mojo pour chaque module, un nouvel objet factory va être créer ?

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    je ne me souviens plus exactement, mais je crois qu'un nouvel objet va être créé à chaque appel car les exécutions des plugins sont indépendante les unes des autres

  9. #9
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    c'est bien pour ça que je voulais faire un composant plexus afin qu'il soit configuré et initalisé par le container qu'un seule fois lors de l'execution afin de réduire le cout de création de la session.

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Je ne suis pas sure qu'une instance de composant est unique entre deux plugin.
    Que doit faire exactement ta factory? comment l'utilises-tu dans tes plugins?

  11. #11
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    non c'est pas entre 2 plugins mais pour le même plugin lors de l'exécution du goal sur un projet multi-modules.

    C'est pour mon plugin Dashboard, je suis en train de faire la persistence dans une base pour faire des graphes d'historiques des divers indicateurs Qualité.

    Or dans Hibernate, c'est la création de la session qui a un coût assez important.

    Donc je veux crèer un composant plexus donc la configuration est passée à runtime de telle manière qu'une fois le plugin chargé et configuré , j'ai une session Hibernate opérationnelle.

    De telle manière à ce que, quand maven execute le goal "persistdb" sur un projet multi-module, la session ne soit créée qu'une seule fois et non à chaque exécution du goal sur chaque module.

    j'espére avoir été clair.

  12. #12
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    OK, c'est clair maintenant

    Tu va créer un bean comme specifié ci-dessus et tu vas lui ajouter les tags javadoc de plexus afin de générer le descripteur. Pour générer le descripteur, tu dois utiliser le plugin maven pour plexus

    http://plexus.codehaus.org/guides/de...tions/cdc.html

  13. #13
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    ok d'accord mais après ?

    comment, à partir du pom.xml de mon projet qui va utiliser mon plugin dashboard qui lui-même va utiliser le composant plexus, je fais pour positionner la configuration à runtime ?

  14. #14
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Comme dans l'exemple du pom ci-dessus, ou alors je rate quelque chose

  15. #15
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    malheureusement, ça ne fonctionne pas.

    Effectivement, en faisant comme tu as dit, avec HibernateFactory en tant que parameter de mon mojo, j'ai bien une propagation des propriétés mais cela ne sert à rien de le définir comme un composant plexus car à l'exécution, j'ai bien une instance différente d'hibernateFactory à chaque exécution du goal sur chaque module.

    à l'inverse, quand je définis HibernateFactory en tant que component de mon mojo, j'ai bien qu'un instance créé pour l'ensemble du build mais par contre, il n'y a aucune propagation des propriétés du pom.xml vers le composant plexus HibernateFactory.

    si tu as d'autres idées, je suis preneur, en attendant, merci pour ton aide très précieuse.

  16. #16
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Bon, dernière idée.

    Tu peux essayer d'utiliser ton HibernateFactory en tant que component de ton mojo et un bean pour définir les valeurs de ta factory. Dans ton mojo, tu configure ton HibernateFactory avec les valeurs du bean.

  17. #17
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    c'est ce que je viens de faire.

    Effectivement, j'ai bien un hibernateFactory unique créé comme composant plexus et ensuite dans mon mojo, je sette les propriétés dans la factory, ce qui me permet de créer une session stockée par la factory et de pouvoir réutiliser la même à chaque utilisation du goal sur chaque module.

    Un enorme merci pour ton aide Emmanuel.

  18. #18
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 75
    Par défaut
    Bonjour,

    J'ai suivi votre discussion par curiosité, mais je dois avouer que je n'ai pas compris grand chose.. Quelqu'un pourrait il m'éclairer sur la notion de composant plexus ? Qu'est est ce exactement ? un Plugin ?

    Merci

  19. #19
    Membre Expert

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    1 172
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 172
    Par défaut
    Plexus est un framework IOC comme le sont Spring, Avalon...
    Il est utilisé au coeur de Maven.

    Un composant Plexus est une classe avec une stratégie d'initialization (singleton, par lookup...), d'initialization automatique des champs de la classes et un cycle de vie.

    Bien que le site de Plexus ne soit pas encore très fourni, tu peux le regarder.
    Personnellement, je trouve que l'utilisation de Plexus est beaucoup plus simple que celle de Spring, mais ce n'est pas le sujet

  20. #20
    Membre expérimenté Avatar de dvicente72
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 213
    Par défaut
    Plexus est un container de composants (creation et gestion des objets ) utilisant le pattern d'inversion de contrôle ou injection de dépendances, à l'image de ce que fait Spring.

    Plexus est à la base du développement de Maven.

    L'idée est de pouvoir définir un composant développé en Java via un descripteur (pour plexus c'est components.xml ) et de laisser le container s'occuper de créer, configurer et gérer le cycle de vie du composant.

    En l'occurence, dans le cas qui me concerne, je définis un composant plexus et ensuite je déclare dans mon plugin que j'utilise ce composant comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        /**
         * Hibernate Service
         * @component
         * 
         */
        protected HibernateService hibernateService;
    le fait que HibernateService soit un composant Plexus et déclaré comme telle dans mon plugin, je n'ai pas à m'occuper de son instantiation, c'est Maven qui s'en occupe.

    ça m'assure que ce composant est unique lors d'une exécution d'un goal.

    Dans mon cas, c'est pour mutualiser la creation de la session Hibernate qui est assez longue à initialiser et sur un projet multi-modules comme le mien ( on doit être proche de 168 modules en cascade ), ça me permet d'initialiser une session sur le premier module (ça prend 2s ) et j'utilise la même pour les autres, au lieu d'instantier à chaque fois une classe HibernateService, créer une session => 168x2s = 5 min 36 rien que pour obtenir une session Hibernate.

    J'espere avoir été clair et ne pas avoir raconté de conneries.

    Emmanuel, si tu peux apporter ton avis ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/01/2011, 11h56
  2. Réponses: 1
    Dernier message: 19/10/2007, 09h12
  3. Réponses: 2
    Dernier message: 24/08/2007, 12h32
  4. Composant Plexus MusicBrainz
    Par lgranie dans le forum Maven
    Réponses: 1
    Dernier message: 03/07/2007, 13h37
  5. Réponses: 2
    Dernier message: 24/03/2006, 18h05

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