Ce retour fait suite au gain d’une licence JRebel lors de la soirée du Toulouse JUG autour du Framework Play.
Présentation rapideJRebel est un outil proposé par la société ZeroTurnaround à destination des développeurs ayant pour but d’améliorer leur productivité. Pour cela, il fournit un système de prises en compte à chaud des modifications sans nécessiter le redéploiement de l’application ou le redémarrage du serveur.
Il se présente sous la forme d’un plugin « java agent » à déclarer au niveau de la JVM du serveur d’application et d’un fichier de configuration « rebel.xml » à placer à la racine du répertoire contenant les fichiers « .class » pour chaque application et module du projet. A l’exécution, cet agent surveille les classpath indiqués dans le fichier « rebel.xml » puis agit sur le Class Loader en chargeant les nouvelles versions des classes (d’après ce que j’ai pu comprendre, il s’agit d’un monitoring des classpath en se basant sur les timestamp des fichiers .class pour détecter les modifications).
Pour plus de détails, la documentation et les forums permettent une prise en main rapide pour les cas d’utilisation standards.
Prise en MainPour prendre en main l’outil, j’ai effectué les premiers tests sur un projet personnel basé sur Spring MVC avec utilisation de Spring Web Flow, le tout s’exécutant dans le conteneur Tomcat.
Pour les technologies Spring, ZeroTurnaround fournit de nombreux exemples (documentation, FAQ, screencast). La mise en place de JRebel a donc été rapide. Pour les quelques problèmes survenus au démarrage, une recherche sur les forums permet de rapidement cerner les erreurs de paramétrage.
Pour les personnes ayant assisté aux soirées sur Play ou Grails, les présentateurs ont mis en avant la prise en compte des modifications sans redémarrage du serveur parmi les avantages par rapport aux autres frameworks JEE dits « standards ». Avec JRebel, un projet Spring « classique » profite d‘un fonctionnement très proche.
L’apport de JRebel est un plus indéniable pour le développement. Il permet d’améliorer la
productivité du développeur aussi bien dans la phase de création que leur de la validation ou du support d’une application. Malgré quelques ratés ayant nécessité de redémarrer Tomcat, ce premier test m’a convaincu de pousser l’expérimentation en condition réelle sur un projet professionnel.
Utilisation en condition réelleAfin de faire un retour plus pertinent, j’ai configuré JRebel sur mon environnement de
développement professionnel. Point important, la société pour laquelle je travaille utilise un
framework interne, donc non listé comme pris en charge par JRebel.
Alors que la mise en place fut plutôt rapide pour le projet Spring, la tâche a été beaucoup
plus compliquée sur ce second environnement. Après plusieurs échecs, j’ai fini par trouver un paramétrage assurant la prise en compte des modifications pour les projets web principaux, les modules externes étant plus ou moins bien pris en charge.
Après environ trois semaines d’utilisation en condition réelle, JRebel affiche une estimation de 3 heures économisées (pour 14 jours de développement). Toutefois, malgré la prise en compte des modifications, notre framework interne nécessite un redéploiement de l’application web dans la plupart des cas.
La problématique rencontrée n’est pas à mettre sur le compte de JRebel mais sur le fonctionnement particulier de notre framework. Pour que certaines modifications soient prises en compte, la chaîne de démarrage de l’application web est impérative. Pour utiliser JRebel de manière optimale avec ce framework, le développement d’un plugin JRebel prenant en compte ses particularités semble inévitable et met fin à mes tests.
ConclusionLes Plus :
Les Moins :
Jonathan Pineau
Un précédent article a exposé les grands principes de la sérialisation avec Thrift et Procotol Buffers. Ces deux frameworks promettent notamment une représentation des messages optimisée en termes de taille, ce qui est avéré dans le benchmark JVM Serializers : Thrift et Protocol Buffers y obtiennent une réduction de taille du message de 73% par rapport à la sérialisation native Java. Ce benchmark regroupe par ailleurs de nombreux autres frameworks de sérialisation du monde Java, mais se limite toutefois à l’utilisation d’un unique message de test.
Le présent article analyse l’influence de la structure (nombre et taille des objets, complexité de la grappe) sur la compacité du message sérialisé pour Thrift et Protocol Buffers. La comparaison est réalisée en Java, son protocole de sérialisation standard servant de référence.
Afin d’évaluer diverses structures de messages, le prototype utilise une structure arborescente. Traditionnellement, ce type de structure est récursif. Cependant, il n’est pas compatible avec la limitation de Thrift sur la déclaration avancée abordée dans le précédent article.
La profondeur a donc été arbitrairement limitée au niveau 6, soit 127 nœuds au maximum pour un arbre binaire complet. Il y a un type différent par profondeur, de Node0 pour la racine à Node6 pour les feuilles les plus basses. Les arbres générés le sont selon trois paramètres :
La construction des arbres se fait récursivement et équitablement entre les fils d’un nÅ“ud. Ci-dessous trois exemples d’arbre à 5 nÅ“uds avec, de gauche à droite, des tailles de fratries de 1, 2 et 3. Les numéros sont présents à titre indicatif et indiquent l’ordre de création des nÅ“uds par l’algorithme de construction.

