Dreamisle.net Blog

Java, Rails, Security and so many ...

Architecture Maven D'un Projet Seam 2.1.1.GA

| Comments

L’outil 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 aujourd’hui l’outil de compilation/gestion des dépendances incontournable en java. C’est 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 d’un projet de type ear, pour pouvoir y inclure des EJB. Si vous souhaitez creer simplement une webapp simple (vous ne voulez pas d’un serveur d’application avec conteneur d’ejb 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 d’ejb, 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 d’ici 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 l’environnement. La robustesse de ce type de projet est à mes yeux douteuse, mais si on a pas le choix … Bref ce n’est pas sujet de ce billet.

Personnellement j’ai passé beaucoup de temps sur mes premiers projets à faire la structure maven et les poms. Et à l’époque un exemple m’aurait été bien utile, c’est pourquoi j’ai décidé d’écrire ce billet.

Dans le cas présent, admettons que l’on souhaite créer un outils de blog relativement large, l’équivalent d’un wordpress (blog propulsant actuellement ce site mais le projet en question pourrait bien aboutir…) un cms donc. Le projet s’appellera 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 l’outil 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 n’aurons qu’a 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. mainproject On va maintenant creer un projet vide. Dans Eclipse : new project, général, project.

Ici on l’appelle 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 l’ear 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 l’outil de création de projet vide, mais changez l’emplacement 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.

J’ai pensé que des captures d’écran seraient plus clair qu’un long texte.

maven-ear-entities

Ici donc l’arborescence 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.

maven-services

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, : c’est à 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.

maven-war

Je n’ai 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 d’ordinateurs que j’affectionne particulièrement … pas vous ?

Vous l’avez vu chaque sous projet à son fichier pom.xml.

Le projet principal qui contient les autres : dreamisle-cms, a aussi son pom. Il s’agit pour maven du projet parent, il contient donc le pom principal, c’est 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 j’exclu parfois des librairies lors d’inclusion : c’est simplement pour éviter les redondances de librairie dans l’archive finale. En effet, lorsqu’on inclus une librairie via maven, on appelle le pom de celle-ci, donc si vous incluez une librairie qui inclue d’autre librairies que vous avez déjà vous allez vous retrouver avec des jars en double dans votre archives, autant dire que c’est pas génial. Conclusion quand vous faite un ear avec maven, regardez bien ce qu’il contient et adaptez votre pom, ça peut éviter des bétises.

Le pom principal que je vous invite à lire

( désolé c’est 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 l’ear : c’est lui qui contient les instructions de build pour maven, donc faites celui-ci avec une attention particulière. Lisez attentivement la partie build, j’y utilise un plugin qui permet de déplacer l’ear final vers le répertoire de déploiement de votre serveur d’application (ici jboss).

Le pom de l’ear

Il est important de respecter l’ordre d’appel 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 d’utiliser le plug in de génération de war de maven (ce n’est ni un jar ni un ear…).

Et voilà vous avez vos projets et vos poms, vous n’avez plus qu’à adapter à vos besoins ! Cette méthode à un autre avantage, vous pouvez n’inclure 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 d’origines, c’est très simple, il n’y a qu’à ajouter la dépendance, et maven vous récupérera la librairie tout seul.

J’espè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 d’entity avec la liste la home et les pages de gestion crud de celles-ci, création d’ejb préannotés avec interface et classe de l’ejb, créations de composant seam) en quelques cliques via des assistants (wizard) eclipse habituels.

Liens :

Le pom principal

Le pom de l’ear

Le pom du projet entities

Le pom du projet services

Le pom du war