Вы находитесь на странице: 1из 23

ASR Architecture de Services en Rseaux 2010 2011

Rapport du Projet ASR :

Application Client Android / Serveur JEE pour la recherche de ressources pdagogiques et de comptences

Ralis Par : MIMI Hamza TCHIBOZO KEKELE Kanut

Encadrs par : Sbastien LERICHE Claire LECOCQ Sam ROTTENBERG


Page 0

Projet ASR 2010/2011 -- UbiLearning

Table des matires


Introduction (cadre du rapport) .........................................................................................2 I. Prsentation du projet ralis .........................................................................................2
I.1 Contexte du projet Ubi-Learning (technologies utilises et environnement de travail) ...... 2 I.2 Travail demand et tapes du projet. ......................................................................... 5

II. Modlisation UML et dtails de limplmentation .........................................................5


II.1 Modlisation UML ........................................................................................................... 5
II.1.a Diagramme des cas dutilisation. ................................................................................................. 5 II.1.b Diagramme de squence. ............................................................................................................ 6 II.1.c Architecture gnrale. ................................................................................................................. 7

II.2 Implmentation effectue ct serveur (JEE) ................................................................... 8


II.2.a Liste exhaustive et description des fichiers sources crs. ......................................................... 8 II.2.b Interfaces web cres (JSP & Servlets) ...................................................................................... 11

II.3 Implmentation effectue ct client (Android) ............................................................ 13


II.3.a Liste exhaustive et description des layout crs. ................................................................ 13 II.3.b Liste exhaustive et description des classes java cres. ........................................................... 15

III. Perspectives ................................................................................................................ 16 Conclusion ....................................................................................................................... 20 Liste des figures ............................................................................................................... 20 Webographie ................................................................................................................... 21 Annexe (Ordonnancement et gestion de ptojet : diagramme de GANTT) ......................... 22

Projet ASR 2010/2011 -- UbiLearning

Page 1

L'informatique ubiquitaire dsigne le fait que linformatique soit omniprsente, favorisant ainsi l'accs aux informations partout et tout moment. Une des importantes applications de linformatique ubiquitaire, est lapprentissage. Toute personne pourra donc, nimporte quel moment et o quil soit, avoir rapidement accs des ressources pdagogiques, ce qui faciliterait ainsi son apprentissage.

Introduction (cadre du rapport)

Par la suite, nous vous prsenterons succinctement dans un premier temps ltat (technologies utilises, environnement de travail, codes dj raliss) du projet Ubi-learning, et le travail qui nous a t imparti. Nous vous parlerons ensuite de la modlisation UML que nous avons eu raliser, et des dtails de notre implmentation. Nous prsenterons par la suite les tests effectus pour valider notre application, et finalement, nous parlerons de quelques perspectives damlioration du projet.

Cest dans ce cadre que sinscrit notre projet de fin dtudes, validant les connaissances et comptences acquises au cours de la Voie dApprofondissement ASR (Rf : ASR9 CSC 5005). Il sagit de concevoir, raliser et tester une application mobile (plateforme Android), complte de recherche de ressources pdagogiques suivant certains critres (domaine, nom de la ressource, mots-cls, ). Notre application est lune des briques logicielles dun projet plus vaste, Ubi-learning , qui a pour ambition de dvelopper et de tester un systme (logiciel + matriel) de e-learning, qui sera accessible nimporte o et nimporte quel moment.

I. Prsentation du projet ralis


I.1 Contexte du projet environnement de travail)

Le projet Ubi-learning a pour ambition de dvelopper et tester un systme (logiciel + matriel) de e-learning dploy dans le cadre du Challenge Projet d'Entreprendre des deux coles Tlcom SudParis et Tlcom cole de Management. Ce projet est actuellement en cours de ralisation par un ancien tudiant d'ASR, actuellement ingnieur de recherche dans lquipe Informatique de Tlcom SudParis. Cet ingnieur avait dj mis sur place une certaine infrastructure pour le projet. Pour faciliter donc lintgration de notre application qui est une brique du projet Ubi-learning, il nous a fallu prendre en main les technologies utilises et lenvironnement de travail. Le serveur dapplication utilis est GlassFish, la partie cliente est ralise sous Android, la partie serveur est un EJB, et une base de donnes MySQL ainsi que des services Google sont utiliss pour persister les donnes. LIDE (Integrated Development Environment) utilis est "Eclipse" avec des plugins pour Android et pour GlassFish. Projet ASR 2010/2011 -- UbiLearning Page 2

Ubi-Learning

