====== Projet TIW5 2013 ====== ===== Déroulement ===== Le projet est à réaliser en groupe correspondant aux groupes TI5. Les étudiants n'ayant pas de groupe doivent envoyer un mail à [[emmanuel.coquery@univ-lyon1.fr]] La date de rendu du projet est fixée au 01/12/2013, 23h59. On mettra en place un projet forge (différent des projets des précédents TPs). On mettra dans ce projet, en plus des sources hébergés dans le dépôt, un rapport au format pdf de 10 pages maximum. Ce rapport contiendra en particulier la liste des étudiants composant le groupe et une explication des décisions de conception. ===== Scénarios ===== ==== Commande de vins ==== On considère un site de ventes de vins en ligne "Les vins du monde chez vous" (//vinsdumondechezvous.com//). Ce site permet de consulter son catalogue de vins et de procéder à une commande. Le scénario de déroulement d'une commande est le suivant: * Un client créée et rempli un panier en naviguant sur le site web * Lorsqu'il est satisfait, il effectue une commande * Cette commande n'est validée que lorsque l'utilisateur a payé. Pour cela: * il est redirigé vers le site d'une banque (//rapidbank.com//) sur lequel il saisi son numéro de carte et son cryptogramme visuel; * après vérification, son compte qui est hébergé dans un autre établissement (//mabanque.com//) est débité; * //vinsdumondechezvous.com// est alors prévenu et la transaction est validée; * un message est envoyé au client avec une date de livraison * Une fois la livraison effectuée, elle est confirmée via un appel au service "livraison" ==== Approvisionnement ==== Il se peut qu'un certain vin soit en rupture de stock: si on s'en aperçoit à la création de la commande, cette dernière ne peut pas être effectuée. Si c'est à la confirmation de la commande, une demande d'approvisionnement est effectuée et la date de livraison est modifiée en fonction des délais d'approvisionnement. Un approvisionnement est une commande d'un certain nombre de bouteilles d'un vin particulier chez un fournisseur. Le fonctionnement de l'approvisionnement d'un vin est le suivant: * A l'arrivée d'une demande d'approvisionnement, on vérifie si un approvisionnement est déjà en cours. Dans ce cas, la quantité de bouteilles est augmentée((peu réaliste, mais bon ...)). Sinon un nouveau processus d'approvisionnement est démarré. * Le délai d'approvisionnement dépend du vin choisi. * L'approvisionnement consiste à ajouter le bon nombre de bouteilles à la date de fin (déterminée par la date de demande d'approvisionnement et le délai) ==== Passage du temps ==== Afin de pouvoir simuler le temps qui avance un service //tick// permet de faire "avancer" virtuellement le temps d'une journée. Cet avancement aura des conséquences sur les approvisionnements et les confirmations de livraison. ===== Services fournis ===== Les services et interfaces web de //rapidbank.com// et //mabanque.com// sont fournis dans {{:enseignement:sw:projet:tiw5-2013-fourni.zip|}} Cette archive contient des projets maven et peuvent être construits via ''mvn install'' à la racine de l'archive. ==== MaBanque.com ==== Le site de //mabanque.com// est simulé par un serveur qui démarre sur ''localhost:8082''. Il peut être démarré via ''java -jar mabanque.com/target/mabanque.com-2012.0-jar-with-dependencies.jar''((-help pour les options)). * Il fourni une interface web http://localhost:8082/admin qui permet de gérer les comptes hébergés * Il fourni un service web destiné à être utilisé par //rapidbank.com// et permettant de débiter le compte d'un client * Il conserve ses données en mémoire. Ces données peuvent être sauvée dans un fichier ''mabanque.xml'' et être ainsi rechargées au prochain démarrage. ==== RapidBank.com ==== Le site //rapidbank.com// est simulé par un serveur qui démarre sur ''localhost:8083''. Il peut être démarré via ''java -jar rapidbank.com/target/rapidbank.com-2013.0-jar-with-dependencies.jar''((-help pour les options)). * Il fourni une interface de saisie d'un numéro de carte et d'un cryptogramme http://localhost:8083/?cmdid=cmd-32&valeur=3.5 * cmdid est le numéro d'une commande * valeur est le montant de la transaction * En cas de réussite de la transaction, le service ''Paiement'' est invoqué (par défaut à l'emplacement http://localhost:8081/services/paiement). * Le WSDL de ce service est disponible dans le zip fourni: ''rapidbank.com/src/main/resources/Paiement.wsdl'' ==== PaiementMockup ==== L'application //PaiementMockup// permet de mettre en place un faux service ''Paiement'' qui affiche simplment une ligne de log lors de la réception d'un paiement. Elle peut être démarrée via ''java -jar paiement-mockup/target/paiement-mockup-2013.0-jar-with-dependencies.jar'' Il est possible de tester ces 3 services en les lançant tous, puis en se connectant sur les deux interfaces utilisateur http://localhost:8082/admin et http://localhost:8083/?cmdid=cmd-32&valeur=3.5 ===== Travail demandé ===== ==== Interfaces (sites) Web ==== Il est demandé de respecter les principes de l'architecture REST((essentiellement utilisation correcte des verbes HTTP et aspects //stateless// côté serveur)) pour l'implémentation des sites Web. Le choix des technologies pour la gestion côté client est laissé libre (de la page HTML générée côté serveur (attention à bien gérer la négociation de contenu en REST) à l'utilisation d'un framework MVC en JS). === VinsDuMondeChezVous.com === Implémenter une interface web pour le site de vente de vins en ligne. Chaque client dispose d'un login et d'un mot de passe. Le site dispose des pages suivantes: * Création de compte client. * Connexion/déconnexion; ne doit doit pas avoir d'impact direct côté serveur (pas de session), mais l'identité du client doit être vérifiée pour chaque opération nécessitant une authentification * Liste des vins et page d'information pour chaque vin * Possibilité d'ajout d'une quantité de bouteilles dans un panier, le panier étant vu comme une ressource REST. * Gestion du panier: * modification du contenu * validation (<-> operation ''commande'') * paiement (qui déclenche un certains nombre d'actions, cf scénarios ci-dessus) * Consultation d'un tableau de messages * Une page permettant de consulter l'état des stocks de bouteilles. === FournisseurDeVin.com === Cette interface permettra de consulter les demandes d'approvisionnement en cours et terminées. === Tick === Une page web permettra de consulter la date (virtuelle) courante et de faire avancer le temps d'une journée. ==== Services ==== === VinsDuMondeChezVous.com === Au delà des services REST liés à l'utilisation du site Web, on exposera le service ''livraison'' et le service de mise à jour des informations sur les vins. Remarque: l'ajout de messages pour un client pourra se faire via un POST sur la ressource REST associée. On implémentera également les services suivants: * le service décrit dans ''Paiement.wsdl''. * récupération des bouteilles en attente d'approvisionnement pour une commande donnée * mise à jour d'une date de livraison pour une commande === FournisseurDeVin.com === On implémentera: * Un service permettant d'effectuer une demande d'approvisionnement. Ce service renverra la date d'approvisionnement prévue. * Un service mettant à jour le stock de bouteilles en fonction des approvionnement arrivés à échéance. Ce service utilisera le service de mise à jour des informations sur les vins de VinsDuMondeChezVous.com pour effectuer la mise à jour. === Tick === On implémentera un service permettant d'incrémenter la date courante et de consulter la date courante. L'incrémentation de la date déclenchera (via des appels de services) la validation des livraisons de commandes ainsi que la mise à jour du stock de bouteilles. ==== Mise en oeuvre et intégration ==== Chaque "domaine" vivra sur sa propre instance de tomcat, avec des numéros de port différents (e.g. [[http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/run-mojo.html|configuration de tomcat7:run]]). Il ne devront pas partager de données directement (i.e. utilisation de schéma ou de bases de données différentes). On utilisera de préférence des bases de données embarquées comme [[http://db.apache.org/derby/|derby]] ou [[http://www.h2database.com/html/main.html|H2]], éventuellement purement en mémoire. On pourra remplir ces bases de données au démarrage des serveurs. On pourra s'inspirer de [[enseignement:tp:sw:handlers-jaxrs|ce TP]] pour la mise en place de services REST. On ne fera pas d'appel direct aux services depuis les serveurs d'application, mais on passera par des routes camel qui se chargeront d'appeler les services hébergés sur les autres serveurs. Cela permet de changer facilement (y compris à chaud) les adresses des services concrets, ainsi que d'implémenter à peu de frais des mockups. Les routes seront déployées via camel:run comme dans le [[enseignement:tp:sw:servicemix:2013|TP Camel]].