Les déclarations dans les IDLs Thrift IDL et Protocol Buffers language sont disponibles en fin d’article. Les versions utilisées sont 0.8.0 pour Thrift, 2.4.1 pour Protocol Buffers et HotSpot 1.6.0_29 pour la JVM.
Impact du nombre d’objets du messageDans un premier temps, la complexité est fixée au minimum :
En effet, si la cardinalité des fratries est supérieure au nombre de nœuds n, on obtient un arbre à deux niveaux, une racine Node0 et n-1 enfants Node1. Les 1024-trees de cet article ont tous cette structure car n est toujours inférieur à 1024.

Tracer la taille du message sérialisé en fonction du nombre de nœuds donne le graphe suivant :

Aussi bien sur cet histogramme que sur les suivants, une barre plus basse correspond systématiquement à un meilleur résultat et l’ordre des barres (de gauche à droite) correspond à celui de la légende (de haut en bas).
Sur ce premier graphique, on retrouve un constat du benchmark Java Serializers, mais dans un contexte de message plus complexe : Thrift et protobuf ont des performances très proches.
Le graphique ci-dessous rapporte leurs résultats à ceux de la sérialisation Java. On constate que leur avantage en termes de taille de message s’amenuise à mesure que l’arbre grossit.

Sur le graphique suivant, on observe que la taille moyenne d’un nÅ“ud décroît rapidement pour la sérialisation Java. En effet, le protocole de sérialisation Java ajoute aux informations du message lui-même la description des classes sérialisées. Ce surcoût, important pour un petit message, devient négligeable pour des messages constitués de nombreux objets du même type.

Les protocoles de protobuf et Thrift, quant à eux, contiennent très peu d’information de structure : uniquement un identifiant de champ et un type. Ainsi ils voient la taille moyenne d’un nÅ“ud croître légèrement, car les listes d’enfants augmentent en nombre et taille quand l’arbre grossit.
Pour ce second test, on fige la structure du message pour mesurer l’influence de la quantité d’information contenue dans chaque nÅ“ud :

Les résultats concernant la taille du message sont similaires au test précédent, Thrift et protobuf sont très proches et font mieux que la sérialisation Java surtout pour de petits objets.

Figer la structure du message montre que la différence de taille par rapport au protocole de sérialisation Java est quasi-constante. Ceci est dû au fait que protobuf et Thrift n’apportent aucun gain notable lorsqu’on fait varier la taille de la chaîne de caractères.
En effet, les trois protocoles en jeu la sérialisent sous forme de chaîne en UTF8 précédée de sa longueur. La différence est que le protocole Java utilise 2 octets pour la longueur des chaînes de moins de 2^16 caractères, tandis que les deux frameworks ont recours à un varint. Le saut entre 64 et 128 caractères est dû au fait que le format varint n’utilise qu’un octet pour coder les entiers entre 0 et 127, puis deux de 128 à 2^14.
Pour évaluer l’influence de la structure du message :
Par exemple, voici les trois variations considérées de l’arbre à 7 nÅ“uds :

