![]() |
![]() |
Web services RESTDe $1Travaux pratiquesEtude et compréhension d'un web service RESTFUL en JEE6 : un serveur de bookmarks semblable à celui de delicious.comDans ce TP vous allez étudier un projet complet de web service REST, vous l'ouvrirez avec Eclipse, l'exécuterez, puis vous essaierez de comprendre sa conception. Ce projet a quelques particularités intéressantes... Utilisation d'un serveur web embarqué dans l'applicationLe projet utilise un serveur web (un container web dans le jargon) embarqué dans l'application. nul besoin de Tomcat, Glassfish, Jetty, JBoss ou autre serveur à installer ! Ce container web s'appelle Grizzly et on le retrouve comme "plugin" du serveur Glassfish v3 de Sun. Regardez en particulier le code de la classe bmserv/Server.java // definition de l'URL de base du serveur et du port a ecouter final String baseUri = "http://localhost:9998/"; // renseigne Grizzly sur l'emplacement des classes a deployer final Map<String, String> initParams = new HashMap<String, String>(); initParams.put("com.sun.jersey.config.property.packages", "bmserv.resources"); try { // Création du serveur embarqué // On deploie les ressource a baseURI, indique où sont les ressources (initParams) // et on retourne un SelectorThread, qui permettra d'enregistrer des listeners pour // afficher l'état du serveur SelectorThread threadSelector = GrizzlyWebContainerFactory.create(baseUri, initParams); ServerStateListener ssl = new ServerStateListener(); // Creation d'un listener pour suivre l'etat du serveur threadSelector.getController().addStateListener(ssl); // Enregistrement du listener ... Si vous regardez attentivement le main() qui se trouve dans Server.java et que vous suivez le fil du code, vous verrez qu'on associe aussi une console de commandes (un shell) au serveur, pour pouvoir l'arrêter, etc. Les modèles de données et leurs controlleursLes modèles (package bmserv.model)le projet consiste en un serveur de Bookmarks (favoris web). Un Bookmark est associé à un utilisateur, à son URI, il a une description etc... Voici le constructeur de la classe modele/Bookmarks.java public Bookmark(final String title, final String urlstr, final String descr, final String authid) { this.title = title; this.urlstr = urlstr; this.authid = authid; this.description = descr; this.id = createBmId(authid, urlstr); } De même, on retrouve une classe pour décrire un utilisateur (User.java) et une classe pour décrire un Tag (un mot-clé). La classe la plus importante est la classe Tagging.java qui décrit l'association d'un User, d'un Bookmark et d'un Tag. On peut avoir plusieurs Taggings pour décrire un seul Bookmarks ou pour associer plusieurs Tags à un Bookmark. Exemple (chaque ligne correspond à un tagging):
On se retrouve avec un modèle ressemblant à un modèle relationnel classique... Etudiez donc les classes des modèles. Pour le moment, ignorez les annotations de code commençant par "@"... Les contrôleurs (package bmserv.model.handlers)A chaque modèle on va associer une "façade" proposant des fonctionnalités pour les manipuler : creer un tag, chercher un tag, lister tous les tags etc... Exemple pour la création d'un Tagging : public class TaggingHandler { ... private static List<Tagging> taggings = new ArrayList<Tagging>(); ... public void createTagging(final String authorid, final String bmid, final String tagid){ GregorianCalendar dateGreg = new GregorianCalendar(); java.util.Date dateDate = dateGreg.getTime(); DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddTHH:mm:ss.SSSZ"); String datestr = dateFormat.format(dateDate); taggings.add(new Tagging(datestr, authorid, bmid, tagid)); ... } } Etudiez donc les différents contrôleurs de manière à avoir une vue d'ensemble.
|
Powered by MindTouch Deki Open Source Edition v.8.08 |