Skip to content

Comment récupérer le projet et le faire fonctionner ?

JoannVetter edited this page Jul 20, 2021 · 17 revisions

Mise en garde

Ce tutoriel fonctionne sous Ubuntu et plus largement sous Linux, je ne garantis pas le fonctionnement sur d'autres systèmes d'exploitations. Je ne détaillerai pas les installations des différents softwares nécessaires car des tutoriels existent à ces sujets.

Récupérer les fichiers

Il faut tout d'abord faire un clone grâce à la commande : git clone --recurse-submodules (elle permet de copier en même temps les fichiers du submodule vollt).

Packages à installer

Un certain nombre d'installations est nécessaire, il faut installer Eclipse for Java EE developpers. Il faut aussi installer java 11 ainsi que le jdk associé. Il faut aussi installer Tomcat 9, nécessaire à la mise en place du serveur. PostgreSQL sera nécessaire (on peut sans doute utiliser MySQL ou autre mais ce tuto utilisera les commandes de Postgre).

Une fois tout ces packages installés, vous-êtes prêt à configurer votre machine pour utiliser le projet.

Le serveur

Nous allons utiliser un serveur Apache Tomcat pour faire fonctionner l'application. Pour la configuration, il faudra en particulier regarder les fichiers contenus dans src/main/webapps. La configuration est déjà prévue pour les tables que j'ai essayé, mais si vous voulez changer de table il faudra adapter le fichier FICHIER_TAP.xml en conséquence (se baser sur le modèle de ce qui a déjà été fait, ça se comprend assez bien). Il faut aussi ensuite créer ce serveur dans Eclipse. Pour ce faire, il faut aller dans File -> New -> Other -> Server -> Sélctionner Tomcat v9.0 server avec Apache Tomcat v9.0 comme Runtime environment. Une fois le serveur crée, il faut ouvrir la perspective serveur depuis Window -> Show View -> Servers. D'ici, vous pourrez double cliquer sur le serveur pour voir apparaître une fenêtre de configuration. Ici, il faudra s'assurer que Tomcat admin port est à 8008, et mettre le port HTTP/1.1 à 8081. Il faudra aussi regarder en haut à gauche dans "General information" que le configuration path est le bon, à savoir

⚠️ ⚠️ TAP-ANNOTER/src/main/webapps (autrement il prend le dossier par défaut). ⚠️ ⚠️

La config Eclipse

La config Eclipse peut-être un peu fastidieuse. Il s'agit tout d'abord d'ouvrir le projet depuis File -> Open projects from file System et sélectionner le clone du git effectué au préalable. Une fois le projet ouvert, il faut configurer certaines choses :

  • Tout d'abord, faites clic droit sur le projet -> properties -> Project Facets -> il faut cocher Java et Dynamic Web Module (si vous ne faites pas ça vous ne pourrez pas configurer correctement la suite)

  • Le buildpath en allant regarder dans lib (au niveau de vollt) et dans lib (au niveau de tap_annoter) et en faisant clic droit sur chaque .jar -> add to buildpath. Il faut aussi faire un Add Library -> Server Runtime -> Tomcat 9

  • Le classpath, on fait un clic droit sur le projet -> Properties -> Java Build Path -> Add Folder et il faut ajouter les dossiers src et test de vollt, src de tap_annoter, mapping_components et usecases_conf de tap_annoter (dans config).

  • Le deployement assembly, on fait clic droit sur le projet -> Properties -> Deployment assembly puis on clique sur add et on ajoute tout les libs (avec Add -> Build path entries), avec pour deploy path WEB-INF/lib (automatique normalement), puis les sources de vollt et tap_annoter (Add -> Folder), avec pour deploy path WEB-INF/classes, on déploit aussi usecases_conf et mapping_components dans ce dossier (automatique normalement toujours), puis on deploie enfin webapp (TAP_ANNOTER/src/main/webapps) dans ce même dossier. Si sub_module/vollt/test est présent ici, vous pouvez l'enlever.

Une fois ceci fait, votre config Eclipse devrait être prête.

La BDD

Les tables sur lesquelles vous voulez travailler doivent être dans votre BDD en local. Pour ce faire, nous allons utiliser PostgreSQL comme indiqué plus haut. Il va falloir créer une base que vous appelerez base_tap (ou autrement mais il faudra modifier la ligne 8 du fichier context.xml dans webapps/META-INF) avec la commande create_db base_tap. A noter que si vous n'avez pas les bons droits, cela ne fonctionnera pas.

Il faut aussi créer le user tap_user grâce à la commande createuser tap_user -W pass (encore une fois, libre à vous de changer ce nom et ce mot de passe mais il faudra aller modifier context.xml)

