sdx-developers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[sdx-developers] Compression pour OAI


From: Nicolas CUNIN
Subject: [sdx-developers] Compression pour OAI
Date: Thu, 21 Jul 2005 16:44:22 +0200

Bonjour,

J'avais demandé dans un post sur sdx-users si la compression pour OAI dans SDX était implémentée, on m'a dit que non mais que ce serait assez simple avec les pipelines de cocoon.

Pour mon stage, on m'a donc demandé de l'implémenter (la compression en gzip) et donc je voulais savoir si je suis sur la bonne voix....

J'ai vu qu'OAI propose un type de compression dans Identify et qu'ensuite c'est le serveur et le client qui vont s'occuper de parlementer (Accept-Encoding et Content-Encoding) pour savoir dans quel type de compression la réponse du serveur vers le client à un ListRecords (seul verbe qui nécessite vraiment de la compression) doit être retournée.

Dans le cas du gzip, il faut donc préciser le type de compression accepté par l'entrepot, simplement en remplissant le champ compression de la classe AbstractOAIRepository avec "gzip". Ainsi le verbe Identify renvoit bien la compression acceptée.

Ensuite, si j'ai bien compris, les requetes pour l'entrepot arrivent dans la classe OAIComponentImpl (plus précisément dans la méthode acceptRequest pour l'entrepot) qui s'occupe ensuite de créer une OAIRequest et une OAIResponse qui vont aller interroger l'entrepot et AbstractOAIRepository s'occupera de renvoyer le résultat.

-->L'OAIRequest est alors stockée dans OAIResponse, c'est donc dans l'un ou l'autre que l'on peut stocker également le type de compression qu'il va falloir utiliser en retour si le verbe est bien ListRecords. J'ai personnelement choisi de ranger cette compression dans l'OAIRequest avec 1 attribut compression et 2 méthodes getCompression et setCompression pour le mettre à jour ou le récupérer.

-->La méthode acceptRequest d'OAIComponentImpl devrait donc s'occuper de récupérer l'accept-encoding de l'entete HTTP... c'est ce que j'ai essayé de faire sans savoir si ca fonctionne (pour le moment) et ensuite la méthode sendResponse de l'OAIResponse est appellé et elle va permettre de réaliser les requetes adéquates en fonction du verbe envoyé et elle va également créer l'arbre XML envoyé à SAX pour que celui-ci réponde à la requete. Pour le gzip, il faudrait peut etre utiliser le serializer GzipXMLSerializer pour que cette donnée soit compressé avant d'etre envoyé à SAX... La j'ai des difficultés de compréhension vis-à-vis de cocoon et ses serializer dont je n'ai pas bien bien compris le fonctionnement, je ne sais pas bien non plus quand l'arbre est envoyé, est lorsqu'on fait un setConsumer ? Est ce que la compression avec le serializer Gzip peut etre uniquement gérée dans la fonction sendRecord de la classe LuceneDocumentBaseOAIRepository.

--> ensuite, pour l'entrepot, il reste à renvoyer l'entete HTTP content-Encoding qui indiquera au client dans quel compression est mis la donnée qui suit. Je ne sais pas où je peux faire ca.


Pour la moissonneuse, je suis parti de la fonction sendResponse de OAIComponentImpl qui appelle la fonction receiveSynchronizedRequest, j'ai supposé que celle-ci s'occupe d'envoyer une requete à l'entrepot mais je n'en suis pas sur du tout du tout. Si c'est le cas, il faudrait donc que l'on écrive "accept-encoding= gzip;q=1.0, identity;q=0.5" dans l'entete HTTP.

Ensuite, j'ai cru voir que la moissonneuse se préparait à recevoir un d'enregistrement lorsqu'elle en avait la demande (GetRecord ou ListRecords) avec prepareRecordCapture qui s'occupait alors de préparer la réception des données et donc à priori du XML en utilisant un serializer XML mais si on risque de recevoir du gzip, il faudrait que la classe qui recoit la requete, l'analyse pour stocker le content-encoding afin d'utiliser le serializer XMLSerializer ou le serializer GzipXMLSeralizer en fonction de la compression demandée. Ou faudrait-t-il alors stocker cette compression? dans l'AbstractOAIHarvester?


Vous l'aurez compris pour ceux qui auront lu ce post jusqu'au bout que je n'ai pas encore bien bien compris le fonctionnement de SDX mais il est vrai que le manque de documentation n'aide pas... J'aimerais qu'on m'éclaircisse donc sur les points que j'ai précisé ci-dessous ou qu'on me dise que je fais fausse route en me disant dans quelle direction je devrais me pencher et enfin si quelqu'un l'a fait, j'accepterais le code avec grand plaisir.


Merci.
___________
Nicolas Cunin






reply via email to

[Prev in Thread] Current Thread [Next in Thread]