Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
enseignement:sw:projet:2013 [2013/10/30 18:42]
ecoquery créée
enseignement:sw:projet:2013 [2013/10/31 16:44] (Version actuelle)
ecoquery [Déroulement]
Ligne 1: Ligne 1:
 ====== Projet TIW5 2013 ====== ====== 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 ===== ===== Scénarios =====
Ligne 14: Ligne 20:
     * //vinsdumondechezvous.com// est alors prévenu et la transaction est validée;     * //vinsdumondechezvous.com// est alors prévenu et la transaction est validée;
     * un message est envoyé au client avec une date de livraison     * un message est envoyé au client avec une date de livraison
-  * Une fois la livraison effectuée, le client la confirme sur le site Web+  * Une fois la livraison effectuée, elle est confirmée via un appel au service "livraison" 
 + 
 ==== Approvisionnement ==== ==== Approvisionnement ====
  
Ligne 28: Ligne 36:
 ==== Passage du temps ==== ==== Passage du temps ====
  
-Afin de pouvoir simuler le temps qui avance un service //tick// permet de faire "avancer" le temps d'une journée. Cet avancement aura des conséquences sur les approvisionnements et les confirmations de livraison.+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 ===== ===== Services fournis =====
  
-Les services et interfaces web de //rapidbank.com// et //mabanque.com// sont fournis dans {{:enseignement:sw:projet:tiw5-2012-fourni.zip|}}.+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. Cette archive contient des projets maven et peuvent être construits via ''mvn install'' à la racine de l'archive.
Ligne 38: Ligne 46:
 ==== MaBanque.com ==== ==== 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''+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 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 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.   * 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]].