Skip to content

Latest commit

 

History

History
48 lines (41 loc) · 9.17 KB

J-XMCDA.adoc

File metadata and controls

48 lines (41 loc) · 9.17 KB

J-XMCDA

Objectif

Permettre la publication et l’invocation de services web XMCDA (spécialisés en aide multicritère à la décision, MCDA) grâce à une bibliothèque simple d’emploi, fournir des outils divers pour faciliter leur usage. La connaissance de l’aide multicritère à la décision n’est pas requise.

Contexte

Une série de services web ouverts permet d’utiliser les méthodes d’aide multicritère à la décision. Ils reposent sur le format XMCDA et sur le logiciel Diviz, qui permet l’invocation des services sans devoir programmer. L’utilisateur doit cependant fabriquer à la main les fichiers XML d’entrée (ou convertir du CSV), et plus généralement il n’existe pas d’intégration des outils dans un logiciel très simple d’emploi. En outre, la structure repose sur un serveur central, ce qui entraine des couts de maintenance élevés. Ce projet permettra de déployer des services web facilement, sur des architectures distinctes, et visera à faciliter à terme l’exploitation de ces services web.

Le format d’encodage actuellement utilisé pour XMCDA est XMCDAv2 (ci-après : X2). Tous les services web XMCDA acceptent en entrée du X2 et sortent du X2. L’inconvénient de cette approche est que les services web sont mal décrits par le schéma. À l’opposé, le schéma xmcda-modular a été proposé, qui ne doit pas être utilisé pour décrire un service web directement, mais bien pour générer des schémas qui servent à décrire des services web. Ainsi, on pourrait conserver la compatibilité entre services, mais leur donner une spécificité. Votre mission est (entre autres) d’assurer la compatibilité de ces deux approches, et l’invocation automatique de services webs dans la mesure du possible. On repartira du projet XM-GUI, qui définit des objets pour manipuler les principaux concepts MCDA.

Fonctions demandées

Diviz

Un binôme se familiarise avec l’usage de Diviz, et le présente aux autres. Il faut suivre un tutoriel avec un cas d’usage non trivial ; télécharger les données six real cars et les utiliser sur un problème. Écrire un rapport avec ce qui a été et les problèmes rencontrés. (1)

Alts

Objet Alternative (id: int, name: String) ; un objet pour représenter un rangement d’alternatives avec ex-æquo (association de chaque alternative à son rang). Conseil : les représenter par un DAG où la relation parent enfant est la relation « est moins bonne que » (suit dans le classement). Voir bibliothèque Guava. Ou par une liste de liste (liste d’alternatives ex-æquo). Encodage et décodage de Alternative en JSON, et utiliser le format de {PrefLib} pour la représentation textuelle d’un rangement avec ex-æquo (encodage et décodage). (1)

Crits

Objet Criterion (id et name) ; un objet Evaluations pour représenter les évaluations d’un ensemble d’alternatives, chacune sur une série de critère. Voir exemple six real cars. Conseil : utiliser une Table de Guava. Représentation JSON d’un critère, et d’un objet évaluations en CSV et JSON. (1)

ServiceDescr

Objet WebServiceDescription : un ensemble de paires d’id (string) et de type (un type au sens XML). Les types sont ceux qui peuvent servir de type de base dans le schéma xmcda-modular, plus un type spécial représentant le type de base X2. Ce dernier nous servira de type par défaut, car il est très général. Encodage et décodage de l’objet WebServiceDescription en JSON. (1)

BasicServlets

des servlets qui associent des objets de base à un identifiant d’un problème. getAlternative(id pbl, id alt): Alternative. getCriterion(id pbl, id crit): Criterion. getEvaluations(id pbl) (renvoie toutes les évaluations connues pour ce problème). addAlternative(id pbl, id alt), addCriterion(id pbl, id crit), setEvaluation(id pbl, id alt, id crit, real eval). (1)

BasicClient

Implémenter un client qui permet, avec un GUI rudimentaire ou en ligne de commande, l’édition de ces données de base. (1)

ObjectsXML

Encoder / décoder vos objets du modèle (Alternative, Criterion, ensemble d’alternatives, ensemble de critères, AlternativeTree, Evaluations) en XML : au format X2 et au format xmcda-modular. (Utiliser les bibilothèques JAXB associées.) Les XML fournis au format X2 se conforment au schéma X2. (1)

