Note : 3 ; A peine mieux que la doc d’API !
C’est un livre qui a été long à sortir et le sujet même laissait à penser que le propos serait de bas niveau. Mais tout de même, que d’ennui ! En lui-même l’ouvrage compte presque 250 pages découpées en 15 chapitres, eux-mêmes répartis sur 4 parties. La première d’entre-elle couvre plus de la moitie du texte, avec 130 pages sur 9 chapitres. Le chapitre d’ouverture se propose de nous exposer l’architecture orientée évènements de Netty sur une douzaine de pages. Les auteurs auraient pu rendre la chose moins abstraite avec des diagrammes adaptés, mais disons que le boulot est fait.
Ce sont 16 pages qui sont consacrées au chapitre 2, le « hello world » de Netty. Au moins on a le code, plutôt beaucoup de code, si on compte le build et les listings de console. On a réussi à rendre aride ce qui en principe doit être une partie plutôt passionnante. Mais au moins, on a le code. On rentre dans le dur du sujet avec le chapitre 3 « components and design » qui sert en quelque sorte de table des matières aux chapitres qui suivent. Cela ne prends que 10 pages, mais on a déjà le goût de l’austérité d’une doc d’API !
Les 3 chapitres suivants : Transport, ByteBuf et ChannelHandler partagent le même aspect très peu passionnant, c’est à dire une description des APIs par le menu (avec quelques tableaux récapitulatifs imposés par les règles éditoriales manning. Très peu passionnant, cela va sans dire ? Seul OIO versus NIO au chapitre 4 relève un peu le niveau…
Le chapitre 7 est l’occasion de relever un peu la tête : il aborde le threadloop et le modèle d’événement. Ce n’est certes pas un modèle de pédagogie (j’ai abandonné l’idée), mais on a un peu de niveau conceptuel… Le chapitre suivant concerne le bootstapping, un aspect absolument essentiel de Netty, pourquoi donc arrive-t-il si tard ? A défaut d’être bien écrit, on parvient à comprendre ce qui a besoin d’être compris. Je pense que c’est le maximum que l’on puisse espérer. Cette première partie se conclue par l’introduction aux tests unitaires avec EmbeddedChannel. Là encore j’aurais préféré voir ce sujet abordé dans les premiers chapitres du livres, avant d’explorer transport et channel en profondeur. Le choix de progression de l’auteur est pratiquement incompréhensible eut égard aux approches modernes…
La seconde partie du livre traite des Codecs sur 40 pages et deux chapitres. Le chapitre 10 expose le Codec framework à titre d’introduction, sur une quinzaine de pages. Il donne un arrière goût mitigé : on est un peu mieux que la doc d’API, mais c’est finalement un mixte entre celle-ci et une vue plus synthétique étayée de diagrammes perfectibles. Le second chapitre de cette partie nous montre une mise en œuvre de ce framework avec un codec HTPPS. J’avais crains pire, car la vingtaine de pages dédiée à ce cas d’étude ne se laisse pas lire tout seul mais est quand même un peu didactique.
La troisième partie est à peu près de la même taille : une trentaine de pages formée de 2 chapitres, le sujet étant les protocoles réseau. Bien sûr, on entend par là les protocoles réseau dépassant les choses basiques. Et justement, on commence au chapitre 12 par le Websocket ! Certes, l’exemple fait bien un bout en bout, mais le code qui remplace pratiquement toute explication est long et fastidieux. Tout cela est ennuyeux. Le second exemple est un broadcasting avec UDP. C’est un peu moins violent, mais on reste quand même sur un principe du code qui remplace l’explication.
La 4ème partie est consacrée aux cas d’utilisation. Ce sont également 2 chapitres qui constituent cette partie longue de 45 pages. Le chapitre 14 occupe 25 pages et présente des « petits » exemples, trois en l’occurrence. Leur présentation manque hélas d’attrait. Le style descriptif ne parvient pas à capturer le pourquoi des choix de conception. En fait, on n’arrive même pas à comprendre quelles ont été les questions ou les options ayant présidé aux choix de conception ! Le chapitre 16 présente des exemples beaucoup plus structurants : chez Facebook et chez Twitter. Cette fois, le texte n’est pas dû à l’auteur et c’est bien plus intéressant. On nous y explique la genèse de Thrift chez Facebook et la manière dont Swift et Nifty ont été conçus avec Netty. Chez Twitter, c’est le framework Finagle qui est évoqué. Ici c’est son paradigme fonctionnel qui retiendra l’attention.
Ce livre a longtemps été attendu, sa sortie mainte fois reportée. La qualité du produit livré ne mérite pas cette attente de mon point de vue. Ce volume manque cruellement de qualités pédagogique et il faut être pugnace (ou désespéré) pour s’y accrocher.
Référence complète : Netty in Action – Norman Maurer & Marvin Allen Wolfthal – Manning 2016 – ISBN : 978 1 61729 147 0