Le graphique qui suit recense les tailles des messages sérialisés.

Pour tous les protocoles de sérialisation, le comportement est similaire : plus de complexité conduit à un message sérialisé moins compact.
Cela est dû au fait que plus de complexité se traduit par un plus grand nombre de listes de noeuds-enfants. Cependant, la variation reste négligeable (environ 1%) pour Thrift et protobuf.
Le protocole de sérialisation Java est lui plus fortement influencé (jusqu’à 13%). En effet la quantité d’information utilisée par les descripteurs de classes est liée au nombre de types de classes mises en jeu. Plus les fratries sont grandes, moins on utilise de classes différentes. Par exemple, pour 63 nÅ“uds, le 2-tree utilise toutes les classes de Node0 à Node5, le 4-tree s’arrête à Node3, et le 1024-tree à Node1.
Le résultat particulièrement bon du 2-tree de taille 127 est lié au fait que Node6 n’a pas de liste d’enfants et est donc plus compact que les autres types de Nodes. Dans cet arbre, la majorité des nÅ“uds (64) est de type Node6.
Les tailles moyennes par nÅ“ud sont représentées dans l’histogramme ci-dessous :

L’évolution est conforme aux observations du premier test : l’écart entre Java et les deux frameworks s’amenuise lorsqu’on augmente la taille du graphe sans pour autant être négligeable.
En traçant le gain apporté par les deux frameworks par rapport à la sérialisation Java on obtient :

Par exemple, en considérant le message du 4-tree à 63 nœuds et un système devant soutenir une charge de 10000 requêtes/s, le remplacement de la sérialisation Java par Thrift permet de diminuer le besoin de bande passante de 75.45 Mo/s à 40.68Mo/s, soit un gain de 46%.
ConclusionCet article a présenté une comparaison portant sur la taille de sérialisation avec des messages complexes. Par rapport au benchmark JVM-serializers, l’avantage de Thrift et protobuf sur la sérialisation native Java est moins décisif en termes de compacité, même s’il reste intéressant.
La taille du message sérialisé par Thrift ou Protocol Buffers n’est pas influencée par la structure même du message. C’est surtout son volume qui a un impact : les deux frameworks offrent une sérialisation bien plus compacte que celle de Java surtout sur de petits messages. Cette observation rejoint le fait que Protocol Buffers n’est pas particulièrement adapté aux volumes de données importants.
Il faut rappeler qu’employer la sérialisation native Java comme référence n’est légitime que parce que cet article se limite aux protocoles de sérialisation. Thrift et Protocol Buffers offrent d’autres avantages tels l’interopérabilité avec plusieurs langages et la compatibilité ascendante et descendante des messages. Ils sont abordés dans l’article précédent.
Pour aller plus loin, on pourrait analyser les temps de sérialisation, l’empreinte mémoire, l’intégration aux processus de build…
AnnexesVoici la déclaration des objets en Thrift IDL : tree.thrift
namespace java com.octo.example.serialization.model.thrift
enum RoomType {
SINGLE =0,
DOUBLE =1,
SUITE =2
}
struct Node6 {
1: optional i32 number,
2: optional bool even,
3: optional double rate,
4: optional RoomType type,
5: optional string description,
}
struct Node5 {
1: optional i32 number,
2: optional bool even,
3: optional double rate,
4: optional RoomType type,
5: optional string description,
6: list children,
}
[...]
et ainsi de suite jusqu’au Node0, qui correspond la racine de l’arbre. L’ordre employé évite le recours à la déclaration avancée.
Ci-dessous, l’équivalent en Protocol Buffers language : tree.proto
package serialization;
option java_package = "com.octo.example.serialization.model";
option java_outer_classname = "LimitedTreeProto";
enum RoomType {
SINGLE =0;
DOUBLE =1;
SUITE =2;
}
message Node0 {
optional int32 number =1;
optional bool even =2;
optional double rate =3;
optional RoomType type =4;
optional string description = 5;
repeated Node1 children = 6;
}
[...]
message Node6 {
optional int32 number =1;
optional bool even =2;
optional double rate =3;
optional RoomType type =4;
optional string description = 5;
}
L’ordre des nÅ“uds plus naturel est supporté par le compilateur Protobuf.
Suggestion d'articles :
Enregistré le 2 janvier 2012
Telechargement de l’episode LesCastCodeurs-Episode–52.mp3
Interview Jean-François GrangLes articles sur le mobile sur le blog d’OCTO : http://blog.octo.com/tag/mobilite
L’interaction avec le reste du SI et des applis Java en particulierJSON Kit
SBJson
GHUnit
OCUnit
OCMock
iCloud
Siri
USI
Patently Apple
Contactez-nous via twitter http://twitter.com/lescastcodeurs
sur le groupe Google http://groups.google.com/group/lescastcodeurs
ou sur le site web http://lescastcodeurs.com/
Flattr-ez nous (dons) sur http://lescastcodeurs.com/

