====== Mise en place de services SOAP et REST ====== ===== Modalités ===== Ce TP est à rendre pour le **24/10/2012**, à raison d'un rendu par binôme.\\ URL de rendu SPIRAL: http://spiralconnect.univ-lyon1.fr/spiral/spiral.html#/activities/goto_folder/1825947 * Sauf problème particulier, conserver les binômes du TP2. * Le rendu sera constitué d'un fichier zip contenant le dépôt mercurial mis à jour avec vos contributions, avec en particulier: * le fichier xml du projet soapUI ''test-services-soapui-project.xml'' dans lequel on aura ajouté les tests des services développés * le projet ''services'' mis à jour avec les services supplémentaires à développer dans le TP. * un fichier README.txt contenant au moins les noms, prénoms et numéros d'étudiants du binôme. Toute autre information à transmettre aux enseignants (e.g. justifications de choix techniques) se fera de préférence dans ce fichier. ===== Service SOAP: Location ===== L'objectif de cette partie consiste à déployer un service SOAP de location de DVDs. Dans un premier temps on récupérera la dernière version des sources "énoncé" de TIW5 en clonant le dépôt de la forge: hg clone https://forge.univ-lyon1.fr/hg/inf2018m-2012-tpbase En plus d'une implémentation du modèle du [[enseignement:tp:sw:donnees|TP1]] et l'implémentation du service exemple du [[enseignement:tp:sw:clients|TP2]], le projet contient à présent un sous-projet ''services''. Ce projet est prévu pour être déployé sur JBoss 7.1((contrairement à service-exemple prévu pour être déployé sous Tomcat)) et s'appuie sur une datasource ''java:jboss/datasources/EtudiantDS''. Cette dernière doit être déployée dans le serveur en déployant le [[http://forge.univ-lyon1.fr/attachments/download/497/postgresql-9.2-1000.jdbc4.jar|driver postgresql]] et la description de la dite source ([[http://forge.univ-lyon1.fr/attachments/download/498/etudiant-ds.xml|etudiant-ds.xml]]). Le projet ''services'' contient deux exemples de services SOAP déployés: * HelloImpl: simple service //hello//, mais ayant la particularité d'utiliser une description WSDL préexistante. Le WSDL est également accessible après déploiement [[http://localhost:8080/services/HelloImplService?wsdl|ici]]. On peut remarquer l'influence du WSDL sur le nom des éléments dans les requêtes/réponses. * JPATestService: pas de WSDL préexistant, mais un service implémenté via un //Stateless bean// dans lequel on fait usage d'une transaction déclarée au niveau de la méthode (@TransactionAttribute). On peut également remarquer que l'EntityManagerFactory est injectée par le conteneur. * Hors fichier de persistance et ''web.xml''((d'ailleurs vide)), pas de fichier de configuration. Peu de dépendance maven aussi, les dépendances "runtime" étant fournies par le serveur d'application. * Le fichier ''test-services-soapui-project.xml'' contient une requête pour chacun de ces services. Mettre à jour le modèle pour y intégrer une notion d'exemplaire d'un film, qui peut être loué. Créer ensuite un service avec une opération de location, prenant en argument le titre et l'année du film à louer et qui renvoie le prix de la location et le numéro de l'exemplaire obtenu. Y ajouter une opération permettant de rendre un exemplaire emprunté. Créer un test soapUI pour votre service. ===== Service REST: FilmInfos ===== Similairement au cas SOAP, le projet ''services'' contient une implémentation exemple d'un service REST. La classe ''RestApplication'' est juste utilisée pour activer et configurer la gestion de jax-rs via RESTeasy, ce dernier étant fourni avec JBoss. La classe ''CoucouService'' implémente un service qui sera déployé via REST. Analyser les différentes annotations((attention: ''@Stateless'' n'a rien à voir avec REST, c'est juste la déclaration d'EJB, pour signaler que c'est faisable)) et comparer avec les requêtes REST de ''test-services-soapui-project.xml''. Reprendre la fonctionnalité du service exemple du [[enseignement:tp:sw:clients|TP2]] et en faire un service REST. On fera traitera les méthodes GET, PUT, POST et DELETE en essayant de rester au maximum fidèle à la sémantique de celles-ci. On pourra s'inspirer de code du service exemple, en faisant attention aux points suivants: * La fonctionnalité du service exemple ne correspond pas directement aux quatre méthodes HTTP citées précédement. * L'application service-exemple est une application utilisant des composants Spring. L'application ''services'' utilise une mécanique plus JEE, en particulier avec des composants EJB. Créer des tests soapUI pour vos services.