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 TP1 et l'implémentation du service exemple du TP2, le projet contient à présent un sous-projet services. Ce projet est prévu pour être déployé sur JBoss 7.11) 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 driver postgresql et la description de la dite source (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 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.xml2), 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 annotations3) et comparer avec les requêtes REST de test-services-soapui-project.xml.

Reprendre la fonctionnalité du service exemple du 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.

1)
contrairement à service-exemple prévu pour être déployé sous Tomcat
2)
d'ailleurs vide
3)
attention: @Stateless n'a rien à voir avec REST, c'est juste la déclaration d'EJB, pour signaler que c'est faisable