====== Projet Services Web 2014 ====== ===== Déroulement ===== Le projet est à réaliser en groupe correspondant aux groupes TI5 pour les étudiants du parcours TI. Deux groupes sont à constituer pour les étudiants TIWe (groupes R1 et R2). S'il n'apparait pas, vous devez saisir votre groupe dans la case [[http://tomusss.univ-lyon1.fr|tomuss]] correspondante (''groupe_projet''). Au 15/12/2014, 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 23/01/2015. 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. On incluera au dépôt Mercurial un script bash ''lancement.sh'' qui démarrera les différents serveurs (sauf servicemix et apache ODE) via maven. Le script effectuera également les déploiement servicemix et apache-ode par copie de fichier dans des répertoires indiqués par les variables d'environnement ''$SMIX_DEPLOY'' et ''$ODE_DEPLOY''. ===== Contexte ===== On souhaite développer une application (simplifiée) de vidéo à la demande (VOD). L'application se présente sous la forme d'un site web, affichant un catalogue de films. On peut voir quelques informations sur chaque film. Comme l'éditeur du site est paresseux, la plupart des informations sur un film sont en fait prise sur [[http://dbpedia.org/About|DBPedia]], via une requête SPARQL. Les films sont classés en 3 catégories: récents (moins de 3 ans), promotion et ordinaire. === Visionner un film === Chaque client dispose d'un compte de //tickets//. Les films récents comptent pour 3 tickets, les ordinaires pour 2 tickets et les films en promotion pour 1 ticket. Une fois un film choisi, un client peut cliquer sur un lien pour visionner le film. S'il dispose de suffisement de ticket, il est dirigé vers une URL qui lui est propre à laquelle il peut visionner le film((pour les besoin du projet, on pourra se contenter d'afficher une page web en lieu et place du flux video. Cette page pourra contenir (un lien vers) une bande annonce si l'info est disponible sur DBPedia)). Sinon un message s'affiche avec un lien vers la page de rechargement du compte. Dans tout les cas, l'utilisateur reçoit un mail avec une facture pour le visionnage du film. === Recharger son compte === Si son compte VOD n'est pas suffisamment approvisionné, un client peut le recharger via une page prévue à cet effet. Une fois un nombre de ticket choisi, 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é. Le site de VOD est alors prévenu et l'ajout de ticket au compte de l'utilisateur est validé. Si l'utilisateur avait des films en attente de visionnage, il reçoit un e-mail avec le lien pour visionner le film. === Gestion des films === Le gestionnaire du site de VOD souhaite pouvoir lister les films actuellement proposés, en ajouter, ainsi que changer leur catégorie. === Passage du temps === On considère qu'une URL pour le visionnage d'un film n'est valable que pendant 48h. Pour simuler le passage du temps un service //tick// permet de faire “avancer” virtuellement le temps d'une journée. Cet avancement pourra ainsi rendre invalide certaines URL de visionnage. ===== Utilitaires ===== ==== Serveur de mail ==== [[http://www.icegreen.com/greenmail/|GreenMail]] peut-être utilisé pour simuler un serveur de mail en local si vous ne voulez pas utiliser votre propre compte mail. Il dispose de facilités pour tester les envois/réceptions de mail. ==== 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). === Site de VOD === Implémenter une interface Web pour le site de VOD côté utilisateur (client). 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 * Lister (et rechercher) les films proposés et afficher une page pour un film avec des informations (issues de DBPedia). * Pouvoir demander à voir un film * Visionner un film (i.e. afficher une page web pour simuler une URL correspondant à un flux vidéo) * Ajout de ticket dans le compte du client, avec gestion du paiement via redirection vers //rapidbank.com// === Site d'administration === Implémenter une interface Web d'administration du site de VOD (listing, ajout, modification de films). Celle-ci devra tourner sur un serveur différent du serveur pour les clients du site de VOD. La communication entre les deux serveur se fera via des services. === Tick === Une page web permettra de consulter la date (virtuelle) courante et de faire avancer le temps d'une journée. ==== Services ==== Au delà des interfaces REST liées à l'utilisation des sites Web on implémentera les services suivants. === Site de VOD, côté client === * le service de mise à jour des informations sur les films qui sera utilisé par le site d'administration * le service décrit dans ''Paiement.wsdl''. * un service pour recevoir la mise à jour de la date (et rendre ainsi invalide certains URL de vidéos) === Processus d'obtention d'une URL pour une vidéo === Le processus demande de visionnage d'une vidéo (demande via le site Web, mise en attente en cas de nombre de tickets insuffisants, déblocage après approvisionnement, suppression de tickets, envoi de mails) sera géré via un processus BPEL. ==== 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 ne fera pas d'appel direct aux services depuis les serveurs d'application, mais on passera par des routes camel déployées dans servicemix. Cela permet de changer facilement (y compris à chaud) les adresses des services concrets, ainsi que d'implémenter à peu de frais des mockups. Le port 8080 sera réservé pour le déploiement du tomcat contenant le moteur apache ODE