Suite de notre cycle d’ateliers dédiés aux praticiens agiles, avec une nouvelle session au format Open Space le 14 Février de 14h à 18h dans les locaux d’OCTO. 3 bonnes raisons d’y participer :
Â
1.Un rendez-vous dédié aux acteurs des DSI :
Le calendrier IT agile est déjà plutôt chargé, mais il se compose pour majeure partie de rendez-vous réservés aux « experts » de l’agile : gourous, coachs, formateurs, etc. Aucun n’est dédié à ceux qui font au quotidien, c’est à dire aux équipes internes au sein des DSI. Or Product Owner, ScrumMaster, MOA, Tech Lead, PMO, tous sont confrontés à des problématiques récurrentes au sein de leurs projets agiles.
2.De nouvelles pistes pour continuer à progresser :
L’objectif des Open Spaces est de partager entre pairs vos questions, vos problématiques, vos doutes, vos convictions et vos retours d’expérience :
Après plusieurs mois, voire plusieurs années de pratiques agiles au sein de ses équipes, il est primordial de lever de temps en temps la tête du guidon et de considérer au-dehors les choix que d’autres ont faits.
3.Un support illustré retraçant les échanges :
Comme lors de la première session cet automne, Véronique Olivier-Martin revient pour capter la substantifique moelle de nos échanges et la restituer sous forme d’illustrations sur une fresque murale véléda. Chaque participant repartira avec une version numérisée du croquis d’ensemble retraçant l’évolution des échanges au fil de la session et quelques zooms en bonus sur les croquis les plus percutants !
A l’issue de cet atelier, vous aurez pu :
Animateurs :
Christophe Thibaut & Mathieu Gandin : Consultants Seniors et Coachs Agile OCTO
Progamme :
Cliquez ici pour vous inscrire à l’Open Space du 14 Février
Suggestion d'articles :
Notre Ippevent “Au coeur du BPM avec Bonita” du 19 mai 2012 avait connu un gros succès. Malheureusement un soucis technique nous avait empêché de diffuser la vidéo de cette conférence. Comme le sujet est important et nous sort un peu des considération purement technique de notre quotidien pour nous parler d’outils permettant de travailler avec les gens du métier, nous avons refait cette présentation pour que chacun puisse en bénéficier.
Ça tombe également bien avec le partenariat que vient de signer Ippon avec BonitaSoft en ce début d’année.
Agenda :
Définition : « Un système d’analyse de données temps réel est un système évènementiel disponible, scalable et stable capable de prendre des décisions (actions) avec une latence inférieure à 100ms »
100ms est l’ordre de grandeur retenu lorsque l’on parle de « temps réel ». Cette valeur permet de prendre les décisions dans un temps adapté au business.
Quelles différences avec l’analyse traditionnelle ?
Quels intérêts pour les entreprises ?
Les entreprises sont déjà aujourd’hui confrontées aux problématiques de volumétrie. A cela s’y ajoute 3 nouveaux facteurs majeurs entraînant toujours plus de données dans nos systèmes :
Pourquoi CEPÂ ?
Définition : Le Complex Event Processing (CEP) est une technique permettant de manipuler des événements au fur et à mesure de leur prise en compte, d’identifier des relations entre ces événements (corrélation, causalité, patterns), et d’en tirer de l’information sous forme de nouveaux événements dits « dérivés » ou « complexes ».
Le CEP apparaît être une opportunité pour l’analyse et la prise de décision en temps réel là ou même le stockage sur cache/grille de données seul peut montrer ses limites :
Pourquoi faire converger Big Data et CEPÂ ?
L’intérêt principal du CEP réside dans le traitement en mémoire de l’événement avant son stockage, afin de conserver une forte réactivité.
Détails sur l’analyse en temps réel :
Enjeux de l’analyse en temps réel :
L’approche peut se faire par :
Démo ActivePivot Sentinel : nous ne sommes pas en mesure de vous proposer les vidéos aujourd’hui ; nous vous proposons de retrouver les démos en vidéos plus tard.
Suggestion d'articles :
Avec cette vidéo vous allez découvrir comment Kirk a procédé lors de cet atelier pour identifier les points d’amélioration d’un système et la manière de les résoudre. Tout cela sans préparation initiale ni code source : du live optimizing !
Écoutez également Lire la suite de cet article …
Une date à retenir ? Oui !  Le mardi 31/01/2012 pour nous faire part de vos idées sur les sujets IT, techniques, métiers ou liés aux aspects managériaux de la DSI !
Pas d’idée de session ? Aucun problème ! Vous pouvez élire votre session préférée en votant pour elle !  D’ailleurs vous pouvez aussi la partager  pour augmenter le nombre de vote !
Pour rappel : la qualité du résumé de session proposé (fond et forme) sera le critère de sélection principal pour l’équipe USI. Merci donc d’en tenir compte lors du remplissage de ce formulaire.
L’équipe programme étudiera toutes les propositions et sélectionnera les sessions qui lui paraîtront les plus intéressantes. Vous serez peut-être invité à venir présenter votre session lors d’une journée dédiée : mi février et nous informerons de notre décision finale fin mars 2012.
Cliquez ici pour soumettre votre session à l’USI
On attend vos candidatures avec impatience !
Suggestion d'articles :

