Loutil Seam-gen est bien pratique, mais pour ce qui est des projet générés, le seul outil de compilation possible reste ant. Maven est aujourdhui loutil de compilation/gestion des dépendances incontournable en java. Cest pourquoi lorsque je créer un nouveau projet Seam je préfère utiliser maven 2. Néanmoins, pourquoi se priver des facilités de seam-gen ?
Afin dêtre relativement large dans les explications, nous couvrirons ici, la création dun projet de type ear, pour pouvoir y inclure des EJB. Si vous souhaitez creer simplement une webapp simple (vous ne voulez pas dun serveur dapplication avec conteneur dejb par exemple), le principe reste le même.
Cependant il est bon de savoir que Seam permet la gestion des EJB dans un serveur web type tomcat, grâce à un système interne démulation de conteneur dejb, cela peut être très pratique si vous travaillez dans un environnement rigide que vous ne pouvez faire évoluer. Je vous invite à vous référer à la documentation pour ce cas là. Je vois dici arriver les commentaires du type «Pourquoi s’embêter et ne pas mettre un jboss ou un glassfish à la place ?», la réponse est simple : en entreprise on a pas toujours le choix de lenvironnement. La robustesse de ce type de projet est à mes yeux douteuse, mais si on a pas le choix … Bref ce nest pas sujet de ce billet.
Personnellement jai passé beaucoup de temps sur mes premiers projets à faire la structure maven et les poms. Et à lépoque un exemple maurait été bien utile, cest pourquoi jai décidé décrire ce billet.
Dans le cas présent, admettons que lon souhaite créer un outils de blog relativement large, léquivalent dun wordpress (blog propulsant actuellement ce site mais le projet en question pourrait bien aboutir…) un cms donc. Le projet sappellera alors dans mon billet dreamisle-cms, à vous de modifier tout ce qui suivra pour votre projet.
Bien entendu, il est nécessaire de savoir utiliser loutil maven pour pouvoir comprendre et appliquer les explications données ci-aprés.
La première partie pour la création de votre projet va donc consister à créer ce dernier avec seam-gen, comme expliqué dans la documentation officielle. Cette étape est très simple et seam-gen vous guide pas à pas. Ainsi, nous évitons la laborieuse étape de création des fichiers de configurations xml et properties, que nous naurons qua déplacer dans notre architecture maven une fois celle-ci en place.
Enfin gardez ce projet dans un coin de votre disque dur il vous servira toujours.
On va maintenant creer un projet vide. Dans Eclipse : new project, général, project.
Ici on lappelle dreamisle-cms. Dans celui ci on créer alors 4 repertoires : - dreamisle-cms-ear ce sera le sous projet qui contiendra le pom utilisé par maven pour générer lear de votre application. - dreamisle-cms-entities qui sera le projet qui contiendra vos EJB Entity, il réprésentera la couche modèle. - dreamisle-cms-services sera le projet qui contiendra la couche service (action/contrôleur) de votre application : les EJB sessions, messages et les composants Seam. Vous pouvez aussi décider de mettre vos EJB Entity dans un packages entities dans ce projet, mais personnellement je prefere les séparer dans un projet externe, ainsi mes données pures sont indépendantes du reste du projet. - dreamisle-cms-war : le war de votre application, la webapp si vous preferez. La couche vue. Enfin importez ces répertoires comme nouveaux projets vides dans Eclipse. (Utilisez loutil de création de projet vide, mais changez lemplacement du projet, et donner lui le même nom que le repertoire.)
Désormais on va créer les sous répertoire de votre architecture maven typique.
Jai pensé que des captures décran seraient plus clair quun long texte.
Ici donc larborescence du projet ear et du projet entities.
Vous pouvez aussi voir quels fichiers vous devez placer dans quels répertoires. Reprenez ceux de votre projet seam gen créé en première partie.
Le projet service maintenant.
On constate la présence du fichier seam.properties, dans mon cas il est vide mais absolument nécessaire. et il doit être présent dans tous les projets ou des composants seam sont déployé. En effet lors de son démarrage, Seam scanne les archives qui contiennent ce fichier.
La structure doit être identique à la capture. Sauf bien sur le package org.dreamisle.services, : cest à vous de décider de votre packaging.
Et enfin le war. La partie Web-inf est la plus importante, une bonne partie de la configuration de votre application va se trouver ici.
Je nai pas étendu img, layout, stylesheet mais vous vous doutez bien de leur contenu.
On va pouvoir attaquer les choses sérieuses désormais : les fameux pom. Ils sont souvent la hantise des développeurs java, mais une fois en place, ils font gagner un temps fou et évitent une sacrée perte de temps due au versioning des librairies et frameworks utilisés. Et au moins si vous êtes plusieurs dans léquipe, vous êtes sur que tout le monde travaille sur la même version de chaque librairie.
Et puis pom, moi ça me rappelle un certain constructeur dordinateurs que jaffectionne particulièrement … pas vous ?
Vous lavez vu chaque sous projet à son fichier pom.xml.
Le projet principal qui contient les autres : dreamisle-cms, a aussi son pom. Il sagit pour maven du projet parent, il contient donc le pom principal, cest lui qui contient en statique les versions de chaque dépendance, référencées dans les pom fils grâce a provided ou à ${pom.version} pour vos dépendances personnelles.
Commençons donc par voir le pom parent : Comme vous pouvez le voir jexclu parfois des librairies lors dinclusion : cest simplement pour éviter les redondances de librairie dans larchive finale. En effet, lorsquon inclus une librairie via maven, on appelle le pom de celle-ci, donc si vous incluez une librairie qui inclue dautre librairies que vous avez déjà vous allez vous retrouver avec des jars en double dans votre archives, autant dire que cest pas génial. Conclusion quand vous faite un ear avec maven, regardez bien ce quil contient et adaptez votre pom, ça peut éviter des bétises.
Le pom principal que je vous invite à lire
( désolé cest long…)
Et voilà, ouf ! Je ne vais pas rentrez dans le détails sur le contenu du pom, si vous ne comprenez pas ce code xml, commencez par vous reporter à des documentations sur maven, il y en a de très bonnes sur developpez.com.
Et maintenant le pom de lear : cest lui qui contient les instructions de build pour maven, donc faites celui-ci avec une attention particulière. Lisez attentivement la partie build, jy utilise un plugin qui permet de déplacer lear final vers le répertoire de déploiement de votre serveur dapplication (ici jboss).
Il est important de respecter lordre dappel des modules, mais si vous connaissez maven, vous devez déjà le savoir.
Le Le pom du projet entities maintenant, celui ci est simple il ne contient que les dépendances du projet.
Le Le pom du projet services petite subtilité on commence par ajouter comme dépendance le projet entities, pour pouvoir utiliser les ejb entités qui y sont définis bien entendu.
Et enfin Le pom du war ici on ajoute une partie build en précisant dutiliser le plug in de génération de war de maven (ce nest ni un jar ni un ear…).
Et voilà vous avez vos projets et vos poms, vous navez plus quà adapter à vos besoins ! Cette méthode à un autre avantage, vous pouvez ninclure que ce qui est strictement nécessaire contrairement à un projet seam-gen classique qui inclus tout ce que vous pourriez peut être avoir besoin, et oui il faut bien que seam-gen soit adapté à tous les projets possibles.
De plus, si vous souhaitez utiliser une autre librairie que celles dorigines, cest très simple, il ny a quà ajouter la dépendance, et maven vous récupérera la librairie tout seul.
Jespère que ce billet, et les poms à disposition vous auront été utiles. Dernier conseil sinon, installez vous les jboss tools disponibles sur jboss.org dans download. Ce plugin eclipse, est vraiment génial lorsqu’on utilise Seam. Il permet d’intégrer les possibilités du seam gen (création de projet, création dentity avec la liste la home et les pages de gestion crud de celles-ci, création dejb préannotés avec interface et classe de lejb, créations de composant seam) en quelques cliques via des assistants (wizard) eclipse habituels.
Liens :