GenSchema

Étant donné un objet WebServiceDescription, classe SchemaGenerator qui retourne un schéma XSD correspondant réutilisant les types de xmcda-modular. (1)

ExtBasicServlets

Étendre servlets existants concernant vos objets de base, pour renvoyer à la demande du XML ou JSON en plus des éventuels autres formats déjà implémentés. Transformer en REST. Cookie permet de mémoriser un id prbl, il est utilisé si l’id pbl n’est pas fourni. (1)

Online

Faire tourner le serveur en ligne grâce au service d’IBM. (1)

SetDB1

Implémenter des entités JPA et les méthodes permettant d’écrire et de lire depuis la BD alternatives, critères, évaluations, AlternativeTree. (1)

UseDB

Modifier les servlets pour qu’ils écrivent dans et lisent la BD. (1)

GatherServlet

Servlet Gather(url) qui télécharge des données exemples et crée un problème associé (par exemple les données six real cars). Un deuxième appel avec les mêmes données ne change rien. (Mais même url ≠ même données.) Cette routine est appelée dès le lancement du serveur sur les données six real cars. (1)

GenX2Input

Étant donné une url de description d’un service web XMCDA (par exemple rankAlternativesValues, ref ci-dessous), le programme génère une liste de tags attendus par le service correspondant ; et une liste de tags renvoyés par le service. Créer une architecture générique qui permet de générer une instance au format X2 correspondant à la liste de tags attendue en entrée. Cela doit fonctionner pour le moment pour les objets que vous savez déjà sérialiser (alternative, critère, …, et les ensembles associés), et être généralisable en fournissant d’autres sérialiseurs. (1,5)

ReadX2Output

Créer une architecture générique permettant de lire (et donc déserialiser) les résultats d’un service web XMCDA au format X2. Le programme associe le résultat à un id problème fourni au préalable. (1)

X2GW

Servlet GetX2(url descr, id pbl). Le serveur crée au vol, si possible étant donné les données du problème d’id correspondante, une instance X2 correspondant au descripteur du service, et intègre les résultats au problème donné, ou renvoie l’erreur à l’appelant. (0,5)

ClientGW

Étendre votre client de manière à ce qu’il permette, après avoir édité des données, d’appeler un service web XMCDA. Le client a (dans un fichier de paramètres livré avec le client) une liste d’urls de descripteurs de services web XMCDA qui fonctionnent avec votre passerelle. Lui fournir suffisamment de fonctionnalités pour assurer l’appel de plusieurs services web X2, au besoin en améliorant le serveur également. (Vous ne devez pas vous occuper de l’aspect persistence, laissé à la fonction suivante.) (1,5)

XMGW

Servlet XM-rankAlternativesValues(Contents). Contents représente une description complète d’un problème (non nécessairement stocké au préalable dans votre serveur), au format XM, conforme au schéma généré par SchemaGenerator (cf fonction GenSchema) pour des entrées correspondantes au service rankAlternativesValues. Le servlet décode le XM, encode du X2, appelle le service (via GetX2), récupère une réponse au format X2, décode, encode en XM, et renvoie un XML au format XM conforme au schéma généré pour la sortie du service à l’utilisateur. (1)

Lib

Isoler la partie bibliothèque du reste du code. La publier comme un projet Maven indépendant (suffixer le nom du projet de -lib) et faire dépendre le reste du code de cette bibliothèque. Isoler la partie client du reste du code, publier comme un projet indépendant (ProjectName-client). Publier la partie serveur comme un projet indépendant (ProjectName). (1,5)

SetDB2

Implémenter des entités JPA et les méthodes permettant d’écrire et de lire depuis la BD pour le reste de votre modèle. (1)

SOAP

Transformer certains servlets pour en faire des services SOAP. (1)

SOAPClient

Transformer les clients pour en faire des clients SOAP. (1)

Suppléments

  • Envoi message via JMS quand réponse est prête.

  • Projets avec (certaines) données partagées entre plusieurs utilisateurs.

  • Permettre à chaque décideur de s’identifier pour entrer ses données (avec pwd ou sans, décidé par l’administrateur).

  • Import csv / excel (via WS existant éventuellement).

Références