La prochaine session du Paris Scala User Group aura lieu jeudi 26 Janvier à 19h30 dans les locaux de Xebia.
À cette occasion, Stéphane Landelle nous Lire la suite de cet article …

La revue de presse hebdomadaire des écosystèmes Java/JEE proposée par Xebia.
Actualité éditeurs / SSII
Evénements de notre communauté en France et à l’étranger
Que l’on me pardonne de paraphraser ici la déclaration rituelle qui accompagnait l’inhumation du Roy de France et la transmission immédiate de la monarchie à son successeur désigné.
L’analogie me parait en effet appropriée dès lors que « Adobe Flex », roi incontestable des technologies RIA, est mort et « Apache Flex » est né (du moins c’est en cours).
Alors, faut-il s’en réjouir ? Oui, assurément, c’est une excellente nouvelle, et qu’il conviendra de célébrer justement en temps utile.
Et je dirais même plus, remercions Adobe pour ce cadeau qui nous est offert, en toute franchise, mais sans naïveté.
Il ne nous intéresse pas de chercher à analyser les raisons internes à Adobe qui ont motivé ce choix, laissons à César ce qui lui appartient, et regardons l’avenir de Flex, dont il ne tient qu’à nous qu’il soit glorieux.
Pour nous qui sommes développeurs Flex depuis 2004 et la version 1, nous n’avons cessé de pousser le framework dans ses retranchements, et toujours nous avons réussi à produire des applications (d’entreprise) esthétiques et de qualité, sans sacrifier pour autant l’industrialisation logicielle, qui est, hélas, trop souvent négligée.
A l’heure actuelle, nous affirmons que Flex reste le meilleur environnement de développement d’applications riches multi-plateforme, tant en terme de productivité que de richesse graphique ou fonctionnelle.
Les arguments en faveur (ou pas) de cette thèse ont été déjà largement exposés et sont accessibles via les liens ci-dessous :
Notre intention aujourd’hui est de continuer plus que jamais à utiliser Flex, et de renforcer notre présence dans son éco-système, en poursuivant la publication de composants, et en contribuant activement au framework Apache Flex.
Flex reloaded
Avec (et surtout sans) Adobe, Flex va continuer sa vie. Beaucoup de volontaires participent déjà au projet Apache Flex. De manière générale, les entreprises qui ont choisi Flex comme outil de développement de RIA continueront à l’utiliser, d’abord parce qu’il n’y a pas encore d’alternatives sérieuses offrant les mêmes possibilités et la même productivité.
Chez Kap IT nous n’avons pas diminué notre activité sur Flex, au contraire, nous continuons même à recruter de nouveaux clients (et des développeurs aussi…).
Nous restons convaincus que Flex restera encore pendant plusieurs années la plate-forme de choix pour les applications d’entreprise. Nous continuerons donc à investir dans Flex, sans doute plus qu’avant, en nous investissant dans le projet Spoon et la fondation Apache et en continuant à recruter et former ceux qui partagent cette conviction.
A ce propos, nous participons au « Logo Contest », dans lequel nous avons proposé deux déclinaisons différentes du futur logo Flex (et entre nous, ce changement est plutôt bienvenu) que vous pouvez découvrir dans cet article.
Flex n’est qu’un outil
Notre expertise en matière de RIA d’entreprise ne s’arrête évidement pas à la technologie. Les nombreux projets que nous avons réalisés pour nos clients nous ont permis de capitaliser sur les autres domaines qui permettent de réaliser des applications riches de qualité comme la méthodologie, l’ergonomie, le design ou encore l’assurance qualité. Ces domaines sont indépendants des langages et des plate-formes utilisés et nous sommes donc libres de changer s’il le faut. Si d’aventure une solution pour les RIA d’entreprise aussi productive et puissante que Flex devenait disponible, nous serions prêts.
A suivre…
Les prochains mois seront riches en surprises, surtout, restez online !
Il me reste à vous souhaiter une excellente année 2012, ainsi que beaucoup de projets Flex fructueux et passionnants.
Et de concert, souhaitons tous une Longue Vie à Apache Flex !
OCTO organise le mardi 07 février 2012 à partir de 8h45 un petit-déjeuner gratuit, aux Salons Wagram « L’agilité à grande échelle » : retour d’expérience en partenariat avec Strator.
Un projet de développement logiciel impliquant 80 personnes, distribuées sur 9 équipes réparties dans 4 pays.
Un produit devant soutenir une activité de plus de 5 000 000 de transactions de vente par jour.
Une première mise en production au bout de 6 mois.
Et de nouvelles fonctionnalités tous les deux mois.
Qui a dit que l’agile n’était pas adapté aux gros projets ?
Strator et OCTO Technology se proposent de partager avec vous un retour d’expérience sur la mise en place de méthodes agiles à large échelle : feature-teams, communautés de pratique, interactions avec des équipes off-shore, livraisons fréquentes et mises en production par un simple clic, prise de décisions collaboratives…
A l’issue de ce séminaire nous aurons partagé avec vous :
Ce petit-déjeuner s’adresse aux :
Intervenant(s) :
Philippe Chevalier – Strator, Directeur Technique
Hervé Lourdin – OCTO, Delivery Manager
Mathieu Despriee – OCTO, Manager
Ce petit-déjeuner est à destination de nos clients et prospects en priorité.
Cliquez ici pour vous inscrire au petit-déjeuner : AgilitéSuggestion d'articles :