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ée1). 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 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.jar2).

  • 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.jar3).

  • 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 REST4) 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. 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 derby ou H2, éventuellement purement en mémoire. On pourra remplir ces bases de données au démarrage des serveurs.

On pourra s'inspirer de 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 TP Camel.

1)
peu réaliste, mais bon …
2) , 3)
-help pour les options
4)
essentiellement utilisation correcte des verbes HTTP et aspects stateless côté serveur