Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
enseignement:tp:sw:jaxrs-jaxws [2012/10/10 11:08]
ecoquery
enseignement:tp:sw:jaxrs-jaxws [2012/10/10 15:43] (Version actuelle)
ecoquery
Ligne 1: Ligne 1:
 ====== Mise en place de services SOAP et REST ====== ====== 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 ===== ===== Service SOAP: Location =====
Ligne 6: Ligne 18:
 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: <code shell>hg clone https://forge.univ-lyon1.fr/hg/inf2018m-2012-tpbase</code> 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: <code shell>hg clone https://forge.univ-lyon1.fr/hg/inf2018m-2012-tpbase</code>
  
-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 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]]).+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 déployés:+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.   * 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.   * 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.   * 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é. 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. Créer un test soapUI pour votre service.
 +
 ===== Service REST: FilmInfos ===== ===== 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.