Vous pouvez ensuite aller dans psql en utilisant la commande psql base_tap (ou l'autre nom que vous aurez choisi).

Ensuite il faudra créer les schémas dans lesquelles vous voulez mettre votre table, chez moi ils sont appelés chandra et column_grouping, si vous ne mettez pas les mêmes noms il faudra adapter le FICHIER_TAP.xml dans webapps. A noter que ce fichier permet de créer le TAP_SCHEMA automatiquement, néanmoins il faudra l'adapter si vous rajoutez des tables (le modifier en ajoutant dedans les lignes nécessaires sur le modèle de ce qui a déjà été fait). Si vous changer le nom de ce fichier ou souhaitez faire le TAP_SCHEMA vous même, il faudra éditer tap.properties. Pour comprendre comment ce fichier fonctionne je vous renvoie à ce tutoriel : http://cdsportal.u-strasbg.fr/taptuto/gettingstarted_file.html

Pour éviter les problèmes de droit, on fera un GRANT ALL on votre_schema TO votre_user; Il faut aussi penser à faire un GRANT ALL ON votre_table TO votre_user; !

Ceci étant fait, il va falloir créer les tables à proprement parler. Pour ce faire, on va d'abord utiliser la commande CREATE TABLE avec toutes les colonnes et leur datatype.

⚠️ Si il y a des majuscules dans les noms, il convient d'utiliser des quotes (préferez ' qui a tendance à moins planter que ").

Le nom des tables doit aussi être le même que dans le FICHIER_TAP.xml du webapps.

Une fois vos tables créés, il faut les remplir. Pour ce faire, le plus simple est d'utiliser un format tsv (obtenu sur vizier par exemple, celui de chandra est dans tap_annoter/test) avec la commande COPY. Personnelement, j'ai tendance à l'utiliser avec des barres verticales de cette manière : COPY nom_de_la_table FROM 'chemin du fichier' DELIMITER '|' NULL'';

⚠️ Si il y a des champs vides dans votre table, assurez vous qu'ils correspondent à la chaine que vous avez spécifier dans NULL ci-dessus.

Une fois que cette commande est passée, vous en avez normalement terminé avec les bases de données. N'oubliez pas que les noms de table sont TOUJOURS de la forme : nom_du_schéma.nom_de_table et que vous ne pouvez pas mettre de '.' dans un nom de table.

L'utilisation

Maintenant que tout est prêt, vous allez pouvoir utiliser l'application en démarrant votre serveur (clic droit sur le projet -> Run as -> Run on server). Ensuite, ouvrez un navigateur de votre choix et aller à l'adresse : localhost:8081/TAP-Annoter. Vous devriez arriver sur une interface de TAP dans laquelle vous allez pouvoir éxecuter vos requêtes. Attention à bien sélectionner le format votable/td si vous voulez utiliser le mapping.

La config du mapping

Les composants de mapping sont entreposés dans tap_annoter/config/mapping_components. C'est donc ici que vous devrez modifier ou ajouter des fichiers XML de mapping si jamais ils ne sont plus adaptés au modèle mango en cas d'évolution par exemple, ou si vous constater des problèmes lors de l'annotation des VOTables.

Les fichiers de configuration de mapping des tables sont des fichiers json. Ils se trouvent dans tap_annoter/config/usecases-conf. Il faut qu'ils aient le même nom que la table dont il renseignent le mapping, schéma compris. Exemple : pour annoter la table chandra_table qui est dans le schéma chandra et qu'on appelle en SQL par chandra.chandra_table, il faut un fichier chandra.chandra_table.mango.config.json. Un nom différent entraînera une erreur qui empechera le mapping. Si vous souhaitez faire différement il faudra modifier le code, au niveau de tap_annoter/src/vollt_tuning/CustomVOTableFormat.java.

Aller plus loin

Pour comprendre le squelette et le fonctionnement du code, je vous invite à lire les README qui sont dans chaque dossiers et qui expliquent à quoi servent les classes à l'interieur, ainsi que le code directement qui est commenté à cet effet. A noter que certains fichiers sont inutiles, mais que je le préciserais dans le code ou dans le README.

Globalement

Le rôle des différents répertoires de tap_annoter est résumé ici :

  • config : c'est un dossier ou on mettra les composants du mapping en XML (même si il y a des JSON dedans ils sont inutiles) ainsi que les descriptions des annotations des tables en JSON. Dans ce dossier il y a 2 sous dossiers, respectivement mapping_components pour les composants du mapping et usecases-conf pour les descriptions d'annotations en JSON.

  • src : ce répertoire contient tout les fichiers de code. Vous trouverez dedans mapper, le code qui ajoute chaque measure, vollt_tuning, la surcharge de la classe VOTableFormat de vollt et utils, des classes d'outils.

  • lib : ce dossier contient les libs nécessaires pour faire fonctionner les annotations

  • test : ce dossier est voué à recevoir tout les fichiers de tests, tsv, json etc, ainsi que les résultats (dans results)

Réponses à certains soucis

Si vous n'arrivez plus à cloner le git avec le submodule, il faudra faire la commande git submodule update --remote et cela devrait fonctionner.

Le code qui se lance semble être une ancienne version -> votre buildpath est surement mal configuré

Erreur SQL driver m'empeche d'accéder à l'interface de TAP -> le .jar postgresql n'est pas dans votre deployment assembly

Pas de mapping ? Attention à bien enlever le saut de ligne présent dans la requête !

Améliorations à apporter

Il faut gérer les erreurs qui sont traitées un peu à la va vite pour l'instant.

Implémentation de la réference au JSON dans le TAP_SCHEMA

Annotation à la volée plus tard ?

Sélections de certaines colonnes uniquement avec mapping adapté

Ajouter du code pour supprimer les champs qui n'ont pas de valeur