(technologies

utilises

et

EJB : la technique EJB (Enterprise JavaBeans) est une architecture de composants logiciels ct serveur pour la plateforme de dveloppement JEE. Cette architecture propose un cadre pour crer des composants distribus (cest--dire dploys sur des serveurs distants) crit en langage de programmation Java hbergs au sein d'un serveur applicatif (dans notre application, il sagit de GlassFish) permettant de reprsenter des donnes (EJB dit entit), de proposer des services avec ou sans conservation d'tat entre les appels (EJB dit session), ou encore d'accomplir des tches de manire asynchrone (EJB dit message). Les composants EJB servent dintermdiaire entre les applications de type fentres, ou application Web, et la base de donnes. Nous avons travaill, dans le cadre de notre projet, avec la version 3.0 des EJB, qui avec son principe dannotation java permet de spcifier toute la configuration et les proprits transactionnelles de lobjet, de telle manire que le fichier de code source de lEJB se suffit lui-mme. Dans notre application, nous avons eu reprsenter les donnes par les EJB entits, et nous avons cr un EJB bean session stateless pour pouvoir offrir au client un service permettant la gestion et la recherche de ressources pdagogiques. REST : la communication entre le client Android et le serveur EJB sest faite en utilisant le style architectural REST (Representational State Transfer). REST se pose en alternative SOAP (Service Oriented Architecture Protocol), permettant la ralisation darchitecture oriente services utilisant des services Web destins la communication entre machines. Dans cette architecture, un composant lit ou modifie une ressource (chose nommable pouvant voluer avec le temps) en utilisant une reprsentation de cette ressource ; une reprsentation tant une squence doctets, ventuellement accompagne de mtadonnes (squence de nom/valeur). Un composant est un acteur, il est reli dautres composants et des ressources par des canaux, qui permettent des interactions sans tats. Lapplication de cette architecture au Web se comprend sur quelques principes simples : * URI (URN, URC ou URL) trs important doit suffire pour nommer et identifier une ressource ; * HTTP fournit toutes les oprations ncessaires (essentiellement : GET, POST, PUT et DELETE) ; * chaque opration est auto-suffisante (il ny a pas dtat) ; * utilisation Projet ASR 2010/2011 -- UbiLearning Page 3

Android : Android est un systme dexploitation open source, fond sur un noyau Linux, pour smartphones, PDA et terminaux mobiles. Linterface spcifique quil comporte, est dveloppe en java, les programmes tant excuts via un interprteur JIT (Just-In-Time). Android a t conu pour intgrer au mieux des applications existantes de Google comme le service de courrier Gmail, ou celui de cartographie, Google Maps ou encore Google Agenda, Google Talk, Youtube. Un accent particulier est mis sur la golocalisation avec Google Latitude et la mto correspondant la ville la plus proche disponible sur le menu principal. Plusieurs de ces services ont t utiliss dans le projet Ubi-Learning.

Les technologies et styles architecturaux intervenant dans le cadre du projet sont : Android, EJB, REST et JSON. Donnons un bref aperu sur chacune de ces terminologies :

JSON : cest le format qui a t choisi pour empaqueter les donnes circulant entre client Android et serveur EJB. JSON (JavaScript Object Notation), bas en partie sur le langage de programmation JavaScript, est un lger format dchange de donnes, facile de comprhension, de lecture et dcriture par les hommes ; et facile danalyse et de gnration par les machines. Cest un format de texte qui est un langage entirement indpendant, mais qui utilise les conventions familires aux programmeurs des langages de la famille de C (C, C++, C#, Java, JavaScript, Perl, Python, etc). JSON ne comprend que deux lments structurels : Une collection (ensemble non ordonn) de paires nom/valeur qui est un JSON Object (similaire dans dautres langages struct, hash table, keyed list, associative array, ) Une liste ordonne de valeurs qui est un JSON Array(similaire dans beaucoup de langages Array, Vector, List, Sequence)

des standards permettant de lier les ressources entre elles, et dassurer ainsi la navigation dans lapplication REST, HTML ou XML sont souvent utiliss, mais dautres formats peuvent tre galement utiliss, comme JSON qui est le format que nous avons utilis dans notre projet.

Un JSON Object commence par " {" et termine par "}" ; contient un ensemble de paires nom/valeur spares par des virgules, et dfinies comme suit : "nom" : "valeur". Un objet peut contenir dautres objets ou dautres JSON Array. Un exemple dobjet JSON, modlisant une personne, est le suivant : {"person" : { "id" : 0, "firstname" : "Stevy", "lastname" : "STHG", "age" : 21, "address" : "Maisel " } }

Il importe que de noter que dans notre application, nous navons pas eu crire nous-mmes les donnes au format JSON, mais cela est fait automatiquement par le serveur dapplication, en utilisant des annotations (voir parties II.2 et II.3). Projet ASR 2010/2011 -- UbiLearning Page 4

Un JSON Array est une liste ordonne de valeurs (string, number, object, array, true, false, null), mise entre [ ] , et spares par des virgules. Ci-aprs un exemple de JSON Array : ["test", 0, {"person" : {}}, ["test1", "test2"], null]

Pour accs avoir une information, une ressource, il faut soit connatre ladresse exacte de la ressource pour y accder directement, soit faire des recherches si lemplacement de ce dont on a besoin reste inconnu. Dans le premier cas, cet--dire quand ladresse exacte est connue, on na videmment pas besoin de crer une nouvelle application pour le faire . Ce qui est utile, cest de pouvoir retrouver une ressource qans connatre son adresse, ou mme sans savoir exactement ce que lon recherche ; cest toute lutilit des moteurs de recherche. Une des briques logicielles importantes du projet Ubi-learning est donc la cration dune application qui permettrait deffectuer des recherches pour pouvoir avoir accs aux ressources pdagogiques, ou dautres informations importantes. Ce fut lobjectif de notre projet qui a t de concevoir, raliser et tester une application mobile (plateforme Android), complte de recherche de ressources pdagogiques suivant certains critres (domaine, nom de la ressource, mots-cls, ), les technologies utilises et lenvironnement de travail tant conformes ceux du projet Ubi-learning. Lapplication ct client devra donc tre une application mobile dveloppe sous Android ; et du ct serveur, le service sera offert par un composant EJB. La communication entre le client et le serveur se fait via le web service REST, et les donnes transmises sont empaquetes dans le format JSON. Pour pouvoir mener bien un travail, il est primordial de se fixer des tapes de projet. Pour la ralisation de ce projet, il nous a fallu donc : *Prendre en main de l'environnement de dveloppement, et les technologies rentrant en jeu (Android, EJB, REST, JSON) *Concevoir et raliser des tests de l'application ct serveur *Concevoir et raliser des tests de l'application ct client en coopration avec l'ingnieur de recherche *Intgrer notre application dans le projet Ubi-Learning en coopration avec l'ingnieur de recherche Le droulement de ces tapes ne sest pas pass de faon linaire. Aprs la prise en main de lenvironnement de dveloppement, nous avons eu travailler en parallle sur les trois autres tapes. Les cts serveur et client taient dvelopps paralllement, le tout dans une optique dintgration, car nous avons eu travailler sous SVN pour faciliter la programmation en parallle et lintgration dans le projet Ubi-Learning. I.2 Travail demand et tapes du projet.

II. Modlisation UML et dtails de limplmentation


II.1 Modlisation UML II.1.a Diagramme des cas dutilisation.

Bien quassez simpliste, nous avons tenu raliser le diagramme des cas dutilisation de cette brique du projet Ubi-Learning quest la ntre (le diagramme de cas dutilisation du projet Ubi-Learning devant naturellement tre plus complexe). Dans notre systme, nous avons 2 acteurs : le client Android qui est un utilisateur final Projet ASR 2010/2011 -- UbiLearning

Page 5

de lapplication, et ladministrateur serveur qui se charge de la consistance de la base de donnes (ajout, mise jour et suppression de ressources pdagogiques). Ci-aprs le diagramme des cas dutilisation ralis (figure II.1):

Nous avons tabli le diagramme de squence pour effectuer une recherche de ressources pdagogiques. Le client se connecte dabord, sil ne ltait pas encore, il entre ses donnes, les envoie au serveur, qui lui retourne les rsultats trouvs. Si le client le dsire, il peut visualiser les dtails relatifs une ressource. Ci-aprs le diagramme des cas dutilisation ralis (figure II.2):

II.1.b Diagramme de squence.

Figure II.1 : Diagramme des cas dutilisation

Projet ASR 2010/2011 -- UbiLearning

Page 6

Nous vous prsentons ci-dessous (figure II.3) larchitecture gnrale de notre application, qui rsume tout ce que nous avons prsent dans la partie I (en cas dune incomprhension quelconque, se rfrer la partie I):

II.1.c Architecture gnrale.

Figure II.2 : Diagramme de squence

Projet ASR 2010/2011 -- UbiLearning

Figure II.3 : Architecture gnrale

Page 7

eu.itsudparis.ubilearning.server.resourcessearch.entity: contenant les beans entits gnres, partir dEclipse (en utilisant JPA Tools ), savoir : Domaine.java, DomaineHasRessourcePedagogique.java, DomaineHasRessourcePedagogiquePK.java, et RessourcePedagogique.java. Il importe de noter ce niveau que la classe DomaineHasRessourcePedagogiquePK.java (annotation @Embeddable ) a t gnre parce que la table DomaineHasRessourcePedagogique a comme cl primaire la composition de deux cls trangres (cl primaire de Domaine et cl primaire de RessourcePedagogique . Un autre point important faire remarquer ce niveau, est quaprs la gnration des beans entits, nous avons ajout dans ces classes des annotations JAXB (Java Architecture for XML Binding) ci-aprs : @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD)

La base de donnes ainsi que les donnes utilises dans ce projet nous ont t fournies. La mise en place de cette base de donnes avait fait lobjet dun projet ralis par deux anciens tudiants de Tlcom SudParis (leur rapport est fourni avec le ntre pour une quelconque utilisation future). Pour raliser notre application, nous nous sommes intresss trois tables de cette base de donnes : Domaine , RessourcePedagogique et DomaineHasRessourcePedagogique (qui permet de lier les deux tables prcdentes en indiquant quel domaine appartient une ressource pdagogique donne) ; pour plus dinformations relatives la constitution de ces tables, veuillez bien vous rfrer au rapport crit par ceux qui ont conu la base de donnes. Les mots cls utiliss pour effectuer les recherches sont donc des champs de ces tables, savoir : domaine , codeRessource , codeCours , nomRessource , niveau , langue et url . Les fichiers sources du serveur EJB ont donc t rpartis en 2 packages :

Comme nous lavons dj notifi prcdemment, la partie serveur est un composant EJB dploy dans un serveur GlassFish et connect la base de donnes MySQL. Nous avons donc t amens dvelopper des beans sessions qui ralisent les 4 oprations de base pour la persistance des donnes, rsumes dans lacronyme informatique anglais CRUD (Create, Read (ou Retrieve), Update, Delete (ou Destroy)). Limplmentation mtier qui nous intresse le plus dans cette application est celle de la recherche (traduit par Retrieve dans lacronyme CRUD). Pour pouvoir rendre ais une quelconque comprhension, voire une amlioration de nos fichiers crs, nous vous donnerons ci-aprs une liste exhaustive et une description des fichiers source crs, ainsi quune prsentation des pages web cres. II.2 Implmentation effectue ct serveur (JEE) II.2.a Liste exhaustive et description des fichiers sources crs.

Projet ASR 2010/2011 -- UbiLearning

Mettre lannotation @XmlRootElement , au niveau des beans gnres, est trs importante pour lempaquetage des donnes au format JSON (format utilis dans notre application pour transporter des donnes entre client Android et serveur EJB). Loubli de cette annotation engendrera des erreurs au niveau de lempaquetage des Page 8

eu.itsudparis.ubilearning.server.resourcessearch.service: ce package contient deux classes DataSentToClient.java et ResourcesService.java. DataSentToClient.java : cette classe contient deux attributs, lun de type RessourcePedagogique et lautre un String domaine . Cette classe a t cre parce que domaine est un mot-cl de recherche, mais dans la table RessourcePedagogique ne figure aucun champ domaine pouvant indiquer le domaine auquel appartient la ressource pdagogique. Cette classe sert donc empaqueter la ressource pdagogique et le domaine auquel celle-ci appartient.

donnes an format JSON (nous avons eu oublier cette annotation, et quelques heures ont t perdues chercher lerreur ; prtez-y donc attention ).

Une fois, ces beans entits gnres et modifies (ajout des annotations JAXB), nous avons eu crer une bean session pour limplmentation du service.

@Path("resources") /*chemin d'accs la ressource*/ @Stateless public class ResourcesService {

ResourcesService.java : cette bean session stateless contient toutes les mthodes mtier ncessaires pour interagir avec la base de donnes. Utilisant REST (style architectural pour les Web Services) pour pouvoir faire communiquer le client et le serveur, nous navons pas eu besoin, comme il en est de coutume dans une implmentation EJB, de crer une interface (locale ou distante) pour cette bean session. Nous vous montrons ci-aprs un morceau du code de la classe ResourcesService.java (mthode searchResources()):

@PersistenceContext(unitName = "UbiLearningServerPU") EntityManager em; @POST /*accs par commande HttpPost*/ @Path("search") /*chemin d'accs la mthode searchResources*/ @Consumes("application/x-www-form-urlencoded") /*format de donnes consomm*/ @Produces("application/json")/*format de donnes produit (ici JSON)*/ /*Mthode permettant d'effectuer une recherche partir dun mot cl*/ public List<RessourcePedagogique> searchResources ( /*@FormParam("...") permet de rcuprer des donnes dun formulaire*/ @FormParam("domaine") String nomdudomaine, @FormParam("codeRessource") String codeRessource, @FormParam("nomRessource") String nomRessource, @FormParam("codeCours") String codeCours, @FormParam("langue") String langue, @FormParam("niveau") String niveau ){ /*Mise en forme des mots-cls pour pouvoir rechercher toute apparition de ces mots-cls*/

Projet ASR 2010/2011 -- UbiLearning

Page 9

nomdudomaine = (nomdudomaine == null || nomdudomaine.equals(""))? ("%") : ("%"+nomdudomaine+"%"); codeRessource = (codeRessource == null || codeRessource.equals(""))? ("%") : ("%"+codeRessource+"%"); codeCours = (codeCours == null || codeCours.equals(""))? ("%") : ("%"+codeCours+"%"); /*description = (description == null || description.equals(""))? ("%") : ("%"+description+"%");*/ langue = (langue == null || langue.equals(""))? ("%") : ("%"+langue+"%"); niveau = (niveau == null || niveau.equals(""))? ("%") : ("%"+niveau+"%"); nomRessource = (nomRessource == null || nomRessource.equals(""))? ("%") : ("%"+nomRessource+"%"); /*Cration et excution de la requte*/ /*On prend aussi en compte la notion de "domaine_pere" (voir classe "Domaine"), c'est--dire que si un utilisateur fait une recherche sur "domaine='Informatique'", on affichera les ressources ayant comme domaine "Algorithmique" car le domaine pre de "Algorithmique" est "Informatique"*/ String textQuery = "SELECT DISTINCT r " + "FROM RessourcePedagogique AS r, DomainesHasRessourcespedagogique AS dhr, Domaine AS d " + "WHERE (d.nomdudomaine LIKE '" + nomdudomaine + "' " + "OR d.domaine_pere LIKE '" + nomdudomaine + "') " + "AND r.codeRessource LIKE '" + codeRessource + "' " + "AND dhr.id.codeRessource = r.codeRessource " + "AND dhr.id.nomdudomaine = d.nomdudomaine " + "AND r.codeCours LIKE '" + codeCours + "' " + "AND r.langue LIKE '" + langue + "' " + "AND r.nomRessource LIKE '" + nomRessource + "' " + "ORDER BY d.nomdudomaine, r.codeRessource, r.codeCours, r.langue, r.nomRessource"; try { Query q = em.createQuery(textQuery); return (List<RessourcePedagogique>) q.getResultList(); } catch (EJBException e) { return null; } } /*Fin de la mthode searchResources*/ /*Implmentation des autres mthodes*/ }/*Fin de la classe ResourcesService.java*/

Projet ASR 2010/2011 -- UbiLearning

Figure II.4 : Morceau de code de lEJB bean session ResourcesService.java

Page 10

Le morceau de code prcdent permet de voir les annotations que nous avons utilises pour rendre accessible, au client Android, cette classe mtier. En effet, pour pouvoir accder cette ressource et excuter la mthode searchResources dfinie ci-haut, le client partir dun formulaire (contenant les champs : domaine, codeRessource, nomRessource, langue, niveau), doit excuter une requte HttpPost sur url ayant cette forme une http://<serverName>/<serverApplicationName>/<pathClass>/<pathMethod> avec pathClass le nom donn dans lannotation @Path("pathClass") lie la classe (dans lexemple prcdent, pathClass=resources ) ; et pathMethod est le nom donn dans lannotation @Path("pathMethod") lie la mthode ( dans lexemple prcdent, pathMethod=search . Concrtement, si le client et le serveur se trouvent sur une mme machine, lurl serait dans lexemple prcdent : http://localhost:8080/UbiLearningServer/resources/search . La rponse envoye au client est donc de type String, et reste au client de rcuprer le contenu cette rponse en se basant sur le format sous lequel les donnes ont t empaquetes (dans notre application, nous avons utilis le format JSON ; a aurait pu tre du HTML ou du XML).

Les 2 packages prcdents constituent la partie serveur EJB implmente. Nous avons rajout ct serveur une partie web qui permettra aux enseignants ou un administrateur, dajouter des ressources pdagogiques, de les mettre jour ou de les supprimer ; et aussi de faire des recherches de ressources pdagogiques ct serveur (sans passer par le client Android). Comme dit prcdemment, nous avons cr des interfaces web pour permettre la gestion des ressources pdagogiques (ajout, mise jour, suppression), et aussi les recherches de ressources ct serveur. Laccs, partir des pages web, au bean session ResourcesService.java se fait ici via RMI. II.2.b Interfaces web cres (JSP & Servlets)

Il importe de rappeler ce niveau que notre application est une brique du projet UbiLearning, un projet plus vaste actuellement en cours de ralisation par un ancien tudiant dASR (actuellement Ingnieur de recherche dans lquipe Informatique de Tlcom Sudparis). Pour faciliter donc lintgration de notre application dans le projet UbiLearning, nous avons t amens le long du projet nous conformer aux implmentations dj ralises dans le cadre de ce projet. Les pages web que nous avons cres, sont donc inspires de ce qui a t ralis actuellement. Ces pages web sont de simples pages JSP utilisant par moment des servlets pour pouvoir raliser certains traitements. Ces pages nont donc aucun design particulier prsent, mais nous esprons quune fois toutes les interfaces ralises, lIngnieur de recherche dveloppant le projet UbiLearning crera un fichier CSS pour pouvoir donner un bel aperu ces pages web. Projet ASR 2010/2011 -- UbiLearning Page 11

resource_index.jsp : cette page est la page daccueil pour la gestion de ressources pdagogiques. Sur cette page, il y a de simples liens pour pouvoir se rendre sur les pages grant lajout, la mise jour ou la recherche de ressources pdagogiques.

Nous avons cr les pages web suivantes :

resource_found_list.jsp : cette page est accessible aprs redirection de la servlet SearchResource.java . Les mots-cls de recherche sont donc rcuprs, et la recherche y est effectue en utilisant des scriptlets. Une fois les rsultats rcuprs, ils sont affichs le plus simplement possible dans une table. resource_add.jsp : cette page permet dajouter la base de donnes une ressource pdagogique (codeRessource, nomRessource, codeCours, description, langue, niveau, url) et aussi de spcifier le domaine auquel ce domaine appartient travers la table DomaineHasRessourcePedagogique . La servlet grant lajout est AddResource.java (dcrite ci-aprs). resource_delete.jsp : cette page permet de supprimer une ressource pdagogique.

resource_search.jsp : cette page contient un formulaire qui permet de recueillir les mots-cls permettant deffectuer des recherches de ressources pdagogiques. Une fois les mots-cls saisis, la servlet SearchResource.java (dcrite ci-aprs) rcupre les valeurs, puis les retransmet la page resource_found_list .jsp travers lurl.

resource_view_update.jsp : cette page permet de voir, mais aussi de pouvoir mettre jour, une ressource pdagogique. Le code de la ressource (cl primaire) ne peut pas tre modifi. Si un administrateur dsire changer le code dune ressource, il faudra supprimer cette dernire et en crer une autre. Les servlets cres pour grer ces pages, places dans le package eu.itsudparis.ubilearning.server.resourcessearch.servlet, sont les suivantes :

AddResource.java : cette page rcupre les donnes saisies sur la page resource_add.jsp , excute la requte dajout, et renvoie derreur en cas de problme, sinon redirige vers une page affichant toutes les ressources. UpdateResource.java : cette classe rcupre les donnes envoyes de la page resource_view_update.jsp , effectue la mise jour, puis redirige vers la page resource_found_list.jsp qui affichera la liste de toutes les ressources pdagogiques. DeleteResource.java : cette classe rcupre le code de la ressource effacer, lefface puis redirige vers l puis redirige vers la page resource_found_list.jsp qui affichera la liste de toutes les ressources pdagogiques. Projet ASR 2010/2011 -- UbiLearning Page 12 SearchResource.java : cette classe rcupre les donnes saisies sur la page resource_search.jsp et redirige vers la page resource_found_list.jsp pour laffichage.

Lapplication cliente Android fournit une interface de recherche permettant de faire des recherches de ressources pdagogiques selon le domaine, le nom de la ressource, le code de la ressource, le code du cours, la langue ou le niveau de la ressource. Par la suite, nous vous donnerons une prsentation dtaille de tous les layouts et de toutes les classes que nous avons eu crer. II.3 Implmentation effectue ct client (Android) Les layouts servent pour le design des interfaces utilisateurs. Ils sont reprsents sous forme de fichiers XML, ou peuvent tre directement crs dans le code. Pour grer la recherche et laffichage des rsultats, nous avons cr 4 layouts : II.3.a Liste exhaustive et description des layout crs.

resource_search_layout.xml : ce layout (dont la vue est montre ci-aprs) dfinit linterface de recherche.

resource_found_list_layout.xml : ce layout contient principalement une ListView qui permet dafficher dynamiquement les rsultats de la recherche. La manire dont les items de la ListView sont affichs, est dfinie dans le layout resources_found_list_item.xml . resources_found_list_item.xml : ce layout permet de dfinir comment sera affich chaque item de la ListView . Dans notre application, nous naffichons quun Projet ASR 2010/2011 -- UbiLearning

Figure II.5 : Interface de recherche (Android)

Page 13

nombre limit dinformations savoir : le nom de la ressource, le code du cours et lurl de la ressource. Ci-aprs une capture montrant les rsultats dune recherche ("ASR" rentr comme mot-cl pour le champ "codeRessource") :

resource_view_layout.xml : lutilisateur pourra obtenir des informations compltes sur un rsultat donn de la recherche. Ce layout resource_view_layout.xml permet de dfinir cette vue. Ci-aprs, nous vous prsentons une capture des dtails dun rsultat de recherche (mot-cl : ASR dans le champ codeRessource , et slection du 4me rsultat :

Figure II.6 : Capture des rsultats dune recherche (mot-cl : "ASR" dans le champ "codeRessource")

Projet ASR 2010/2011 -- UbiLearning

Page 14

Figure II.7 : Capture des dtails dun rsultat de recherche (mot-cl : "ASR" dans le champ "codeRessource" & slection du 4me rsultat) Nous avons cr 4 classes java (activits) pour la gestion du traitement de la recherche : 3 classes (ResourcesSearch.java, ResourcesFoundList.java, ResourcesFoundView.java) dans le package "eu.itsudparis.ubilearning.android" ; et une classe (ResourceAdapter.java) dans le package "eu.itsudparis.ubilearning.android.adapter". II.3.b Liste exhaustive et description des classes java cres.

ResourcesFoundList.java : cette classe instancie la vue resources_found_list_layout , rcupre les paramtres qui lui ont t transmis, et ensuite lance un thread qui excute la recherche, et attend les rsultats. Il importe de rappeler ce niveau que la communication entre le client Android et le serveur EJB, se fait en utilisant REST (Representational State Transfer). Le style architectural REST a t dcrit dans la partie I.1, et pour plus de documentation, vous pouvez vous rfrer la webographie donn la fin de ce rapport. Nous avions aussi notifi dans la partie II.2.a, que pour utiliser une ressource se trouvant sur le serveur, le client REST effectue une requte HttpPost sur lurl o se trouve cette requte. La Projet ASR 2010/2011 -- UbiLearning Page 15

ResourcesSearch.java : cette classe instancie la vue resources_search_layout , et ne fait que rcuprer les donnes du formulaire de recherche, et lance la sous-activit ResourcesFoundList laquelle elle transmet les donnes du formulaire (intent.putExtra(,)).

classe RestClient.java a t cre dans le package "eu.itsudparis.ubilearning.android.util" ; il suffit donc dexcuter sa mthode de "public String executePostRequest(String path, prototype List<NameValuePair> nameValuePairs)" o path dsigne lurl de la ressource voulue, et nameValuePairs les donnes de la requte sous forme de paires nom/valeur . Une fois les rsultats de la requte obtenue, sous forme de String, on dsassemble, sous forme de List<NameValuePair> , les donnes reues, empaquetes par le serveur sous format JSON (ces donnes sont empaquetes ct serveur grce lannotation @Produces("application/json") - voir le morceau de code source prsente la partie II.2.a Figure II.1) !!! Une fois que ces donnes sont rcupres, on les affiche dynamiquement dans la ListView grce ladaptateur dfini par la classe ResourceAdapter.java. ResourcesFoundView.java : cette classe instancie la vue resource_view_layout.xml , rcupre le code de la ressource afficher, effectue une requte comme le fait la classe prcdente, rcupre et affiche les dtails de la ressource. ResourceAdapter.java : cette classe, tendant la classe ArrayAdapter<JSONObject>, est trs importante pour laffichage dynamique des rsultats de la recherche. Pour plus dinformations sur son code, veuillez vous rfrer la documentation Android (donne dans la webographie), ou au code source de notre application. Un couteur est plac sur la ListView de telle manire que quand on clique sur un de ses items, que la classe ResourcesFoundView intervienne pour pouvoir afficher les dtails de cet item.

III. Perspectives

Lapplication, telle quelle nous a t demande, a t ralise compltement. Toutefois, nous avons jug ici de faire un point sur ce qui mrite dtre fait pour une vritable utilisation de notre application. En effet, les donnes (de la base de donnes de connaissances qui nous a t remise) ne sont du tout pas compltes et consistantes. Un travail en amont mrite donc dtre effectu, pour pouvoir enregistrer des donnes compltes et consistantes dans cette base donnes. Dun autre ct, les pages web ralises peuvent tre mieux crites. Dans notre application qui se conformait aux manires de programmer dj mises en place, le paradigme MVC (Model View Controller) na pas t utilis pour implmenter la partie Web au niveau du serveur : les pages JSP contiennent du traitement (appel des services EJB, ). Pour une approche plus rutilisable, il serait intressant de reprendre limplmentation du tiers web en utilisant le paradigme MVC. A ce propos, nous recommandons au dveloppeur ventuel de cette partir web dutiliser les frameworks JSF (Java Server Faces) ou Struts (une prfrence particulire personnelle tant accorde au framework JSF). La partie client Android et le serveur EJB qui faisaient lobjet de notre projet ont t totalement raliss, et nont pas besoin de retouches. Cependant, comme dans notre application, nous navons pas cr une interface pour lEJB bean session, nous Projet ASR 2010/2011 -- UbiLearning Page 16

prsentons ci-aprs (figure ) une interface regroupant les mthodes implmentes dans la classe RessourcesSearch.java du package eu.itsudparis.ubilearning.server.resourcessearch.service . Nous avons jug utile de prsenter une interface dans ce rapport, pour pouvoir faciliter lutilisation des services implments par un client web (dans le cas o la partie web aurait tt reprise selon notre prcdente proposition). /** * Session Bean implementation class RessourcesSearchService */ @Path("resources") @Stateless public class ResourcesService {

@POST @Path("new") @Consumes("application/x-www-form-urlencoded") @Produces("text/html") /* Mthode permettant d'ajouter une ressource */ public String addResource( @FormParam("domaine") String domaine, @FormParam("codeRessource") String codeRessource, @FormParam("codeCours") String codeCours, @FormParam("description") String description, @FormParam("langue") String langue, @FormParam("niveau") String niveau, @FormParam("nomRessource") String nomRessource, @FormParam("url") String url ); @POST @Path("update") @Consumes("application/x-www-form-urlencoded") @Produces("text/html") /* Mthode permettant d'ajouter une ressource */ public String updateResource ( @FormParam("domaine") String domaine, @FormParam("codeRessource") String codeRessource, @FormParam("codeCours") String codeCours, @FormParam("description") String description, @FormParam("langue") String langue, @FormParam("niveau") String niveau,

Projet ASR 2010/2011 -- UbiLearning

Page 17

);

@Path("delete/{ressource}") @GET @Consumes("text/plain") @Produces("text/html") /* Mthode permettant de supprimer une ressource */ public String deleteResource(@PathParam("codeRessource")String codeRessource); @Path("getall") @POST @Consumes("application/x-www-form-urlencoded") @Produces("application/json") /*Rcupration de toutes les ressources pdagogiques existantes*/ public List<RessourcePedagogique> getListResources() throws NoResultException ;

@FormParam("nomRessource") String nomRessource, @FormParam("url") String url

@Path("getOne") @POST @Consumes("application/x-www-form-urlencoded") @Produces("application/json") /*Recherche d'une ressource partir de son codeRessource (suppos connu)*/ public DataSentToClient searchAResource ( @FormParam("codeRessource") String codeRessource) throws NoResultException, WebApplicationException ; @SuppressWarnings("unchecked") @Path("search") @POST @Consumes("application/x-www-form-urlencoded") @Produces("application/json") /*Recherche de ressources suivant un mot cl (un de ses attibuts: codeRessource, codeCours, ...)*/ public List<RessourcePedagogique> searchResources ( @FormParam("domaine") String nomdudomaine, @FormParam("codeRessource") String codeRessource, @FormParam("nomRessource") String nomRessource, @FormParam("codeCours") String codeCours, @FormParam("langue") String langue, @FormParam("niveau") String niveau ); Projet ASR 2010/2011 -- UbiLearning

Page 18

@Path("getlistdomains") @POST @Consumes("application/x-www-form-urlencoded") @Produces("application/json") /*Rcupration de toutes les ressources pdagogiques existantes*/ public String getListDomains() throws NoResultException;

/*Rcupration du nom du domaine auquel appartient la ressource*/ public String getDomainOfResource(String codeRessource);

Figure II.8 : Interface de lEJB bean session ResourcesServise.java

Projet ASR 2010/2011 -- UbiLearning

Page 19

Nous nous sommes particulirement investis dans ce projet, cause de son caractre utile. En effet, lapplication Ubi-Learning (dont dautres briques logicielles sont encore en cours de dveloppement par un ingnieur de recherche dans lquipe informatique de Tlcom SudParis) sera probablement, dans un proche avenir, utilis par les tudiants de TMSP (Tlcom et Management SudParis). Ce projet nous a permis dapprofondir nos connaissances en JEE (spcifiquement larchitecture de composants logiciels ct serveur, EJB), dapprendre la programmation mobile sous Android, et de dcouvrir dautres importantes technologies comme le style architectural REST et le format JSON. Il importe de noter que ce rapport ne contient pas spcifiquement tous les dtails, et a t rdig conjointement la prsentation powerpoint faite. Si certains points de ce rapport vous ont t, ou vous sont peut-tre obscurs, veuillez-vous rfrer la prsentation powerpoint qui accompagne ce rapport.

Conclusion

Liste des figures


Figure II.1 : Diagramme des cas dutilisation.p6 Figure II.2 : Diagramme de squencep7 Figure II.4 : Architecture gnrale..p7 Figure II.4 : Morceau de code de lEJB bean session ResourcesService.java....p10 Figure II.5 : Interface de recherche (Android).p13 Figure II.6 : Capture des rsultats dune recherche (mot-cl : "ASR" dans le champ "codeRessource")p14 Figure II.7 : Capture des dtails dun rsultat de recherche (mot-cl : "ASR" dans le champ "codeRessource" & slection du 4me rsultat)p15 Figure II.8 : Interface de lEJB bean session ResourcesServise.java p19 Figure A.1 : Diagramme de GANTT.p22

Projet ASR 2010/2011 -- UbiLearning

Page 20

Webographie
Android http://www.android.com/ : site officiel dAndroid http://developer.android.com/index.html: site pour les dveloppeurs ; toute la documentation, tous les tlchargements des derniers SDKs, les liens pour pouvoir publier les applications, en un mot tout ce quil faut pour le dveloppeur http://forum.frandroid.com/: forum franais facilitant la rsolution des problmes rencontrs lors du dveloppement http://www.anddev.org/: des tutoriels intressants JSON http://www.xul.fr/ajax-format-json.html tutoriel de JSON (format simple et universel de fichier d'change de donnes) http://fr.wikipedia.org/wiki/JavaScript_Object_Notation wikipdia http://www.json.org/ site complet de json, donnant des liens vers d'autres pages http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/JSONArray.html API REST http://fr.wikipedia.org/wiki/Representational_State_Transfer wikipdia http://www.clever-age.com/veille/clever-link/soap-vs.-rest-choisir-la-bonnearchitecture-web-services.html SOAP vs REST EJB http://cours.it-sudparis.eu/moodle/course/view.php?id=42 (voir la partie "Component Middlewares" Cours & TPs) JPA http://www.jpox.org/docs/1_2/jpa/annotations.html http://www.jmdoudoux.fr/java/dej/chap043.htm#jpa http://deptinfo.unice.fr/~grin/mescours/minfo/modpersobj/supports/jpa2-1-6.pdf

Projet ASR 2010/2011 -- UbiLearning

Page 21

Nous avons ralis une reprsentation graphique de lordonnancement du projet ralis. Le projet a dmarr le 11/10/2010, et a pris fin le 26/01/2011. La charge totale de travail personnel effectu est estime : 186h 36min 49s 12tierces . Ci-aprs le diagramme de GANTT ralis :

Pour faciliter lintgration de notre application dans le projet UbiLearning, et pour faciliter le dveloppement de notre application, nous avons t amens travailler sous SVN (Subversion, systme de versionnage). Une branche stable du projet existant nous a t cre, et nous avons dvelopp notre application sur cette branche. Une fois lapplication termine et teste avec succs, lintgration dans le tronc (trunk, qui est la version actuelle du projet) a t facile.

Annexe (Ordonnancement et gestion de projet : diagramme de GANTT)

Figure A.1 : Diagramme de GANTT

Projet ASR 2010/2011 -- UbiLearning

Page 22

Вам также может понравиться