Blog Zenika

#CodeTheWorld

Java

REST avec Spring 3.0 et Solr (1ère partie)

Spring 3.0 introduit un support serveur et client pour REST. Nous allons illustrer l’utilisation de ce support dans une série d’articles. Afin de pimenter tout cela, les données manipulées seront récupérées depuis une instance de Solr, le serveur d’indexation basé sur Lucene.

Le cas d’utilisation

Notre application Web va exposer des services REST pour que l’on puisse accéder à ses données. Le contrôleur REST délègue les requêtes à un serveur d’indexation dédié, Solr, interrogé avec une API Java, sur HTTP. La figure suivante représente cette architecture.
Architecture REST Spring/Solr
Pourquoi voulons-nous mettre un contrôleur REST devant le serveur d’indexation, puisque celui-ci propose finalement le même genre d’interface (HTTP/XML) ? Il peut y avoir de nombreuses raisons à cela :

  • encapsulation : le contrôleur REST se comporte en fournisseur de services et il est complétement sous notre contrôle, nous pouvons donc définir un contrat et nous débrouiller pour le maintenir, que la technologie sous-jacente soit Solr ou autre chose. Bref, le contrôleur REST permettra d’absorber toute modification de notre entrepôt de données. On peut faire une analogie avec un DAO qui masque la technologie de persistance sous-jacente avec une interface Java bien définie.
  • sécurité : le serveur Solr peut ne pas être accessible depuis l’extérieur, le contrôleur fait alors office de proxy. Le serveur Solr expose aussi de nombreux services, notamment la possibilité d’effacer des données. Le contrôleur peut donc n’exposer que les services nécessaires ou imposer des restrictions d’accès (le contrôleur REST est plus facile à sécuriser que Solr).

Voilà pour le cas d’utilisation, commençons immédiatement par installer et démarrer le serveur Solr.

Le serveur Solr

Solr est un serveur d’indexation basé sur Lucene. Il donne une dimension “entreprise” à Lucene : accès par HTTP, optimisation des index automatique, gestion des accès concurrents, etc. Solr peut être téléchargé depuis son site. Nous utilisons ici la version 1.4. Une fois l’archive téléchargée, la décompresser dans un répertoire. Nous allons lancer le serveur Solr, qui utilise par défaut le conteneur Web Jetty. Ouvrir une ligne de commande et aller dans le répertoire example de l’installation. Lancer ensuite le serveur avec la commande suivante :

/solr/example$ java -jar start.jar

Le serveur Jetty se lancer alors sur le port 8983. Il faut mettre un peu de contenu dans le serveur avant de pouvoir l’exploiter, nous allons donc indexer quelques documents fournis dans la distribution. Ouvrir une ligne de commande dans le répertoire example/exampledocs de la distribution et lancer la commande suivante :

/solr/example/exampledocs$ java -jar post.jar *.xml

Solr propose une interface d’administration permettant d’effectuer des requêtes : http://localhost:8983/solr/admin/.
Administration de Solr
Par défaut, le formulaire de requête contient “solr”. Lancer la recherche en appuyant sur le bouton “Search”. On obtient alors une réponse XML, qui contient en entête des détails sur la requête (paramètres, temps d’exécution, etc.) et les résultats retournés, dans notre cas un document qui contient le mot “solr” dans un de ces champs.
Résultat de requête Solr
Nous verrons dans la seconde partie comment attaquer le serveur Solr depuis un contrôleur REST Spring 3.0 avec le client Java SolrJ. La troisième partie sera consacrée à l’accès au contrôleur REST avec le support REST client de Spring 3.0, le RestTemplate. Bonnes fêtes !

Auteur/Autrice

2 réflexions sur “REST avec Spring 3.0 et Solr (1ère partie)

  • Benoît

    Bonjour,

    Il y a une erreur minime. Le lien sur “son site” dans la phrase “Solr peut être téléchargé depuis son site.” pointe vers le site racine de Lucene au lieu du lien du sous-projet Solr. Il est vrai que les deux liens différent de cinq caractères seulement.

    Répondre
  • Arnaud Cogoluègnes

    corrigé, merci !

    Répondre

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.