Rapport MIF17 du Projet MIF13-MIF17
Transcription
Rapport MIF17 du Projet MIF13-MIF17
M2 Informatique TI – Université Claude Bernard Lyon 1 Rapport CAHD du Projet Services Web-CAHD Conception et réalisation d’une application de consultation et vente de CD enrichie sémantiquement Par David CRESCENCE, Thiên Phúc DOAN, Sébastien FAURE et William VIVET-GROS 2011-2012 Sommaire Introduction ....................................................................................................... 3 I. Contraintes techniques imposées ................................................................ 4 II. Nos choix ..................................................................................................... 5 III. Présentation et pertinence des technologies et standards utilisés ........... 5 IV. Fonctionnalités mises en place ................................................................. 7 V. Fonctionnalités restant à développer ........................................................... 8 Précisions pour le lancement du projet Maven ................................................ 10 Conclusion........................................................................................................ 10 2 Introduction Dans le cadre du Master 2 Informatique de l’Université Lyon 1 spécialité Technologies de l’Information, pour les UE TIW5 et TI1, les étudiants ont pour objectif de concevoir et réaliser une application web de consultation et vente de CD enrichies sémantiquement. Le présent rapport a pour but de présenter le travail réalisé en termes de Conception d’Application Hétérogène Distribuée (TI1) durant le projet. Il présente nos choix, notre cheminement et nos réalisations dans ce domaine pour atteindre les objectifs définis dans le cahier des charges de l’application. 3 I. Contraintes techniques imposées Pour la mise en place de ce projet, un certain nombre de contraintes technologiques nous ont été imposées par le cahier des charges du projet. La partie Services Web (TIW5) faisant l’objet d’un rapport séparé, nous n’aborderons ici que les contraintes liées à la partie CAHD. Nous verrons par la suite que ces contraintes technologiques ne nous ont pas été imposées par hasard mais qu’elles présentent de nombreux avantages. Le but de cette partie du projet était de réaliser une version fonctionnelle de l’application métier côté entrepôt de CD. C’est le partie inférieure du schéma ci-dessus, à savoir les services CDWareHouseXYZ… Pour cela, les étudiants devaient mettre en pratique les technologies vues dans l’UE CAHD lors des différents travaux pratiques. Ainsi la programmation par composants devaient être employées et les différents composants déployés dans un serveur JBoss/OSGi. L’application devait exposer en front un service web de commande pour l’application principale développée précédemment pour la partie TIW5 du projet, mais aussi répondre aux requêtes du service qui centralise toutes les informations sur les livraisons de CD. Le back office traitant avec les fabricants. En interne, il fallait en plus gérer des contraintes sur les approvisionnements, les livraisons, la gestion des stocks et l’envoi direct de CD « rares ». 4 II. Nos choix Avant toute chose, pour comprendre certains de nos choix, il est nécessaire de présenter rapidement ce que nous avions fait précédemment dans la partie TIW5 du projet, cela ayant débouché sur l’application principale avec laquelle la nouvelle application pour les entrepôts va communiquer. L’application principale créée et fonctionnelle contient les fonctionnalités suivantes : L'utilisation des SPARQL endpoints pour enrichir les infos présentées à l'utilisateur ; L’interaction répartie avec le service bancaire ; Le processus de commande jusqu’à validation et paiement. Pour la partie CAHD en particulier, nous avions décidé de permettre la gestion de deux types d’entrepôts de CD : trois mettant en œuvre un stockage de données de type SQL (nous avons utilisé MySQL) et un mettant en œuvre un stockage de données de type XML. Cette partie comprend : La confirmation de la commande et son retrait des entrepôts qui se situe entre la validation de la commande et le paiement (partie service web) ; L’approvisionnement des quatre stocks avec une partie backoffice du site. III. Présentation et pertinence des technologies et standards utilisés Serveur JBOSS : JBoss Application Server est un serveur d’applications J2EE Libre entièrement écrit en Java, publié sous licence GNU LGPL. Parce que le logiciel est écrit en Java, Jboss Application Server peut être utilisé sur tout système d’exploitation fournissant une machine virtuelle Java (JVM). C’est un conteneur lourd qui supporte et peut mettre en œuvre la mise en place d’une architecture de type OSGI. OSGI : ce framework implémente un modèle de composants dynamique et complet, comblant un manque dans les environnements Java/VM traditionnels. Les applications et composants (se trouvant sous la forme de bundles pour le déploiement) peuvent être installés, arrêtés, démarrés, mis à jour et désinstallés de manière distante sans nécessiter de redémarrage ; la gestion des classes/paquetages Java est spécifiée de manière très détaillée. La gestion du cycle de vie est effectuée à travers une API en appliquant une politique de gestion des téléchargements distants. Le répertoire (registry) de services permet aux bundles de détecter l’addition de nouveaux services, ou la suppression de services et de s’y adapter 5 Le schéma ci-dessus représente l’architecture que nous avons mise en place pour ce projet. La mise en place de bundle futurs si la gestion de stocks venait à évoluer a ici été prévue. L’inclusion de bundle d’aiguillage est assez générique pour, notamment dans notre cas précis, gérer le greffage de bundle d’ajout/retrait de données de plusieurs sortes. Ici nous avions décidé de gérer les stocks de CD au format BD relationnelles et XML. On imagine pouvoir mettre en place dans des versions futures : La gestion d’autre format de base de données relationnelle comme Postgres, Oracle, DB2, … La gestion de bases au format RDF. Ces versions futures ne sont pas du tout loin de notre livrable actuel puisque nous gérons déjà MySQL et XML. Pour ce projet nous avons utilisé un serveur JBoss7 qui avait déjà été fourni lors du TP5. De même que le support OSGI qui est inclus à cette version de JBoss. Une base MySQL a aussi été utilisée sur nos machines en local. Pour les bundles web JBoss7 permet l’utilisation de Tomcat. IV. Fonctionnalités mises en place L’objet de la partie CAHD du projet de la conception d’une solution de consultation et de vente de CD était de développer des services permettant la gestion des entrepôts de CD, aussi bien leur approvisionnement que leur système de livraison. Tout d’abord pour l’approvisionnement. Nous avons mis en place plusieurs choses : Une page web back office permettant aux employés d’approvisionner les stocks de nos 4 entrepôts ; Un service d’aiguillage mettant en relation avec les services de chaque entrepôt ; Quatre services indépendants d’approvisionnement de CD pour chaque entrepôt. Chacun de ces services se traduisent par la mise en place de bundles OSGI. La page web fait appel au service d’aiguillage via sa servlet puis le service d’aiguillage relai ensuite à un des entrepôts. Il y a deux types d’entrepôts différents : les trois qui sont gérés avec MySQL, et celui géré avec un fichier XML. Mais tous opèrent par le même mode opératoire : si on ajoute un CD qui n’est pas dans la base de données, nous créons l’entrée dans la base ou si on ajoute un CD qui est déjà dans la base de données, nous incrémentons sa quantité (cela est vrai pour la version XML de la même manière que le SQL). Voici les noms symboliques de nos services pour l’approvisionnement : Bundle webapp pour le bundle web du back office ; service_aiguillage_ajout pour le bundle d’aiguillage ; service_addx, pour chacuns de nos bundles d’ajout de CD (x=1,2,3,4) avec : o 1 : base de donnée « stock1 » de notre serveur MySQL o 2 : base de donnée « stock2 » de notre serveur MySQL o 3 : base de donnée « stock3 » de notre serveur MySQL o 4 : fichier XML « base.xml » à la racine de la classe de service du module Maven « service_add4 » Ensuite pour la confirmation de la commande. Nous avons mis en place plusieurs composants : Une page web front office permettant le retrait des CD de la commande des stocks de nos 4 entrepôts ; Un service d’aiguillage mettant en relation avec les services de chaque entrepôt ; Quatre services indépendants de retrait de CD pour chaque entrepôt. Chacun de ces services se traduisent par la mise en place de bundles OSGI. La page web fait appel au service d’aiguillage via sa servlet puis le service d’aiguillage relai ensuite à un des entrepôts. Il y a deux types d’entrepôts différents : les trois qui sont gérés avec MySQL, et celui géré avec un fichier XML. Mais tous opèrent par le même mode opératoire : Si on retire un certain nombre de CD dans un entrepôt et que la quantité ne suffit pas (ou que l’album n’est pas dans la base), la commande n’est pas confirmée et on notifie l’utilisateur de quels CD ne sont pas disponibles dans l’entrepôt sélectionné ; Si la quantité est acceptable (au plus la quantité disponible dans l’entrepôt pour ces albums), l’utilisateur est notifié que la commande s’est déroulé avec succès. Si la quantité d’un album atteint zéro, l’entrée dans la base est supprimée (cela est vrai pour nos deux types d’entrepôts) Voici les noms symboliques de nos services pour le retrait des stocks : Bundle webapp1 pour le bundle web côté client ; service_aiguillage_retrait pour le bundle d’aiguillage ; service_removex, pour chacuns de nos bundles de retrait de CD des stocks (x=1,2,3,4) avec : o 1 : base de donnée « stock1 » de notre serveur MySQL o 2 : base de donnée « stock2 » de notre serveur MySQL o 3 : base de donnée « stock3 » de notre serveur MySQL o 4 : fichier XML « base.xml » à la racine de la classe de service du module Maven « service_add4 » V. Fonctionnalités restant à développer Le projet s’étant déroulé sur deux plages différentes du calendrier et portant sur deux parties (et technologies différentes) il a été difficile d’aboutir à une version finale. Ici, particulièrement pour la page web de confirmation de commande, la liaison avec la partie servicemix se fait par passage de paramètres en POST à notre page web. Cela aurait pu être fait d’une manière plus propre, mais considérant qu’effectivement dans la réalité ces deux pages seraient sur des serveurs différents, cela a aussi sa pertinence. 8 Toujours à propos de la confirmation de la commande, notre page de test (étant donné que nous ne vous rendons pas la partie servicemix) contient un formulaire permettant le retrait d’un seul CD (avec sa quantité associée). Ceci dit le tout est rapatrié dans une HashMap qui est prévu pour accueillir plusieurs CD. Un autre point est le choix de l’entrepôt dont sont obtenus les CD. Le mieux était de retirer d’un entrepôt au hasard, ceci dit pour des raisons pratiques (et de test) nous avons permis le choix de l’entrepôt cible. L’envoie de CD rares n’a ici pas été traité. Par manque de temps nous n’avons pas pu implémenter cette fonctionnalité. Ceci dit nous imaginons tout à fait un bundle service_retrait_rare venant se greffer à l’aiguilleur, celui-ci étant très générique. Ce service permettrait de gérer des CD rares indépendamment des stocks, passant d’un stock à un autre pour obtenir la quantité demandé de ce type de CD. Concrètement, il suffirait de gérer quatre connexions en attribut d’une classe ServiceRemoveRare (au lieu d’une seule par mimétisme avec nos classes ServiceRemove qui font le retrait). 9 Précisions pour le lancement du projet Maven Plusieurs précisions sont nécessaires afin de faire fonctionner ce projet sur une machine : Le chemin absolu du fichier XML dans les classes ServiceRetrait.java et ServiceAjout.java des modules Maven service_aiguillage_ajout et service_aiguillage_retrait doit être changé ; Un serveur MySQL (sur le port par défaut) doit être installé, avec un compte root sans mot de passe. Trois bases de données doivent être créées (stock1, stock2 et stock3) avec chacune une table albums(titre varchar, artiste varchar, quantite integer) ; Des bundles précompilés avec les deux contraintes ci-dessus sont déjà présents dans les dossiers target/ de chacun des modules maven ; Pour les deux bundles web les manifest.MF à utiliser sont dans les dossiers de génération des classes (webapp/target/webapp-1.0-SNAPSHOT/META-INF et webapp1/target/webapp1-1.0SNAPSHOT/META-INF). Il suffit de faire un maven install du projet racine et de compresser le contenu du dossier webapp-1.0-SNAPSHOT (la même chose pour webapp1-1.0-SNAPSHOT )et en remplaçant le manifest généré par maven (en ayant fait une copie préalable). Conclusion Ce projet a été très enrichissant pour nous car il nous a mis en situation réelle de projet en groupe de quatre. Le fait de travailler en parallèle avec le binôme chargé de la partie CAHD nous a amené à communiquer efficacement pour de meilleurs résultats. Certes ce ne fut pas évident puisque certaines technologies étaient nouvelles pour nous et notre emploi du temps plutôt chargé, mais nous avons finalement beaucoup appris sur ces technologies et la conception et réalisation d’une application web de taille conséquente. Alors que le déploiement de services web dans une architecture en bus de services ainsi que l’interrogation de services du web en SPARQL tels que MusicBrainz étaient au départ assez obscurs pour nous, nous sommes désormais plus familiers avec la mise en œuvre de ces processus et pensons en avoir saisi leurs enjeux. Aussi, ce projet nous a appris à nous répartir des rôles et tirer profit de différents outils de gestion de projets tout au long de celui-ci afin de profiter au mieux des capacités de chacun, ce qui n’est jamais aisé dans un groupe plutôt conséquent de quatre personnes. De plus, il nous a fallu mettre en place certaines techniques pour communiquer entre nous et être compris de tous, un des membres de l’équipe étant en plein apprentissage de la langue française. Enfin, nous regrettons de ne pas avoir atteint la totalité de nos objectifs mais sommes conscients que ce projet nous a tous fait progresser, c’est pourquoi nous pensons continuer le projet à titre personnel et arriver un jour à son terme, ce qui serait, pour nous, une réelle satisfaction. 10