Revue de Presse Xebia

Revue de Presse Xebia
La revue de presse de l’actualité Java/JEE hebdomadaire proposée par Xebia.

Actualité éditeurs / SSII

Le coin de la technique

Notre communauté en France et à l’étranger

Actualité éditeurs / SSII

RabbitMQ 2.4 et Spring AMQP 1.0

Depuis l’annonce de RabbitMQ par SpringSource, l’éditeur est devenu de facto un moteur important pour imposer le standard AMQP dans les choix d’architecture nécessitant un serveur de message. Cet investissement n’est plus à remettre en doute avec les dernières annonces et articles qui nous viennent de SpringSource ces dernières semaines.

Spring AMQP 1.0 Release Candidate 1

Pour rappel AMQP est un protocol de messagerie indépendant du langage qui dans une certaine mesure peut remplacer JMS pour les applications Java. Ce protocole est encore sujet à de nombreuses modifications, la version 1.0, qui a pris beaucoup de retard, devrait sortir dans quelques mois. Malgré tout il existe déjà quelques serveurs de message se basant dessus comme QPid, StormMQ (cloud) ou justement RabbitMQ. Comme à son habitude SpringSource propose donc une couche d’abstraction pour faciliter l’utilisation de ce protocole d’où spring-amqp.

On retrouvera une classe AmqpTemplate permettant la configuration au serveur puis la réception ou l’envoi de message. Ce template n’est en théorie pas dépendant de la plateforme mais pour l’instant une seule implémentation existe et comme on peut s’y attendre il s’agit de RabbitTemplate. Cette version ne semble pas encore tout à fait abouti entre autre parce qu’AMQP est encore en cours de mutation. Mais il permet à SpringSource de capter les utilisateurs de ce nouveau protocole.

RabbitMQ 2.4

