Ce site met a disposition le build journalier de la traduction francaise du Maven: The Definitive Guide
Consultez :
  • Les documents de reference sur le projet original
  • Les sources de la traduction fr sur GitHub
  • maven


    Chapitre 7. Un projet multimodule d'entreprise

    7.1. Introduction

    Dans ce chapitre, nous allons créer un projet multimodule à partir des exemples du Chapitre 6, Un projet multimodule et du Chapitre 5, Une simple application web. Nous ferons évoluer ces exemples en un projet utilisant les frameworks Spring et Hibernate pour créer deux applications : une application web et une application en ligne de commande. Ces deux applications permettront de lire le flux provenant du service Yahoo! Météo. Le code du projet simple-weather développé dans le Chapitre 4, Personnalisation d'un projet Maven sera donc combiné au code du projet simple-webapp du Chapitre 5, Une simple application web. Pour créer ce projet multimodule, nous allons explorer Maven et discuter des différentes manières de l'utiliser pour créer des projets modulaires encourageant la réutilisation.

    7.1.1. Télécharger les sources de ce chapitre

    Le projet multimodule développé dans cet exemple se compose des versions modifiées des projets développés dans le Chapitre 4, Personnalisation d'un projet Maven et le Chapitre 5, Une simple application web, sans utiliser le plugin Maven Archetype pour le générer. Nous recommandons de télécharger le code des exemples pour utiliser celui-ci comme code de référence lors de la lecture de ce chapitre. Sans ces exemples, vous ne serez pas capable de recréer la totalité du projet produit dans ce chapitre. Le projet contenant les exemples de ce chapitre peut être téléchargé à l'adresse suivante :

    http://www.sonatype.com/books/maven-book/mavenbook-examples-0.9-SNAPSHOT-project.zip

    Une fois téléchargée, décompressez l'archive dans n'importe quel répertoire et entrez dans le répertoire ch-multi-spring/. Vous trouverez alors dans celui-ci un sous-répertoire simple-parent/ qui contient le projet Maven multimodule que nous allons développer dans ce chapitre. Dans le répertoire de ce projet, vous trouverez un fichier pom.xml et cinq sous-modules : simple-model/, simple-persist/, simple-command/, simple-weather/ et simple-webapp/.

    7.1.2. Projet multimodule d'entreprise

    Présenter la complexité d'un projet d'entreprise d'envergure dépasse de loin la portée de ce livre. De tels projets sont souvent caractérisés par des problématiques bien spécifiques : bases de données multiples, intégration avec des systèmes externes, sous-projets divisés par départements... Ce genre de projets comporte en général plusieurs milliers de lignes de codes et peut impliquer des dizaines, voire des centaines, de développeurs. S'il est évident que nous ne traiterons pas d'un projet de ce type dans son intégralité dans ce livre, nous allons tout de même vous fournir un exemple assez complet pour appréhender la complexité d'une application d'entreprise. Enfin, en conclusion, au-delà de ce qui est présenté dans ce chapitre, nous explorerons quelques pistes pour rendre vos applications modulaires.

    Dans ce chapitre, nous allons étudier un projet Maven multimodule qui produira deux applications : un outil en ligne de commande et une application web ; chacune de ces applications permettra d'interroger le flux Yahoo! Météo. Ces deux applications conserveront les résultats des différentes requêtes dans une base de données embarquée et permettront de récupérer l'historique des prévisions météorologiques stockées dans celle-ci. Les deux applications réutiliseront le même code métier et partageront une bibliothèque de persistance. L'exemple de ce chapitre est construit sur la base du code du parseur développé dans le Chapitre 4, Personnalisation d'un projet Maven. Ce projet est divisé en cinq sous-modules, dont voici la présentation sur la Figure 7.1, « Relations entre les modules de l'application d'entreprise ».

    Relations entre les modules de l'application d'entreprise

    Figure 7.1. Relations entre les modules de l'application d'entreprise


    Sur la Figure 7.1, « Relations entre les modules de l'application d'entreprise », vous pouvez voir que projet simple-parent se compose de cinq sous-modules :

    simple-model

    Ce module définit un simple modèle d'objets correspondant aux données retournées par le flux Yahoo! Météo. Ce modèle contient les objets suivants : Weather, Condition, Atmosphere, Location, et Wind. Lorsque notre application parse le flux Yahoo! Météo, les parseurs définis dans le module simple-weather transforment le XML en une liste d'objets Weather qui sera ensuite utilisée dans les applications. Ce projet contient des objets du modèle annotés avec les annotations Hibernate3. Le module simple-persist utilise ces objets pour associer chacun d'entre eux à une table de la base de données.

    simple-weather

    Ce module contient toute la logique nécessaire pour récupérer des données du flux Yahoo! Météo et parser le XML obtenu. Ce XML est converti sous la forme d'objets du module simple-model. C'est pour cela que le module simple-weather doit dépendre du module simple-model. Enfin, simple-weather définit un service WeatherService qui est référencé par deux autres projets : simple-command et simple-webapp.

    simple-persist

    Ce module contient les DAOs (Data Access Objects) qui permettent d'enregistrer les objets Weather dans la base de données. Ces DAOs seront utilisés par les deux applications de ce projet multimodule. Ils permettront également de faire le lien avec les objets du modèle du module simple-model. Le module simple-persist a donc une dépendance directe au module simple-model et une dépendance vers le JAR contenant les Annotations Hibernate.

    simple-webapp

    L'application web contient deux contrôleurs Spring MVC qui utilisent le service WeatherService défini dans le module simple-weather et les DAOs provenant du module simple-persist. De plus, simple-webapp a une dépendance directe sur les modules simple-weather et simple-persist. Ce module dépend donc transitivement du module simple-model.

    simple-command

    Ce module contient une application en ligne de commande qui permet d'interroger le flux Yahoo! Météo. Ce projet contient une classe avec une méthode statique main() qui interagit avec le service WeatherService défini dans le module simple-weather et les DAOs du projet simple-persist. Le module simple-command a une dépendance directe sur les modules simple-weather et simple-persist et une dépendance transitive au module simple-model.

    Ce chapitre contient un exemple assez simple pour être décrit dans un livre et assez complexe pour justifier la création de cinq sous-modules. Notre exemple est organisé autour d'un modèle contenant cinq classes, une bibliothèque de persistance avec deux classes de service et une bibliothèque d'analyse grammaticale du flux météo contenant cinq ou six classes. Dans un cas réel, un projet peut avoir un modèle de plusieurs centaines de classes, plusieurs bibliothèques de persistance et des bibliothèques de services partagées. Bien que nous ayons essayé de garder un exemple suffisamment simple pour être compris rapidement, nous vous proposons un projet bien plus complexe que le projet multimodule du chapitre précédent. Vous pourriez être tentés de regarder rapidement les exemples dans ce chapitre et penser que Maven génère trop de complexité comparée à la taille du modèle d'objet. Bien que l'utilisation de Maven suggère un certain niveau de modularité, comprenez bien que nous avons volontairement compliqué ici nos exemples dans le but de montrer les fonctionnalités Maven dans le cas de projets multimodule.

    7.1.3. Technologies utilisées dans cet exemple

    L'exemple de ce chapitre implique un peu de technologies qui, même si elles sont populaires, ne sont pas directement liées à Maven. Ces technologies sont Spring et Hibernate. Spring est un conteneur IoC (Inversion of Control) accompagné par un ensemble de frameworks dont le but est de simplifier les interactions entre diverses bibliothèques J2EE. Utiliser Spring comme fondation pour le développement d'applications vous donne accès à un certain nombre d'abstractions très pratiques qui permettent, entre autres, de faciliter l'intégration des framework de persistance comme Hibernate, iBatis ou d'API d'entreprise comme JDBC, JNDI et JMS. La popularité de Spring n'a cessé de s'accroître ces dernières années, permettant d'offrir une solution alternative aux lourds standards proposés par Sun Microsystems. Quant à Hibernate, il s'agit d'un framework d'ORM (Object-Relational Mapping) très largement utilisé qui permet d'interagir avec une base de données comme s'il s'agissait d'une liste d'objets Java. Cet exemple se concentre sur la construction d'une application web simple et d'une application en ligne de commande qui utilisent Spring pour exposer un ensemble réutilisable de composants et Hibernate pour sauvegarder les données météo dans une base embarquée.

    Nous avons décidé d'inclure des références à ces frameworks pour montrer comment on construirait des projets en utilisant ces mêmes technologies conjointement à Maven. Bien que nous introduisions ces technologies, ne s'agissant pas des priorités de ce chapitre, elles ne seront pas présentées dans leur intégralité. Pour plus d'informations sur Spring, référez-vous au site officiel dont l'adresse est http://www.springframework.org/. De même, pour plus d'informations sur Hibernate, en particulier sur ses Annotations, référez-vous au site du projet http://www.hibernate.org. Ce chapitre utilise HSQLDB (Hyper-threaded Structured Query Language Database) comme base de données embarquée. Pour plus d'informations sur celle-ci consultez le site du projet http://hsqldb.org/.