Les deux révisions précédentes
Révision précédente
Prochaine révision
|
Révision précédente
|
enseignement:tp:sw:jaxrs-jaxws [2012/10/09 23:37] ecoquery [Service SOAP: Location] |
enseignement:tp:sw:jaxrs-jaxws [2012/10/10 15:43] (Version actuelle) ecoquery |
====== 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 ===== |
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. |
| |