RabbitMQ est sans doute le serveur de messagerie le plus connu utilisant ce protocole. Cette nouvelle version contient entre autre quelques nouvelles améliorations (voir la release note complète):

  • accélération du routage des messages: le protocole permet de spécifier des wildcards dans les adresses de destination des messages (par exemple pour récupérer les messages portant sur stock.voiture.bleue et stock.voiture.rouge on s’abonnera à la queue stock.voiture.#). L’algorithme pour résoudre cet acheminant a été revu en profondeur pour des gains de performance multipliés par 60.
  • propagation des alertes sur la mémoire à tous les noeuds du cluster
  • possibilité d’ajouter des CC et BCC dans les destinataires des messages. Dans le cas du BCC, les destinataires ne seront plus visibles par le client. A noter que ce format n’est pas compris dans le protocole d’AMQP.
  • capacité d’écouter les événements d’annulation d’une écoute sur une queue (parce qu’un noeud tombe par exemple) du côté client.
  • ajout d’un timeout sur la ConnectionFactory

Le premier point, accélération du routage, a donné lieu à un article très intéressant de Helena Edelson sur le blog de SpringSource sur le lien entre la topologie utilisée et la scalabilité qui en résulte. En effet lorsque le routage pouvait être un problème au niveau performance, des solutions privilégiant des modes de routage directs étaient privilégiés à celles contenant des mécanismes de routage plus sophistiqués. La contrepartie était la création d’un plus grand nombre d’exchange (zone de publication). Ce gain de performance permet donc de simplifier la topologie.

Jersey 1.6

Jersey — l’implémentation JAX-RS de référence — passe en version 1.6. Elle utilise désormais la toute récente version 2.0 de Grizzly — le listener HTTP basé sur NIO — en faisant place à un nouvel artifact : jersey-grizzly2 (le support de la version précédente est conservé mais également déporté dans un artifact).

La release note promet plusieurs points dignes d’intérêt :

  • la gestion de liste d’éléments, évitant la création d’un noeud racine « au pluriel » dès qu’une liste doit être fournie au premier niveau du XML ;
  • un enrichissement de la déclaration des headers et du path des ressources ;
  • une plus grande facilité de rédaction des tests unitaires, les classes jusqu’alors présentes étant plus aisément intégrables dans une variété de contextes ;
  • l’ajout d’exemples de code pour la configuration par Jackson en remplacement à JAXB (peu documenté jusque là) et pour les nouveautés Grizzly.

Gare, certains changements — notamment depuis Grizzly 2.0 — ne sont pas rétro-compatibles ; ils sont listés en pied de release note.

Le coin de la technique

Google App Engine 1.4.3

La version 1.4.3 de Google App Engine a été annoncée mercredi dernier. Cette version réduit l’écart des fonctionnalités disponibles entre les langages Python et Java. Côté Python, on peut citer rapidement la disponibilité de stub pour les services App Engine afin de faciliter l’écriture de tests d’intégration. Côté Java, on note l’ajout de l’API Remote qui permet à un client distant d’attaquer les services backend Live App Engine. Un cas d’utilisation typique de cette API, la possibilité d’effectuer des traitements « One shot » (migration / correction de données, etc.) sans avoir à les inclure comme composants de l’application web.

Autre nouveauté de taille de cette version, la disponibilité de l’attribut threadsafe pour votre application qui permet le traitement en parallèle des requêtes. Jusqu’à présent, le traitement des requêtes étaient sérialisées; plusieurs instances pouvaient être allouées pour soutenir la charge, mais le traitement des requêtes sur une même instance ne s’effectuait pas en parallèle. L’activation de cette fonctionnalité s’effectue simplement en ajoutant la balise threadsafe dans le fichier de configuration de l’application. La désactivation de ce mode de fonctionnement par défaut peut surprendre dans la mesure où, le modèle de parallélisation d’un serveur web le modèle le plus répandu et sans doute le plus simple à appréhender.

Enfin, en plus du lot de correction de bugs, une modification salutaire pour le service de Job, il est maintenant possible de spécifier la version cible de l’application pour le traitement des requêtes.

Eclipse: des classes de tests clé en main

Le plugin MoreUnit pour Eclipse, dont nous vous avons déjà parlé sur ce blog pour le gain de temps qu’il offre dans l’écriture de tests unitaires, propose depuis peu une fonctionnalité intéressante : la génération du code « boilerplate » de vos classes de test. Partant d’une classe à tester, il va créer des mocks pour ses dépendances et va ensuite instancier la classe en lui affectant les dépendances simulées. Un exemple est disponible dans la documentation du plugin.

L’outil se base sur des conventions courantes pour détecter les dépendances d’une classe. Sont considérés comme dépendances :

  • les paramètres du constructeur ayant le plus grand nombre d’arguments ;
  • les propriétés ayant des setters ;
  • les champs visibles par la classe de test.

L’intérêt de cette fonctionnalité est immédiat : on gagne beaucoup en temps et en motivation lorsqu’il faut ajouter des tests à des classes existantes non testées. En un clic, une classe de test est prête à accueillir le code qui nous intéresse vraiment, à savoir le test lui-même.

A l’heure actuelle Mockito et EasyMock sont supportés et les développeurs se proposent d’étendre cela si nécessaire. Enfin, à savoir, l’outil fonctionne pour l’instant en mode « tout ou rien » : il n’est pas possible de choisir les dépendances que l’on veut mocker, mais l’équipe de MoreUnit promet un wizard sous peu.

Notre communauté en France et à l’étranger

Pas frais mon poisson ?!

Comme tous les ans, le 1er avril est l’occasion pour certains sites de nous amuser en perpétuant la tradition du poisson d’avril. Voyons ceux que nous avons retenu:

  • InfoQ a créé chez nombre d’entre nous un moment d’incrédulité en annonçant la version 1.2 du protocole HTTP. La version 1.1, finalisé depuis 1999 se voyait soit-disant améliorée avec l’ajout de ressources hiérarchiques et de menus textuels. Elle se comporterait comme un « mountable read-only global network file system ». Ce nouveau protocole se permettrait même de casser la compatibilité avec l’existant (!) en imposant que tous les en-têtes de la requête soient connus et acceptés par le serveur sous peine de voir celle-ci rejetée ! Un fort beau poisson au final.
  • InfoQ, encore eux, nous relate la publication du dernier né des manifestes: le H-A Manifesto (HA pour « Half-Arsed » que nous ne traduirons pas). Ce manifeste, qui parodie bien sûr le manifeste agile, se veut être la version enterprise ready, permettant d’intégrer les pratiques agiles dans le cadre rigide d’une grande compagnie. Ce manifeste fera à n’en pas douter bien rire tout ceux qui ont été confrontés à des problèmes d’intégration des méthodes agiles dans des environnements réfractaires.
  • Tant que nous sommes dans les manifestes, citons le Manifeste pour Manifeste qui se propose de théoriser l’écriture d’un manifeste. Tout nouveau manifeste se devra à coup sûr de respecter les règles y étant énoncées.
  • Qui ne connaît pas Joël On Software ? C’est le site de Joël Spolsky, le fondateur du fantastique StackOverflow et plus récemment de la compagnie Stack Exchange se proposant d’appliquer le principe de la collaboration de StackOverflow à d’autres thèmes. Sur son site, Joël nous parle régulièrement de tout ce qui fait la vie d’un informaticien. Pour le 1er avril, il a ouvert un nouveau site: Joël on Coal. comme son nom l’indique, il nous parle de tout ce qui fait la vie d’un bon… mineur de charbon ! Et Joël va jusqu’à parodier son fameux Joël test qui est connu pour permettre d’identifier rapidement les bonnes équipes de développement. La version parodique, n’est bien sûr drôle que si l’on la rapproche de l’original.
  • Oracle n’en aurait apparemment pas fini avec les procès. Cette fois-ci, c’est la chaîne de cafés Starbucks qui est poursuivie. Il faut dire qu’ils ont cherché les problèmes en osant nommer un de leurs café « Java Chip Frappucino Ice Cream » alors que tout le monde sait que Java est une marque déposée d’Oracle. Tout ceci est bien sûr vrai, mais seulement début avril chez Infoworld.
  • Pour finir notre tour des poissons, citons 2 scripts javascript fournis par The Wojo Group. Le premier fera passer n’importe quel élément html pour du Flash en changeant le menu contextuel (clic droit) et en imitant celui de Flash. Le second rappellera à certains d’entre nous l’époque où les chevaux de troie n’existaient pas et où les virus, qui se transmettaient par disquette, corrompaient l’affichage à l’écran. En effet, ce script fera bouger certains mots de votre page web d’une manière étonnante qui rappellera les plus amusants des virus de l’époque.

Et comme tous les 1er avril, nous nous sommes encore amusés ! Vivement dans un an pour de nouveaux >++++)°>

Billets sur le même thème :

Laisser un commentaire