Tme Le Select
Objectifs : Mettre en oeuvre un médiateur. Définir des adaptateurs textuels. Comprendre les interactions entre le médiateur et les adaptateurs. Implémenter un adaptateur de service web.
Documentation
Serveur Le Select
- lire le
manuel utilisateur et la doc des interfaces: (
API).
- UsageDeLeSelect
Préparation
- Prérequis : votre environnement doit être configuré. Votre fichier /.bash_profile doit contenir la ligne
source /Infos/bd/oracle/config
^ commande | ^ description |
cd | aller dans votre répertoire $HOME |
tar zxvf $BD_TOOL/leselect-etu.tgz | décompresser l'archive dans votre répertoire principal |
cd leselect-etu | aller dans votre répertoire de travail |
source config-leselect | configurer l'environnement de la fenêtre de terminal |
Contrôler le serveur
Démarrer le serveur leselect avec la commande
- source config-leselect
- make start
- Eteindre le serveur leselect
Pour éteindre le serveur, se connecter sur le port 3334 au moyen d'un client telnet. source config-leselect make stop puis saisir la commande shutdown ** autre possibilité : killall java (supprime tous vos processus java)
Exercice 1 : Interroger le serveur leselect
Utiliser un client JDBC. Exemple pour compiler et exécuter le client AccesLS.java :
- source config-leselect
- make ex2
Expliquer brièvement les étapes qui se déroulent jusqu'à l'obtention du résultat de la requête.
Utiliser un client Web pour se connecter par http au port 3080
- mozilla
http://localhost:3080 (penser à désactiver le proxy pour les accès à localhost. Voir les préférences du navigateur)
- poser une requête en utilisant l'interface graphique.
- mozilla
Exercice 2 : Adaptateur de fichiers textuels
On veut accéder aux données de la base TPCH depuis le médiateur. La base TPCH est ici constituée des 8 fichiers plats qui sont dans $LESELECT_HOME/examples/tpch.
Il y a 2 types d'adptateurs textuels selon le format d'une ligne de texte :
- attributs de taille fixe : table_wrapper.dtd ( et !WrapperClass?="!LeSelect?.Wrappers.Text.!TableWrapperFactory?" )
- attributs de longueur variable délimités par un séparateur : text_wrapper.dtd ( et !WrapperClass?="!LeSelect?.Wrappers.Text.!TextWrapperFactory?" )
a) Configurer l'adaptateur de fichiers textuels pour lire des fichiers plats de la base TPCH. Pour cela, définir le fichier tpch.wd correspondant aux relations nation et region de la base TPCH.
- Quel type d'adaptateur utiliser: table_wrapper ou text_wrapper ?
- placer tpch.wd dans le dossier adapt
- prendre soin de vérifier que tpch.wd est conforme sa DTD
b) Poser une requête affichant le nom du continent de chaque pays. D'après vous, qui traite la jointure et Nation et Region ? Est-ce le médiateur et/ou l'adaptateur ?
Nouveaux adaptateurs
Présentation
Nous présentons la méthode pour effectuer les exercices 3 et 4 ci-dessous.
On veut définir des adaptateurs avec de nouvelles fonctionnalités. Les nouveaux adaptateurs sont définis dans votre répertoire adapt.
Configurer le serveur
Si nécessaire, modifier la configuration du serveur leselect :
- Editer le fichier start-leselect-server
- Modifier la propriété core.wrapperRootDir pour indiquer le répertoire contenant les nouveaux adaptateurs.
Réaliser l'adaptateur
Dans le répertoire adapt contenant les adaptateurs :
Ecrire le fichier wd de définition du nouvel adaptateur. Exemple:
- le fichier essai.wd définit l'adaptateur nommé essai. Il doit respecter la DTD essai_wrapper.dtd des nouveaux adaptateurs (les dtd sont toutes dans le répertoire $LESELECT_HOME/dtd).
* Définir les classes du nouvel adaptateur (voir Test*.java). Ces classes sont dans le package adapt.
Tester l'adaptateur
- Eteindre puis redémarrer le serveur leselect
Poser une requête faisant appel au nouvel adaptateur. La syntaxe de la clause FROM de la requête est
FROM /nom_adaptateur/nom_table
Exemple: select * from /essai/T1
Cela affiche les tuples de la table T1 de l'adaptateur essai.
Poser la requête au moyen de l'interface graphique ou par le programme Client1 (make ex1).
Exercice 3 : Adaptateur affichant une trace de l'exécution
Réaliser un adaptateur qui trace l'exécution d'une requête posée sur un fichier textuel. Afin de visualiser le dialogue entre le médiateur et un adaptateur, on veut afficher une ligne de trace chaque fois que le médiateur appelle l'adaptateur. Pour chaque appel, indiquer ce que répond l'adaptateur :
- initialisation: envois de la description des tables (schéma relationnel) vers le médiateur
- réception d'une requête en provenance du médiateur
- envois du nième tuple du résultat vers le médiateur
- fin du traitement de la requête.
a) Consulter le package LeSelect.WrapperInterface pour comprendre le rôle des interfaces :
A partir du point d'entrée !WrapperFactory?, quelles méthodes appeler pour obtenir les objets suivants ? :
- un adaptateur (Wrapper),
- une description des données: nom de table (Tables), schéma d'une relation (!ColumnsMetaData?),
- un curseur sur le résultat (!WrapperResultSet?),
- un tuple du résultat
b) Parmi les classes Test_* dans le répertoire adapt, quelles sont les classes à modifier ? Pour chaque classe quelles sont les méthodes à compléter ? Modifier en conséquence les fichiers Test_*.java. Les recompiler avec la commande
make compil
- Juxtaposer la fenêtre du navigateur et celle de contrôle du serveur leselect (i.e., le terminal à partir duquel vous avez démarré leselect).
- Exécuter la requête select * from /essai/T1 et vérifier que la trace se génère simultanément dans la fenêtre de contrôle.
c) Modifier la requête pour traiter
- select A2 from /essai/T1 where A1 = 4
La trace est-elle identique ? Qui parmi le médiateur et l'adaptateur traite les opérations de sélection et de projection ?
d) Modifier les classes de l'adaptateur essai pour qu'il trace les requêtes concernant les données nation et region de TPCH. Votre adaptateur de trace doit empaqueter l'adaptateur textuel tpch.wd défini précédemment. On veut réutiliser au maximum l'implémentation de l'adaptateur textuel fournie avec !LeSelect? (voir la classe !LeSelect?.Wrappers.Text.!TextWrapperFactory?). Quelles sont les méthodes pour lesquelles il est possible de déléguer le traitement à l'implémentation fournie ?
Exercie 4 : Adaptateur pour un service web
Réaliser un adaptateur pour accéder à Google à travers le schéma relationnel suivant :
- Page(url, titre, mot) . L'attribut mot est un mot contenu dans la page
Le médiateur reçoit une requête de la forme : R(M) = select url, titre from /google/Page where mot='M' .
Le médiateur renvoie seulement les 10 premiers tuples du résultat.
Utiliser le client googleAPI pour se connecter à Google. La clé d'accès à google est JIXBo3FQFHKoUk/9wkjJIufii9H6FDKY
- Pourquoi l'adaptateur ne peut-il pas traiter la requête suivante : select url, titre from /google/Page ? Comment l'adaptateur indique-t-il au médiateur qu'il ne peut traiter que certaines requêtes ?
Questions/réponses fréquentes
Comment éviter de saisir source config-leselect dans chaque nouvelle fenêtre de terminal ?
compléter votre /.bash_profile pour ajouter la ligne :
- source /leselect-etu/config-leselect
Quel est le protocole utilisé pour contrôler le serveur et l'éteindre ?
telnet sur le port 3334, avec la commande :
- telnet localhost 3334 , puis
- shutdown éteint le serveur leselect
- help affiche la liste des commandes disponibles
Faut-il redémarrer le serveur leselect après avoir modifié un adaptateur ?
- Oui, dès que vous recompilez une classe, vous devez éteindre puis redémarrer le serveur leselect pour qu'il recharge les classes des adaptateurs.
Que signifie l'attribut tabsize de l'élément XML Table dans un fichier wd de configuration d'adaptateur ?
- tabsize est le nombre d'espace correspondant à une tablulation. Inutile pour adapter un fichier texte dans lequel les valeurs sont délimitées par un caractère autre que le caractère de tabulation.
Dispose-t-on d'un accès illimité au service web de Google ?
- Non, l'accès est restreint à 1000 requêtes par jour pour tous ceux qui utilisent la même clé. Chaque étudiant doit respecter un quotas de 300 requêtes quotidiennes maxi. Sinon ouvrez-vous un
compte perso chez google API, pour ne pas bloquer les autres.
- Non, l'accès est restreint à 1000 requêtes par jour pour tous ceux qui utilisent la même clé. Chaque étudiant doit respecter un quotas de 300 requêtes quotidiennes maxi. Sinon ouvrez-vous un
Proxy : Comment accéder à google depuis le bât 41, avec un client Java ?
- Configurer votre JVM pour utiliser le proxy cafard :
- System.getProperties().put( "proxySet", "true" );
- System.getProperties().put( "proxyHost", "cafard" );
- System.getProperties().put( "proxyPort", "1080" );
Documentation diverse
- le logiciel
LeSelect-2.2.D14-bin.zip (accès restreint aux étudiants ayant signé l'accord entre Médience S.A. et Paris6)
- Autres adaptateurs:
XWrapElite,
Tidy,
Extract (Stanford),
RoadRunner,
Lixto (présenté à Sigmod PODS04).