<?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</title>
	<atom:link href="http://blog.xebia.fr/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.xebia.fr</link>
	<description>J2EE, Agilité et SOA</description>
	<lastBuildDate>Mon, 08 Feb 2010 22:30:10 +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/02/08/revue-de-presse-xebia-146/</link>
		<comments>http://blog.xebia.fr/2010/02/08/revue-de-presse-xebia-146/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 17:06:14 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Guice]]></category>
		<category><![CDATA[Kenaï]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3987</guid>
		<description><![CDATA[

La revue de presse de l&#8217;actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII

Kenaï, fermera, fermera pas ?

Le coin de la technique

Groovy++: bientôt dans votre JVM ?
InfoQ sort un ebook gratuit sur Grails
Maven vers une injection de dépendances via Guice

Actualité éditeurs / SSII
Kenaï, fermera, fermera pas ?
Comme il fallait le prévoir au vu de l&#8217;engouement [...]]]></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&#8217;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/02/08/revue-de-presse-xebia-146/#Kenafermerafermerapas">Kenaï, fermera, fermera pas ?</a></li>
</ul>
<p><strong>Le coin de la technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/02/08/revue-de-presse-xebia-146/#GroovybienttdansvotreJVM">Groovy++: bientôt dans votre JVM ?</a></li>
<li><a href="http://blog.xebia.fr/2010/02/08/revue-de-presse-xebia-146/#InfoQsortunebookgratuitsurGrai">InfoQ sort un ebook gratuit sur Grails</a></li>
<li><a href="http://blog.xebia.fr/2010/02/08/revue-de-presse-xebia-146/#Mavenversuneinjectiondedpendan">Maven vers une injection de dépendances via Guice</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3>
<h4><a name="Kenafermerafermerapas"></a>Kenaï, fermera, fermera pas ?</h4>
<p>Comme il fallait le prévoir au vu de l&#8217;engouement d&#8217;Oracle pour les projets communautaires, la ferme de projets Kenaï vit ses derniers jours en tant que service public. La plateforme lancée en 2008 et construite autour de JRuby, Glassfish et MySQL fournissait un environnement de suivi de projet complet avec la gestion de version, des wikis, des mailing lists et que sais-je encore. Avec NetBeans 6.7, il est même possible de maintenir entièrement son projet depuis son IDE. Le site héberge encore aujourd&#8217;hui quelques 40 000 projets communautaires parmi lesquels on retiendra JRuby et Hudson. Oracle a d&#8217;abord annoncé la fermeture du site sous 60 jours afin de permettre aux projets de migrer vers d&#8217;autres solutions. L&#8217;idée de départ devait être de ré-utiliser la plateforme en interne mais plus du tout ouverte au public.<br />
Faut il y voir les effets de la réaction d&#8217;une communauté importante ou un gros problème de communication : Oracle change son fusil d&#8217;épaule à travers la voix de Ted Farrell qui a clarifié l&#8217;avenir de la plateforme en annonçant que ce serait finalement une migration vers java.net. Dans son annonce, Farrell laisse entendre que tous les efforts seront poussés sur java.net et que la communauté Kenaï pourrait continuer à travailler sans perte sur la nouvelle version de cette ancienne plateforme de développement hosté.<br />
Comme le dit la chanson, trois pas en avant, trois pas en arrière, &#8230;</p>
<ul>
<li><a href="http://www.infoq.com/news/2010/02/kenai_to_close" title="Kena to close sur InfoQ" >Kenaï to close sur InfoQ</a></li>
<li><a href="http://blogs.sun.com/projectkenai/entry/the_future_of_kenai_com" title="Le post de Ted Farrell" >Le post de Ted Farrell</a></li>
</ul>
<h3><a name="Lecoindelatechnique"></a>Le coin de la technique</h3>
<h4><a name="GroovybienttdansvotreJVM"></a>Groovy++: bientôt dans votre JVM ?</h4>
<p>Nous avons éhontément passé sous silence nombre de news du monde Groovy récemment:</p>
<ul>
<li><a href="http://docs.codehaus.org/display/GROOVY/Groovy+1.7+release+notes" title="Groovy 17" >Groovy 1.7</a></li>
<li><a href="http://www.grails.org/1.2.1+Release+Notes" title="Grails 12" >Grails 1.2</a></li>
<li>La sortie du plugin Groovy Eclipse <a href="http://groovy.codehaus.org/Eclipse+Plugin" title="en version 20" >en version 2.0</a></li>
<li>La sortie de <a href="http://groovy.dzone.com/announcements/griffon-021-and-03-beta-1" title="nouvelles versions de Griffon" >nouvelles versions de Griffon</a>, le framework pour  clients lourds qui reprend les idées de Grails</li>
</ul>
<p>Alors pour nous rattraper, nous ne passerons pas à coté de la nouvelle suivante : le développement de Groovy++ ! Alex Tkachman, l&#8217;initiateur du projet nous explique <a href="http://groovy.dzone.com/news/alex-tkachman-static-groovy" title="dans une interview" >dans une interview</a> de quoi il retourne et Roshan Dawrani <a href="http://groovy.dzone.com/articles/sneak-peak-groovy-what-it-why" title="nous explique ce qu'il retient du projet" >nous explique ce qu&#8217;il retient du projet</a>. En fait, malgré tous ses avantages, Groovy est encore assez lent. En tout cas beaucoup plus que Java, à cause de son coté dynamique. L&#8217;idée de Groovy++ est de continuer à utiliser Groovy normalement, mais en pluggant un compilateur spécial pour certaines parties du code annotées avec @Typed. Le code ainsi annoté devra respecter de légères contraintes  (contraintes par rapport au laxisme de Groovy, mais légères par rapport au typage fort de Java). Le compilateur pourra donc effectuer des optimisations, notamment grâce à <a href="http://en.wikipedia.org/wiki/Type_inference" title="l'inférence de type" >l&#8217;inférence de type</a>, et nettement améliorer les performances. Les premiers résultats semblent encourageant en tout cas : 197 fois plus rapide d&#8217;après <a href="http://stronglytypedblog.blogspot.com/2010/02/groovy-performance-now-were-talkin.html" title="ce micro-bench" >ce micro-bench</a> et 33% plus rapide <a href="http://www.touilleur-express.fr/2010/02/08/grovvy-plus-plus/" title="daprs le touilleur" >d&#8217;après cet article lu sur le Touilleur Express</a>.</p>
<p>Alors ce Groovy++, une révolution ? Difficile à dire ! En effet, d&#8217;un coté Groovy est de plus en plus utilisé (notamment à travers Grails) et un coup de boost ne peut pas lui faire de mal. Mais d&#8217;un autre coté, l&#8217;interaction de Groovy et Java étant très avancée, on peut se contenter d&#8217;écrire en Java les parties du programme nécessitant des performances optimales. On peut aussi voir en Groovy++ l&#8217;ajout d&#8217;une énième librairie dans le développement, avec ses contraintes, ses bugs&#8230; D&#8217;autant que, pour des problèmes de licence sur certaines parties de code, le compilateur n&#8217;est pas encore OpenSource (ce qui est prévu pour la suite). Donc, si vous sous sentez l&#8217;âme d&#8217;un aventurier ou que vous avez désespérément besoin de gains de performances tout en gardant la &laquo;&nbsp;Groovy attitude&nbsp;&raquo;, n&#8217;hésitez pas à nous faire vos retours sur l&#8217;utilisation de Grovvy++ !</p>
<h4><a name="InfoQsortunebookgratuitsurGrai"></a>InfoQ sort un ebook gratuit sur Grails</h4>
<p>InfoQ vient de sortir, dans sa série <a href="http://www.google.com/search?q=minibooks+site%3Awww.infoq.com" title=""Minibooks"" >&laquo;&nbsp;Minibooks&nbsp;&raquo;</a> la seconde version de son <a href="http://www.infoq.com/minibooks/grails-getting-started" title="Getting started with Grails" >&laquo;&nbsp;Getting started with Grails&nbsp;&raquo;</a>. La première version, datant d&#8217;il y a déjà 3 ans, était basée sur Grails 0.3.1 alors que celle-ci s&#8217;appuie sur le tout récent 1.2. Le principe reste identique : les auteurs s&#8217;appuient sur une application de gestion de course de chevaux pour nous faire découvrir au fur et à mesure nombre des possibilités offertes par le framework. A la vue du sommaire, largement remanié, on peut penser que les changements ont été profonds. Sans avoir encore lu cette seconde édition, nous pouvons d&#8217;ores et déjà la recommander chaudement à toute personne qui s&#8217;intéresse à Grails et voudrait rapidement avoir un éventail clair des possibilités qu&#8217;il offre (si elle est dans la même veine que la précédente). D&#8217;autant qu&#8217;au format électronique, le livre est gratuit (juste besoin de s&#8217;inscrire à InfoQ)!</p>
<h4><a name="Mavenversuneinjectiondedpendan"></a>Maven vers une injection de dépendances via Guice</h4>
<p>Sonatype (<a href="http://www.infoq.com/news/2010/02/maven3_guice" title="via InfoQ" >via InfoQ</a>) a annoncé la migration progressive de Maven vers une injection de dépendances gérée par Google Guice. Ce qui signifie l&#8217;abandon à moyen terme de Plexus, le framework quelque peu obsolète (et abscons, faute de documentation) utilisé depuis les débuts du framework de build. Dans un premier temps, la migration sera gérée via un bridge créé sous Guice.<br />
De plus, l&#8217;introduction de Guice devrait se faire via les annotations de la JSR 330, ce qui rendra Maven moins adhérent à Guice dans le cas d&#8217;une nouvelle migration vers un autre framework d&#8217;IoC.<br />
Cette nouvelle devrait réjouir les développeurs de plugins, qui n&#8217;auront plus à maitriser les arcanes de Plexus. Autre conséquence, plus directe, les développeurs Maven n&#8217;auront plus à jouer les comitters Plexus pour débugger et ou faire avancer cet outil (qui devrait rapidement se diriger vers une fin de vie en l&#8217;absence de ce soutien de poids).<br />
On peut noter que Jason van Zyl, le créateur de Maven, et Bob Lee, l&#8217;un des principaux artisans de Guice, avaient œuvré ensemble à imposer la JSR 330 face à la JSR 299 (<a href="http://blog.xebia.fr/2009/05/11/inject-standardisation-de-linjection-de-dependances/#more-1979" title="la fameuse bataille Inject contre WebBeans" >la fameuse bataille @Inject contre WebBeans</a>).</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/08/revue-de-presse-xebia-146/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Just DeployIt !</title>
		<link>http://blog.xebia.fr/2010/02/04/just-deployit/</link>
		<comments>http://blog.xebia.fr/2010/02/04/just-deployit/#comments</comments>
		<pubDate>Thu, 04 Feb 2010 13:31:23 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Exploitation]]></category>
		<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[deploiement]]></category>
		<category><![CDATA[DeployIt]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3981</guid>
		<description><![CDATA[
Le 1er février dernier, XebiaLabs a mis en ligne une version dite &#171;&#160;Personnelle&#160;&#187; de &#171;&#160;Deployit&#160;&#187;, sa solution d&#8217;automatisation des déploiements J2EE.
Cette version est gratuite et possède toutes les fonctionnalités de la version Enterprise, exception faite des aspects sécurité. Elle inclut une licence permettant à un utilisateur unique et identifié d&#8217;utiliser l&#8217;outil, sans limitations. Deployit Personal [...]]]></description>
			<content:encoded><![CDATA[
<p>Le 1er février dernier, <a href="http://www.xebialabs.com/">XebiaLabs</a> a mis en ligne une <a href="http://www.xebialabs.com/deployit-personal-edition-request">version dite &laquo;&nbsp;Personnelle&nbsp;&raquo; de &laquo;&nbsp;Deployit&nbsp;&raquo;</a>, sa solution d&#8217;automatisation des déploiements J2EE.</p>
<p>Cette version est gratuite et possède toutes les fonctionnalités de la version Enterprise, exception faite des aspects sécurité. Elle inclut une licence permettant à un utilisateur unique et identifié d&#8217;utiliser l&#8217;outil, sans limitations. Deployit Personal Edition inclut en standard des plugins pour IBM WebSphere AS, Oracle WebLogic Server et JBoss AS. Cette version peut être téléchargée gratuitement avec sa documentation et des tutoriels permettant de comprendre son fonctionnement.</p>
<p>Par ailleurs, avec Deployit Personal Edition, vous avez tout à disposition pour développer vos propres plugins : la documentation de l&#8217;API de plugin, les tutoriels et le code source des plugins existants. Enfin, en plus du support technique fourni via le web, notre équipe support peut être contactée gratuitement pendant 90 jours !</p>
<p>Si <a href="http://www.xebialabs.com/deployit-personal-edition-request">Deployit Personal Edition</a> permet de bénéficier des avantages de Deployit (y compris en Production), il conviendra d&#8217;opter pour la version Enterprise incluant ses fonctionnalités de sécurité, son support technique complet et sa licence multi-utilisateurs dans le cadre d&#8217;un environnement plus complexe d&#8217;Entreprise.</p>
<div align="center">
	<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Fc88Jw4A8kc&#038;rel=0&#038;color1=0x234900&#038;color2=0x4e9e00&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><embed src="http://www.youtube.com/v/Fc88Jw4A8kc&#038;rel=0&#038;color1=0x234900&#038;color2=0x4e9e00&#038;hl=en_US&#038;feature=player_embedded&#038;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="425" height="344"></embed></object>
</div>
<p>Deployit Personal Edition peut être obtenue en cliquant sur le lien suivant : <a href="http://www.xebialabs.com/deployit-personal-edition-request">http://www.xebialabs.com/deployit-personal-edition-request</a>.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/04/just-deployit/feed/</wfw:commentRss>
		<slash:comments>3</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[J2EE]]></category>
		<category><![CDATA[Java]]></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 projet 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-4">
<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-5">
<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-6">
<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é applicative (é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 temporaire 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>25</slash:comments>
		</item>
		<item>
		<title>Ma rencontre avec Ken Schwaber</title>
		<link>http://blog.xebia.fr/2010/02/02/ma-rencontre-avec-ken-schwaber/</link>
		<comments>http://blog.xebia.fr/2010/02/02/ma-rencontre-avec-ken-schwaber/#comments</comments>
		<pubDate>Tue, 02 Feb 2010 08:09:37 +0000</pubDate>
		<dc:creator>Luc Legardeur</dc:creator>
				<category><![CDATA[Mot du président]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3944</guid>
		<description><![CDATA[
Le French Scrum User Group a eu le grand privilège de rencontrer Ken la semaine dernière grâce à notre sponsor Microsoft qui le recevait dans le cadre de formations organisées en France.
Je souhaite relater ici les propos qui se sont tenus lors de cet échange avec Ken. 
Quant à mes impressions personnelles, je ne les [...]]]></description>
			<content:encoded><![CDATA[
<p>Le French Scrum User Group a eu le grand privilège de rencontrer Ken la semaine dernière grâce à notre sponsor Microsoft qui le recevait dans le cadre de formations organisées en France.</p>
<p>Je souhaite relater ici les propos qui se sont tenus lors de cet échange avec Ken. </p>
<p>Quant à mes impressions personnelles, je ne les partagerai pas avec vous car, en tant que Président du SUG, je souhaite rester neutre face aux différents courants de pensée, organismes certificateurs ou non, canal historique ou dissidents …</p>
<p>Le premier contact avec Ken est surprenant. Le co-fondateur de Scrum avec <a href="http://jeffsutherland.com/scrum/">Jeff Sutherland</a>, la figure légendaire de l’agilité est  fatiguée, un peu diminuée physiquement également. Son accident de vélo a laissé des traces. </p>
<p>Ken m’a glissé à l’oreille : <em>"c’est parce que je fais du vélo que j’ai failli mourir mais c’est également parce que je fais du vélo (et donc que je suis en forme physique) que j’ai pu m’en sortir."</em></p>
<p>Derrière son visage marqué par les décalages horaires permanents, se cache un personnage qui n’a rien perdu de sa verve, de son dynamisme, de son humour, de ses convictions.</p>
<p>Ken est un passionné de développement logiciel, cela se voit.</p>
<p>Nous lui avions demandé de nous présenter <a href="http://www.scrum.org/">Scrum.org</a> dont il est le fondateur.</p>
<p>Première définition : <a href="http://www.scrum.org/">Scrum.org</a> a pour objectif de <em>"préserver l’intégrité et la consistance de Scrum"</em> (sic !).</p>
<p>Allons plus loin.</p>
<p><a href="http://www.scrum.org/">Scrum.org</a> propose des tests en ligne <em>(assessments)</em> et des cours destinés aux praticiens Scrum.<br />
Parmi les tests en ligne, notons l’arrivée de :</p>
<ul>
<li>Scrum Developer (SD), test destiné aux développeurs.</li>
<li>Scrum Open, test en ligne destiné à évaluer le premier niveau de connaissances Scrum d’un utilisateur.</li>
<li>Scrum Level II, le test pour les expérimentés.</li>
</ul>
<p>Attention !: Pour réviser et réussir ces tests,  il faudra avoir lu le Scrum Guide dont l’auteur est … Ken  Schwaber.</p>
<p>A noter que Scrum n’est plus agnostique et que des cours Scrum Developer purement .net ou purement Java sont au programme.</p>
<p>La prochaine rencontre se fera avec Scott Ambler, le 15 mars grâce à IBM. Je donnerai des informations précises dans le cadre des activités du SUG.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/02/ma-rencontre-avec-ken-schwaber/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145/</link>
		<comments>http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 17:33:52 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[HBase]]></category>
		<category><![CDATA[JackRabbit]]></category>
		<category><![CDATA[Lucene]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[Paris JUG]]></category>
		<category><![CDATA[scala]]></category>
		<category><![CDATA[Solr]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3938</guid>
		<description><![CDATA[

La revue de presse de l'actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII

http://sun.com 301 moved permanently

Le coin de la technique

Première Beta pour Scala 2.8.0
Apache JackRabbit implémente maintenant JCR 2.0
Un œil sur Lucene, Solr et HBase

Evènements de notre communauté en France et à l'étranger

2ème anniversaire du Paris JUG

Actualité éditeurs / SSII
http://sun.com 301 moved permanently
C'est officiel, [...]]]></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/02/01/revue-de-presse-xebia-145#ahrefhttpsuncomtitlehttpsuncom"><a href="http://sun.com" title="httpsuncom" >http://sun.com</a> 301 moved permanently</a></li>
</ul>
<p><strong>Le coin de la technique</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145#PremireBetapourScala">Première Beta pour Scala 2.8.0</a></li>
<li><a href="http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145#ApacheJackRabbitimplmentemaint">Apache JackRabbit implémente maintenant JCR 2.0</a></li>
<li><a href="http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145#UnilsurLuceneSolretHBase">Un œil sur Lucene, Solr et HBase</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/02/01/revue-de-presse-xebia-145#meanniversaireduParisJUG">2ème anniversaire du Paris JUG</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3>
<h4><a name="ahrefhttpsuncomtitlehttpsuncom"></a><a href="http://sun.com" title="httpsuncom" >http://sun.com</a> 301 moved permanently</h4>
<p>C'est officiel, Sun n'est plus. Outre les messages humoristiques (teintés d'amertume, <a href="http://blogs.sun.com/jag/entry/so_long_old_friend" title="chez James Gosling" >chez James Gosling</a> par exemple), le redirect de <a href="http://sun.com" title="http://sun.com" >http://sun.com</a> vers <a href="http://oracle.com" title="http://oracle.com" >http://oracle.com</a>, le rebranding de tous les logos (sur la page de <a href="http://java.sun.com/javase/downloads/index.jsp" title="téléchargement du sdk" >téléchargement du sdk</a> par exemple), la concrétisation du rachat de Sun par Oracle fait ressurgir les questions, orientées produit, que l'on se posait déjà lors de l'annonce de ce rachat. Dionysios G. Synodinos offre, via InfoQ, <a href="http://www.infoq.com/news/2010/01/sunset" title="une liste dtaille de celles ci" >une liste détaillée de celles ci</a> :</p>
<ul>
<li><strong>Java, la JVM, le JCP</strong> : Thomas Kurian a  annoncé son intention de tirer le meilleur de chacune des deux JVM de la firme, Hotspot et JRockit, pour en faire le choix par défaut face à la JVM d'IBM. Les développements planifiés sont alléchants, avec entres autres un meilleur support du multi cœurs, suppression du permGen (pour permettre une meilleure intégration des langages type Groovy ou JRuby). Concernant le JCP, aucune annonce claire n'a été faite pour l'instant.</li>
<li><strong>MySql </strong>: cette base de données est annoncée comme complémentaire de la base historique d'Oracle. Elle bénéficiera, selon Larry Ellison, de plus d'attentions que par le passé, et les préoccupations marketing seront dissociées de celles du <em>grand</em> moteur, avec une équipe commerciale dédiée.</li>
<li><strong>JavaFx et RIA </strong>: Oracle a de nouveau affiché sa volonté d'investir massivement dans ces technologies. Certains analystes avancent que cet investissement viendrait boucher le trou laissé par l'échec d'intégration de Flex avec la suite BEA.</li>
<li><strong>Netbeans </strong>: des produits cités, c'est le plus menacé. Oracle laisse planer le doute, mais serait plus enclin à pousser JDevelopper. Restent les rumeurs d'une survie en tant que second couteau, ou bien un hypothétique reversement du code source à la communauté ...</li>
<li><strong>Glassfish </strong>: face au mastodonte Weblogic, le serveur de référence JEE 6 serait proposé comme <em>serveur d'appoint</em> (l'expression officielle est <em>departemental solution</em> à opposer à l'<em>enterprise solution</em> Weblogic). Contrairement à MySql, Oracle n'annonce pas d'équipe marketing ou commerciale dédiée. Certains (comme <a href="http://blogs.sun.com/alexismp/entry/sun_oracle_a_set_of" title="Alexis MP" >Alexis MP</a>) y voient une bonne nouvelle (Oracle présenterait une offre comparable à celle d'IBM - WAS Community Edition / WAS). D'autres au contraire,  y voient le premier clou dans le cercueil de ce serveur (avec là encore une analogie à IBM et l'anémique Geronimo).</li>
<li><strong>Service Cloud </strong>: là c'est officiel, les projets de Sun sont abandonnés.</li>
<li><strong>Investissement dans l'Open Source</strong>: Oracle n'a pas fait d'annonce officielle sur la stratégie à venir, mais la majorité des journalistes / bloggers de l'eco système JEE sont très pessimistes vis à vis de la capacité d'investissement d'Oracle dans le libre.</li>
<li><strong>Effectifs </strong>: sur un terrain plus terre à terre, Larry Ellison envisage le départ immédiat de 2000 personnes, et l'embauche de plus de 2000 nouveaux employés, principalement dans des postes d'ingénieurs, ou de commerciaux. Il ne s'est bien sur pas engagé sur un nouveau plan à plus long terme. Côté direction, le départ de Jonathan Schwartz semble entériné, et l'avenir de Scott McNealy est plus que flou.</li>
</ul>
<h3><a name="Lecoindelatechnique"></a>Le coin de la technique</h3>
<h4><a name="PremireBetapourScala"></a>Première Beta pour Scala 2.8.0</h4>
<p>Quelques nouvelles de <a href="http://www.scala-lang.org/" title="Scala" >Scala</a> avec la sortie de la <a href="http://www.scala-lang.org/node/4587" title="première Beta de la version 2.8.0" >première Beta de la version 2.8.0</a>, information relayée par <a href="http://java.dzone.com/news/scala-28-improves-scala-ide" title="JavaLobby" >JavaLobby</a> et <a href="http://www.infoq.com/news/2010/01/scala-beta1" title="InfoQ" >InfoQ</a>.</p>
<p><a href="http://www.scala-lang.org/node/4587#Whatisnew" title="Nouvelles fonctionnalités" >Nouvelles fonctionnalités</a> et <a href="http://www.scala-lang.org/node/299" title="nombreuses corrections de bugs" >nombreuses corrections de bugs</a> sont au menu :</p>
<ul>
<li>l'API <code>Collection</code> a ainsi été reconçue,</li>
<li>l'API <code>XML</code> a aussi été améliorée,</li>
<li>on peut utiliser des arguments nommés et/ou donner une valeur par défaut,</li>
<li>les <a href="http://www.scala-lang.org/node/119" title="Packages" >Packages</a> peuvent désormais contenir des méthodes, des champs ou des types,</li>
<li>il est possible d'utiliser des acteurs <em>light</em>,</li>
<li>le support des annotations Java <em>nested</em> a été ajouté.</li>
</ul>
<p>De nombreux efforts ont aussi été apportés au niveau de la vitesse de compilation qui est maintenant plus rapide de 50%.<br />
Côté outils, le plugin eclipse a été profondément remanié et de nombreuses opérations sont désormais réalisées par le compilateur Scala <em>(et non plus l'IDE comme c'est le cas aujourd'hui)</em>. <a href="http://lampsvn.epfl.ch/trac/scala/wiki/Scaladoc" title="Scaladoc 2" >Scaladoc 2</a> fait aussi sont apparition avec un nouveau <em>look-and-feel</em> et plusieurs autres améliorations. Et pour le REPL, il supporte la complétion sur les objets, méthodes, champs et bien d'autres.</p>
<p>En bref, une release pas si mineure que ça ! Le téléchargement se passe <a href="http://www.scala-lang.org/downloads#RC" title="ici" >ici</a>.<br />
A noter aussi la non compatibilité binaire entre la version 2.8 et la branche 2.7.</p>
<h4><a name="ApacheJackRabbitimplmentemaint"></a>Apache JackRabbit implémente maintenant JCR 2.0</h4>
<p>Sans grand bruit, l'équipe d'Apache JackRabbit a mis à disposition cette semaine la version 2.0 finale de leur projet. JackRabbit 2.0 est maintenant entièrement conforme à la <a href="http://jcp.org/en/jsr/summary?id=283" title="JSR-283 (Java Content Repository 2.0)" >JSR-283 (Java Content Repository 2.0)</a> dont il est l'implémentation de référence.</p>
<p>Java Content Repository n'est pas une technologie très répandue, non pas parce qu'elle n'est pas satisfaisante, mais parce qu'elle adresse des besoins très spécifiques : JCR permet le stockage de documents sous forme arborescente tout en offrant des capacités transactionnelles, le <em>versionning</em>, ou encore une gestion de verrous. Les principaux cas d'utilisation sont les systèmes de gestion de documents, les CMS, ou des systèmes de stockage de fichiers organisés tels que le propose <a href="http://www.jfrog.org/products.php" title="Artifactory" >Artifactory</a>, un <em>repository</em> Maven fonctionnant avec JCR.</p>
<p>JCR 2.0 apporte, outre un rafraichissement de son API, quelques améliorations majeures :</p>
<ul>
<li><strong>Query Object Model</strong> : un nouveau modèle de requêtes objet à l'image de <code>Criteria</code> chez Hibernate ou de <code>QueryBuilder</code> dans JPA 2.0. Nous vous parlions déjà <a href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#UneAPICriteriapourJCR" title="il y quelques mois" >il y quelques mois</a> des perspectives liées à cette fonctionnalité au travers l'API proposée par Magnolia.</li>
</ul>
<ul>
<li><strong>API de</strong> <strong><em>retention</em></strong> <strong>et</strong> <strong><em>hold</em></strong> : cette API vient complémenter l'API de <em>lock</em> déjà présente afin de permettre des politiques de rétention de documents particulières.</li>
</ul>
<ul>
<li><strong>API de contrôle d'accès</strong> : les aspects de sécurité <a href="http://www.day.com/specs/jcr/1.0/6.9_Access_Control.html" title="taient peu abords" >étaient peu abordés</a> par la JSR-170 (JCR 1.0). Une API plus complète leur est désormais dédiée.</li>
</ul>
<p>Au-delà de la conformance à JCR 2.0, JackRabbit 2.0 est maintenant basé sur Java 5, et offre la possibilité de recherche <em>full-text</em> sur les documents grâce à Apache Tika, un sous-projet de Lucene.</p>
<p>Ces changements ne suffiront probablement pas à eux seuls à élargir la communauté d'utilisateurs de JCR ; en revanche le récent engouement pour les technologies NoSQL peut contribuer à attirer vers JCR des équipes qui, jusqu'alors, auraient été plus frileuses à considérer un autre stockage de données qu'un SGBDR.</p>
<h4><a name="UnilsurLuceneSolretHBase"></a>Un œil sur Lucene, Solr et HBase</h4>
<p>Malgré son jeune age, <a href="http://hadoop.apache.org/hbase/" title="HBase" >HBase</a> suscite un intérêt suffisant pour pousser certaines entreprises <a href="http://blog.xebia.fr/2009/11/18/devoxx-jour-1-nosql-avec-hbase/" title=" lutiliser en ltat" >à l'utiliser en l'état</a> en production : les services apportés par cette base de données NoSQL suffisent à faire oublier l'expérience difficile que peut parfois réserver ce projet.</p>
<p>Dans un tel contexte toute source d'information est utile. Le <a href="https://issues.apache.org/jira/browse/HBASE" title="Jira" >Jira</a> et la <a href="http://hadoop.apache.org/hbase/mailing_lists.html" title="mailing list" ><em>mailing list</em></a> du projet deviennent alors des sources d'informations précieuses qu'il s'agit de suivre avec attention pour être au fait des dernières corrections et solutions aux problèmes couramment rencontrés.<br />
Pour répondre à ce besoin, Sematext, une entreprise américaine spécialisée sur Lucene, Solr et HBase <a href="http://blog.sematext.com/" title="diffuse depuis peu un digest" >diffuse depuis peu un <em>digest</em></a> régulier des nouveautés importantes sur chacune de ces technologies.</p>
<p>On apprend ainsi qu'une abstraction est en cours de développement pour HBase. Nommée <a href="http://www.hbql.com/" title="HBql" >HBql</a>, elle vise à offrir une API proche de JDBC et un langage de requête SQL, ce qui constituerait un environnement de développement plus familier aux développeurs démarrant avec HBase (mais pas forcément plus efficace...).<br />
Du coté de la communauté Lucene / Solr, c'est la recherche géo-spaciale qui semble actuellement monopoliser l'intérêt. Cette possibilité est présente <a href="http://blog.xebia.fr/2009/09/28/revue-de-presse-xebia-126/#Lucenevolueetprparelavenir" title="depuis la version 2.9" >depuis la version 2.9</a> dans Lucene et correspond à l'air du temps puisque <a href="http://blog.xebia.fr/2009/07/27/revue-de-presse-xebia-119/#PostGISleSIGOpenSourcequimonte" title="la golocalisation devient courante" >la géo-localisation devient courante</a>.</p>
<h3><a name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l'étranger</h3>
<h4><a name="meanniversaireduParisJUG"></a>2ème anniversaire du Paris JUG</h4>
<p>Mardi 9 février 2010 aura lieu le deuxième anniversaire du <a href="http://www.parisjug.org/" title="Paris Java User Group" >Paris Java User Group</a>.</p>
<p>Pour l'occasion, l'équipe du Paris JUG nous a concocté une soirée spéciale sur le thème de l'Open Source :</p>
<ul>
<li>18h45 à 19h00 : Accueil</li>
<li>19h00 à 19h10 : Le mot de l'équipe</li>
<li>19h10 à 20h00 : Keynote de Sacha Labourey</li>
<li>20h00 à 20h45 : L'open source en France</li>
<ul>
<li>Comment Obeo est devenu membre stratégique de la fondation Eclipse</li>
<li>XWiki.org vs XWiki.com</li>
</ul>
<li>20h45 à 21h30 : Buffet</li>
<li>21h30 à 23h00 : L'open source en France : Développons en Java</li>
<ul>
<li>jCaptcha</li>
<li>Play! framework une (r)évolution pour les applications web en Java</li>
<li>jax-doclets</li>
<li>Présentation d'eXo Platform</li>
</ul>
<li>23h00 à ... : 3ème mi-temps des juggers</li>
</ul>
<p>Cette soirée aura lieu <a href="http://www.parisjug.org/xwiki/bin/view/Location/SorbonneParisIV" title="dans un amphi de 500 places de la Sorbonne (108 Boulevard Malesherbes dans le 17ème)" >dans un amphi de 500 places de la Sorbonne (108 Boulevard Malesherbes dans le 17ème)</a>.</p>
<ul>
<li><a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209" title="Le programme dtaill est disponible sur le site du Paris JUG" >Le programme détaillé est disponible sur le site du Paris JUG</a>.</li>
<li><a href="http://www.jugevents.org/jugevents/event/23793" title="Les inscriptions se font par ici" >Les inscriptions se font par ici</a>.</li>
<li><a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209Cocktail" title="Pour participer  la troisime mitemps exceptionnelle cest par ici" >Pour participer à la troisième mi-temps exceptionnelle, c'est par ici</a>.</li>
</ul>
<p>Xebia est fière d'être sponsor de l'événement.</p>
<p>En espérant vous voir nombreux ...</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/01/revue-de-presse-xebia-145/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>En aparté avec Jeff Sutherland</title>
		<link>http://blog.xebia.fr/2010/02/01/en-aparte-avec-jeff-sutherland/</link>
		<comments>http://blog.xebia.fr/2010/02/01/en-aparte-avec-jeff-sutherland/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 12:58:22 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3927</guid>
		<description><![CDATA[
Xebia vous invite le mardi 09 février 2010 à une soirée en aparté avec Jeff Sutherland.
Cette soirée se déroulera sur le modèle Birds of Feather (BoF) à partir de 19h00 dans nos locaux (156 Boulevard Haussmann à Paris). Elle sera l’occasion d’échanger directement avec Jeff Sutherland et de profiter de son expérience unique en tant [...]]]></description>
			<content:encoded><![CDATA[
<p>Xebia vous invite le mardi 09 février 2010 à une soirée en aparté avec Jeff Sutherland.</p>
<p>Cette soirée se déroulera sur le modèle <a href="http://en.wikipedia.org/wiki/Birds_of_a_Feather_(computing)">Birds of Feather (BoF)</a> à partir de 19h00 dans nos locaux <em>(156 Boulevard Haussmann à Paris)</em>. Elle sera l’occasion d’<strong>échanger directement avec Jeff Sutherland</strong> et de profiter de son expérience unique en tant que père de la méthode ayant plus de 10 ans d’expérience sur Scrum.</p>
<p>Le même soir que le <a href="http://blog.xebia.fr/2010/02/01/2eme-anniversaire-du-paris-jug/">deuxième anniversaire du Paris JUG</a> ? Oui, Jeff Sutherland passe rarement à Paris, nous aurions aimé que les événements ne se chevauchent pas mais nous n'avons pas trouvé d'autre solution. Donc nous sponsorisons la soirée anniversaire du JUG et nous organisons cet aparté avec Jeff Sutherland <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p>Le nombre de place étant limitées, merci de vous inscrire via le formulaire ci-après <em>(premiers arrivés, premiers servis)</em> :</p>

		<div id="usermessage5a" class="cf_info "></div>
		<form enctype="multipart/form-data" action="/feed/#usermessage5a" method="post" class="cform" id="cforms5form">
		<fieldset class="cf-fs1">
		<legend>En aparté avec Jeff Sutherland</legend>
		<ol class="cf-ol">
			<li id="li-5-2"><label for="cf5_field_2"><span>Votre nom</span></label><input type="text" name="cf5_field_2" id="cf5_field_2" class="single fldrequired" value="" onfocus="clearField(this)" onblur="setField(this)"/><span class="reqtxt">(obligatoire)</span></li>
			<li id="li-5-3"><label for="cf5_field_3"><span>Votre prénom</span></label><input type="text" name="cf5_field_3" id="cf5_field_3" class="single fldrequired" value="" onfocus="clearField(this)" onblur="setField(this)"/><span class="reqtxt">(obligatoire)</span></li>
			<li id="li-5-4"><label for="cf5_field_4"><span>Votre adresse email</span></label><input type="text" name="cf5_field_4" id="cf5_field_4" class="single fldemail fldrequired" value="" onfocus="clearField(this)" onblur="setField(this)"/><span class="emailreqtxt">(veuillez entrer une adresse email valide)</span></li>
			<li id="li-5-5"><label for="cf5_field_5"><span>Votre site web</span></label><input type="text" name="cf5_field_5" id="cf5_field_5" class="single" value="" onfocus="clearField(this)" onblur="setField(this)"/></li>
			<li id="li-5-6"><label for="cf5_field_6"><span>Informations complémentaires</span></label><textarea cols="30" rows="8" name="cf5_field_6" id="cf5_field_6" class="area" onfocus="clearField(this)" onblur="setField(this)"></textarea></li>
			<li id="li-5-7"><label for="cforms_captcha5" class="seccap"><span>Captcha anti-spam</span></label><input type="text" name="cforms_captcha5" id="cforms_captcha5" class="secinput" value=""/><img id="cf_captcha_img5" class="captcha" src="http://blog.xebia.fr/wp-content/plugins/cforms/cforms-captcha.php?ts=5&amp;c1=4&amp;c2=5&amp;ac=abcdefghijkmnpqrstuvwxyz23456789&amp;i=i&amp;w=115&amp;h=25&amp;c=000066&amp;l=000066&amp;f=font4.ttf&amp;a1=-12&amp;a2=12&amp;f1=17&amp;f2=19&amp;b=1.gif" alt=""/><a title="reset captcha image" href="javascript:reset_captcha('5')"><img class="captcha-reset" src="http://blog.xebia.fr/wp-content/plugins/cforms/images/spacer.gif" alt="Captcha"/></a></li>
		</ol>
		</fieldset>
		<fieldset class="cf_hidden">
			<legend>&nbsp;</legend>
			<input type="hidden" name="cf_working5" id="cf_working5" value="Veuillez%20patienter%20..."/>
			<input type="hidden" name="cf_failure5" id="cf_failure5" value="Certains%20champs%20obligatoires%20ne%20sont%20pas%20renseign%C3%A9s.%20Merci%20de%20les%20corriger."/>
			<input type="hidden" name="cf_codeerr5" id="cf_codeerr5" value="Please%20double-check%20your%20verification%20code."/>
			<input type="hidden" name="cf_customerr5" id="cf_customerr5" value="yyy"/>
			<input type="hidden" name="cf_popup5" id="cf_popup5" value="nn"/>
		</fieldset>
		<p class="cf-sb"><input type="submit" name="sendbutton5" id="sendbutton5" class="sendbutton" value="Envoyez la demande" onclick="return cforms_validate('5', false)"/></p>
		</form>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/01/en-aparte-avec-jeff-sutherland/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>2ème anniversaire du Paris JUG</title>
		<link>http://blog.xebia.fr/2010/02/01/2eme-anniversaire-du-paris-jug/</link>
		<comments>http://blog.xebia.fr/2010/02/01/2eme-anniversaire-du-paris-jug/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 08:09:52 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JUG]]></category>
		<category><![CDATA[Paris JUG]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3919</guid>
		<description><![CDATA[

Mardi 9 février 2010 aura lieu le deuxième anniversaire du Paris Java User Group.
Pour l’occasion, l’équipe du Paris JUG nous a concocté une soirée spéciale sur le thème de l’Open Source :

18h45 à 19h00 : Accueil
19h00 à 19h10 : Le mot de l'équipe
19h10 à 20h00 : Keynote de Sacha Labourey
20h00 à 20h45 : L'open source [...]]]></description>
			<content:encoded><![CDATA[
<p><img src="http://blog.xebia.fr/wp-content/uploads/2010/02/tag_anniversaire1501.jpg" style="margin: 1em 1em 1em 1em; float: right;" /></p>
<p>Mardi 9 février 2010 aura lieu le deuxième anniversaire du <a href="http://www.parisjug.org/">Paris Java User Group</a>.</p>
<p>Pour l’occasion, l’équipe du Paris JUG nous a concocté une soirée spéciale sur le thème de l’Open Source :</p>
<ul>
<li>18h45 à 19h00 : Accueil</li>
<li>19h00 à 19h10 : Le mot de l'équipe</li>
<li>19h10 à 20h00 : Keynote de Sacha Labourey</li>
<li>20h00 à 20h45 : L'open source en France</li>
<ul>
<li>Comment Obeo est devenu membre stratégique de la fondation Eclipse</li>
<li>XWiki.org vs XWiki.com</li>
</ul>
<li>20h45 à 21h30 : Buffet</li>
<li>21h30 à 23h00 : L'open source en France : Développons en Java</li>
<ul>
<li>jCaptcha</li>
<li>Play! framework une (r)évolution pour les applications web en Java</li>
<li>jax-doclets</li>
<li>Présentation d'eXo Platform</li>
</ul>
<li>23h00 à ... : 3ème mi-temps des juggers</li>
</ul>
<p>Cette soirée aura lieu <a href="http://www.parisjug.org/xwiki/bin/view/Location/SorbonneParisIV">dans un amphi de 500 places de la Sorbonne <em>(108 Boulevard Malesherbes dans le 17ème)</em></a>.</p>
<ul>
<li><a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209">Le programme détaillé est disponible sur le site du Paris JUG</a>.</li>
<li><a href="http://www.jugevents.org/jugevents/event/23793">Les inscriptions se font par ici</a>.</li>
<li><a href="http://www.parisjug.org/xwiki/bin/view/Meeting/20100209Cocktail">Pour participer à la troisième mi-temps exceptionnelle, c’est par ici</a>.</li>
</ul>
<p>Xebia est fière d'être sponsor de l'événement.</p>
<p>En espérant vous voir nombreux ...</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/02/01/2eme-anniversaire-du-paris-jug/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Performance, les Xebians jouent les démineurs</title>
		<link>http://blog.xebia.fr/2010/01/27/performance-les-xebians-jouent-les-demineurs/</link>
		<comments>http://blog.xebia.fr/2010/01/27/performance-les-xebians-jouent-les-demineurs/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 17:19:40 +0000</pubDate>
		<dc:creator>Pablo Lopez</dc:creator>
				<category><![CDATA[J2EE]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[log4j]]></category>
		<category><![CDATA[VisualVM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3883</guid>
		<description><![CDATA[

Le premier XKE dans nos nouveaux locaux a donné lieu à de bien curieuses scènes : des bisounours ont hué des poubelles sous le regard moqueur de pokemons ! Et, non, les cartons de déménagement ne nous sont pas tombés sur la tête. Ce n'était là que quelques uns des noms choisis par des équipes [...]]]></description>
			<content:encoded><![CDATA[
<p><img style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2010/01/picto.png" alt="" /></p>
<p>Le premier <a title="XKE" href="http://blog.xebia.fr/2008/03/03/un-xke-chez-xebia/">XKE</a> <a title="dans nos nouveaux locaux" href="http://blog.xebia.fr/2010/01/15/2010-xebia-fait-peau-neuve/">dans nos nouveaux locaux</a> a donné lieu à de bien curieuses scènes : des <em>bisounours</em> ont hué des <em>poubelles</em> sous le regard moqueur de <em>pokemons</em> ! Et, non, les cartons de déménagement ne nous sont pas tombés sur la tête. Ce n'était là que quelques uns des noms choisis par des équipes de 3 à 4 consultants, qui se sont mesurés dans un concours de tuning de performance, sur une application Java EE standard, buggée (<em>volontairement</em>, pour une fois) par les maîtres de cérémonie, <a title="Guillaume Bodet" href="http://blog.xebia.fr/author/gbodet/">Guillaume Bodet</a> et <a title="Cyrille Le Clerc" href="http://blog.xebia.fr/author/cleclerc/">Cyrille Le Clerc</a>. Tous les participants se sont vus remettre une VM, contenant un Tomcat, une application (<em>PetClinic</em> de Spring, revue et "corrigée") et des scripts de performance JMeter. Le code source n'a, dans un premier temps, pas été fourni.</p>
<p>Pour tous, un seul but : faire diminuer les temps de réponses de l'application.</p>
<p>Les règles étaient les suivantes :</p>
<ul>
<li>Un bug n'est considéré comme trouvé que lorsqu'il a été identifié, qu'un correctif a été proposé et que la preuve est faite que ce correctif permet d'améliorer significativement les temps de réponse.</li>
<li>Il existe trois niveaux de difficulté, allant du bug évident à l'anomalie la plus fourbe.</li>
<li>Le choix des outils est libre.</li>
</ul>
<p>A vos marques... Prêts ? Débuggez !</p>
<h3><a name="Prambule"></a>Préambule</h3>
<p>L'un des buts de ce Xke était d'être très didactique, dans les méthodes de recherche et dans l'utilisation des outils. Les bombes placées dans le code permettaient de réaliser une progression linéaire (dans la difficulté comme dans les gains attendus). Cette progression est retranscrite dans cet article et ceux qui vont suivre.</p>
<p>Cependant, pour différentes raisons que nous aurons l'occasion d'expliquer, l'ordre des analyses, et donc de découvertes des bugs, n'est pas celui qu'aurait choisi un champion de la performance, j'ai nommé Kirk Pepperdine. Nous lui avons soumis notre application, et nous vous exposerons sa méthode d'analyse et les raisons qui la motivent dans le dernier article de la série.</p>
<h3><a name="Premiercontactaveclapplication"></a>Premier contact avec l'application...</h3>
<p>Ouverture du navigateur, entrée de l'url, et, pas de surprise, l'application PetClinic s'ouvre.</p>
<div><img src="http://blog.xebia.fr/wp-content/uploads/2010/01/application.png" border="0" alt="" /></div>
<p>Premier lancement de JMeter, et première constatation : avec un seul utilisateur, l'application met en moyenne plus de 2 secondes à répondre. Inacceptable pour la plupart des sites web (surtout avec un seul utilisateur actif).</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter1.png"><img class="alignnone size-medium wp-image-3886" title="JMeter1" src="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter1-650.png" alt="JMeter1" /></a></div>
<h3><a name="etpremiersrglages"></a>... et premiers réglages</h3>
<p>A première vue, la machine ne semble pas à genoux, on peut donc incriminer directement l'application.<br />
Nous allons donc chercher à savoir ce qu'elle fait. Un réflexe classique, qu'un certain nombre d'entre nous a eu, est d'aller ouvrir les logs. Catalina.out est vide, on n'a pas de répertoire de logs applicatives évident, à priori le coupable classique, la configuration log4j, est à écarter. Et pourtant... Pour savoir ce que fait réellement notre application, il est possible de réaliser une série de thread dumps. Pour cela, deux possibilités :</p>
<ul>
<li>la vieille école, qui va dumper le contenu des threads à l'aide d'un kill -3 sur la jvm.</li>
<li>l'école moderne, qui va utiliser <a title="JVisualVm" href="http://blog.xebia.fr/2008/10/22/diagnostic-dune-jvm-a-distance/">JVisualVm</a> (et <a title="ses plugins" href="https://visualvm.dev.java.net/plugins.html">ses plugins</a>) pour réaliser la même opération à l'aide d'une belle interface.</li>
</ul>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/TDLog4j.png"><img class="alignnone size-medium wp-image-3890" title="TDLog4j" src="http://blog.xebia.fr/wp-content/uploads/2010/01/TDLog4j-650.png" alt="TDLog4j" /></a></div>
<p>Et là, demie surprise, notre thread actif est souvent surpris dans la méthode <code>org.apache.log4j.spi.LoggingEvent.getLocationInformation</code>. Nous aurions donc un logger actif. Nos soupçons initiaux se confirment, ne reste plus qu'à débusquer le coupable.<br />
Nous n'avons pas (encore) le code source. Or, cette bombe plombe tellement l'application qu'il n'est pas envisageable que nous ne puissions pas la résoudre de suite. On doit donc avoir un fichier de paramétrage de la log externalisé. Là encore, VisualVm va nous aider. Dans la fenêtre overview, les paramètres de démarrage de la VM sont affichés. Et l'on voit apparaitre une directive de configuration log4j, <code>-Dlog4j.configuration</code>.</p>
<div><img src="http://blog.xebia.fr/wp-content/uploads/2010/01/VMOverview.png" border="0" alt="" /></div>
<p>Un petit grep dans le répertoire de lancement de Tomcat (<code>$TOMCAT_HOME/bin</code>), et nous voyons apparaître dans le setEnv.sh la ligne <code>-Dlog4j.configuration=file:$CATALINA_HOME/conf/log.xml</code>. Et si nous ouvrons ce fichier, le root Logger est bien en DEBUG. Mais aucune directive spécifique pour logger ailleurs que dans la console. Tout devrait donc aller dans catalina.out. Ca sent la redirection 'sauvage'. Continuons à parcourir les fichiers de lancement. Un petit tour dans catalina.sh, et surprise, une belle redirection Unix <code>"$CATALINA_BASE"/logs/catalina.out 1&gt; /var/log/catalina/tomcat.log  &amp;</code><br />
Et en ouvrant ce fichier, on comprend mieux le temps perdu : des milliers de lignes de debug !</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/debugLog.png"><img class="alignnone size-medium wp-image-3895" title="debugLog" src="http://blog.xebia.fr/wp-content/uploads/2010/01/debugLog-650.png" alt="debugLog" /></a></div>
<p>Celles ci ont d'ailleurs une particularité sympathique : à chaque ligne de debug, le numero de ligne de la classa Java est indiqué.<br />
C'est pratique ! Pourquoi ne met on pas systématiquement en place cette configuration sur nos projets ?<br />
Un petit tour dans la documentation Log4J nous apprend :</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/docLog4J.png"><img class="alignnone size-medium wp-image-3896" title="docLog4J" src="http://blog.xebia.fr/wp-content/uploads/2010/01/docLog4J-650.png" alt="docLog4J" /></a></div>
<p>Log4J nous prévient, ces méthodes sont sous performantes. Si l'on creuse un peu dans le source, on trouve la classe affichant les pattern %M et %L, <code>org.apache.log4j.spi.LocationInfo</code>, qui contient le constructeur suivant :</p>
<div class="syntax_hilite">
<div id="java-8">
<div class="java"><span style="color: #000000; font-weight: bold;">public</span> LocationInfo<span style="color: #66cc66;">&#40;</span><a href="http://www.google.com/search?q=allinurl%3AThrowable+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">Throwable</span></a> t, <a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> fqnOfCallingClass<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<span style="color: #b1b100;">if</span><span style="color: #66cc66;">&#40;</span>t == <span style="color: #000000; font-weight: bold;">null</span> || fqnOfCallingClass == <span style="color: #000000; font-weight: bold;">null</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">return</span>;</p>
<p><a href="http://www.google.com/search?q=allinurl%3AString+java.sun.com&amp;bntl=1"><span style="color: #aaaadd; font-weight: bold;">String</span></a> s;<br />
<span style="color: #808080; font-style: italic;">// Protect against multiple access to sw.</span><br />
<span style="color: #000000; font-weight: bold;">synchronized</span><span style="color: #66cc66;">&#40;</span>sw<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
t.<span style="color: #006600;">printStackTrace</span><span style="color: #66cc66;">&#40;</span>pw<span style="color: #66cc66;">&#41;</span>;<br />
s = sw.<span style="color: #006600;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;<br />
sw.<span style="color: #006600;">getBuffer</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>.<span style="color: #006600;">setLength</span><span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #66cc66;">&#41;</span>;<br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#91;</span>...<span style="color: #66cc66;">&#93;</span></div>
</div>
</div>
<p>
Autrement dit, pour chaque ligne de log, Log4J génère une stackTrace pour pouvoir récupérer le numéro de la ligne et le nom de la méthode. Pas vraiment performant.<br />
Modifions donc le pattern et observons le résultat.</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter2.png"><img class="alignnone size-medium wp-image-3887" title="JMeter2" src="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter2-650.png" alt="JMeter2" /></a></div>
<ul>
<li> Suppression de %M:%L dans le pattern du Logger</li>
<li> Temps moyen de 2,3 s à 2,0 s pour 1 utilisateur</li>
<li> 2 points pour l'équipe qui a trouvé</li>
</ul>
<p>Toujours concernant ce fichier de log, nous voyons apparaître une ligne ne respectant pas le <em>PatternLayout</em> de Log4J, préfixée par <em>Hibernate</em>, qui trace une requête SQL. Gardons cette ligne en mémoire, nous y repenserons quand nous aurons le code source.</p>
<p>Deuxième amélioration immédiate envisageable, une application, qui plus est en production, ne devrait pas avoir besoin d'un niveau de log aussi fin. Passons le donc à ERROR.</p>
<div><a href="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter3.png"><img class="alignnone size-medium wp-image-3888" title="JMeter3" src="http://blog.xebia.fr/wp-content/uploads/2010/01/JMeter3-650.png" alt="JMeter3"  /></a></div>
<ul>
<li> Logger de DEBUG à ERROR</li>
<li> Temps moyen de 2,0 s à 1,75 s pour 1 utilisateur</li>
<li> 1 point pour l'équipe qui a trouvé</li>
</ul>
<p>Nous avons fait un sort au logger. Mais nous n'en avons pas encore fini avec la configuration out-of-the-box de cette application.</p>
<h4><a name="Source"></a>Source</h4>
<p><a title="Image libre de droits" href="http://commons.wikimedia.org/wiki/File:Magnifying_glass_and_Stamp_tong.jpg">Image libre de droits</a></p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/01/27/performance-les-xebians-jouent-les-demineurs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Formation certifiante ScrumMaster par Arlen Bankston</title>
		<link>http://blog.xebia.fr/2010/01/27/formation-certifante-scrum-master-par-arlen-bankston/</link>
		<comments>http://blog.xebia.fr/2010/01/27/formation-certifante-scrum-master-par-arlen-bankston/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 08:38:52 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[SCRUM]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3875</guid>
		<description><![CDATA[
Xebia propose des formations certifiantes ScrumMaster animées par Arlen Bankston.
Cette formation répondra, entre autres, aux questions suivantes :

Comment planifier et faire des estimations avec Scrum ?
Comment un chef de projet traditionnel devient-il un chef de projet agile ?
Comment faire travailler l’analyste fonctionnel avec les équipes agiles ?
Comment fonctionnent les reportings et les métriques avec Scrum [...]]]></description>
			<content:encoded><![CDATA[
<p>Xebia propose des formations certifiantes ScrumMaster animées par Arlen Bankston.</p>
<p>Cette formation répondra, entre autres, aux questions suivantes :</p>
<ul>
<li>Comment planifier et faire des estimations avec Scrum ?</li>
<li>Comment un chef de projet traditionnel devient-il un chef de projet agile ?</li>
<li>Comment faire travailler l’analyste fonctionnel avec les équipes agiles ?</li>
<li>Comment fonctionnent les reportings et les métriques avec Scrum ?</li>
<li>Comment travailler avec des équipes distribuées en Scrum ?</li>
<li>Comment savoir si un projet est compatible avec Scrum ?</li>
<li>Quels sont les outils principaux de Scrum ?</li>
<li>Comment s’assurer d’un résultat cohérent ?</li>
<li>Comment aménager la salle d’une équipe agile ?</li>
</ul>
<p>Arlen Bankston (Formateur ScrumMaster certifié et Lean Six Sigma Master Black Belt). La formation a lieu en anglais.<br />
Arlen Bankston est un leader reconnu dans la mise en œuvre des méthodologies de management tel que Lean, Six Sigma, BPM mais aussi dans les processus de développement logiciel SCRUM et XP.<br />
Arlen a mené avec succès des projets agiles d’envergure pour des entreprises telles que Capital One, T.Rowe Price, NBC Universal, Saudi Telecom, United States Army et Freddie Mac pour ne citer qu’elles.<br />
Arlen est aussi le Vice Président de <a href="http://www.lithespeed.com">LitheSpeed</a>, un cabinet international spécialisé dans la mise en place des techniques Lean et Six Sigma et des méthodologies Scrum et XP.</p>
<p>La prochaine session aura lieu les <strong>8 et 9 mars 2010</strong>.</p>
<p><a href="http://www.xebia.fr/sites/default/files/formations-scrum-master-arlen-bankston.pdf">Télécharger le programme &gt;&gt;</a></p>
<p>Renseignements et inscriptions par mail : <a href="mailto:info@xebia.fr">info@xebia.fr</a> ou en appelant le <strong>06 09 69 05 49</strong>.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/01/27/formation-certifante-scrum-master-par-arlen-bankston/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Revue de Presse Xebia</title>
		<link>http://blog.xebia.fr/2010/01/25/revue-de-presse-xebia-144/</link>
		<comments>http://blog.xebia.fr/2010/01/25/revue-de-presse-xebia-144/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 19:17:14 +0000</pubDate>
		<dc:creator>Xebia France</dc:creator>
				<category><![CDATA[Revue de presse]]></category>
		<category><![CDATA[Firebug]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE]]></category>
		<category><![CDATA[Méthodes agiles]]></category>
		<category><![CDATA[Pair programming]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.xebia.fr/?p=3867</guid>
		<description><![CDATA[

La revue de presse de l'actualité Java/J2EE hebdomadaire proposée par Xebia.
Actualité éditeurs / SSII

Tomcat 6.0.24, version mineure mais non négligeable

Agilité

Le pair-programming comment ça marche ?

RIA

Firebug passe en version 1.5

Actualité éditeurs / SSII
Tomcat 6.0.24, version mineure mais non négligeable
Nous allons commencer par un clin d'oeil humoristique, même les plus grands ont des difficultés à builder, le [...]]]></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/01/25/revue-de-presse-xebia-144/#Tomcatversionmineuremaisnonngl">Tomcat 6.0.24, version mineure mais non négligeable</a></li>
</ul>
<p><strong>Agilité</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/01/25/revue-de-presse-xebia-144/#Lepairprogrammingcommentamarch">Le pair-programming comment ça marche ?</a></li>
</ul>
<p><strong>RIA</strong></p>
<ul>
<li><a href="http://blog.xebia.fr/2010/01/25/revue-de-presse-xebia-144/#Firebugpasseenversion">Firebug passe en version 1.5</a></li>
</ul>
<h3><a name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3>
<h4><a name="Tomcatversionmineuremaisnonngl"></a>Tomcat 6.0.24, version mineure mais non négligeable</h4>
<p>Nous allons commencer par un clin d'oeil humoristique, même les plus grands ont des difficultés à <code>builder</code>, le projet Tomcat a <em>brulé</em> trois tags subversion pour faire une release sans défaut, il y a eu de nombreux problème d'adaptation des sauts de ligne aux plateformes Windows/Unix-Linux <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  .</p>
<p>Ensuite, la sécurité avec la correction de la faille <a href="http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2009-3555" title="CVE20093555" >CVE-2009-3555</a> appelée <em>"SSL-Man-In-The-Middle attack"</em> qui intéressera ceux qui gèrent SSL avec Tomcat.</p>
<p>Enfin, nous avons retenu deux nouvelles fonctionnalités qui nous paraissent particulièrement utiles :</p>
<p>L'intégration de la <a href="http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html" title="<code>RemoteIpValve</code>" ><code>RemoteIpValve</code></a> pour connaitre l'adresse IP de l'internaute et le protocole (http/https) utilisé lorsque Tomcat est précédé de load balancers et/ou d'un serveur web. Nous en avons longuement parlé dans <a href="http://blog.xebia.fr/2009/05/05/tomcat-adresse-ip-de-linternaute-load-balancer-reverse-proxy-et-header-http-x-forwarded-for/" title="Tomcat : Adresse IP de l'internaute, load balancer, reverse proxy et header Http X-Forwarded-For" >Tomcat : Adresse IP de l'internaute, load balancer, reverse proxy et header Http X-Forwarded-For</a> et dans <a href="http://blog.xebia.fr/2009/11/13/tomcat-ssl-communications-securisees-et-x-forwarded-proto/" title="Tomcat SSL communications scurises et XForwardedProto" >Tomcat, SSL, communications sécurisées et X-Forwarded-Proto</a>.<br />
Exemple :<br />
Fragment de server.xml pour déclarer le RemoteIpValve avec utilisation de X-Forwarded-Proto :</p>
<div class="syntax_hilite">
<div id="xml-12">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Valve</span> <span style="color: #000066;">className</span>=<span style="color: #ff0000;">"org.apache.catalina.valves.RemoteIpValve"</span> <span style="color: #000066;">protocolHeader</span>=<span style="color: #ff0000;">"X-Forwarded-Proto"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span><br />
<span style="color: #009900;"><span style="color: #808080; font-style: italic;">&lt;!-- AccessLogValve must be declared after RemoteIpValve --&gt;</span></span><br />
<span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Valve</span> <span style="color: #000066;">className</span>=<span style="color: #ff0000;">"org.apache.catalina.valves.AccessLogValve"</span> <span style="color: #000066;">directory</span>=<span style="color: #ff0000;">"logs"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp;<span style="color: #000066;">prefix</span>=<span style="color: #ff0000;">"localhost_access_log."</span> <span style="color: #000066;">suffix</span>=<span style="color: #ff0000;">".txt"</span> <span style="color: #000066;">pattern</span>=<span style="color: #ff0000;">"common"</span> <span style="color: #000066;">resolveHosts</span>=<span style="color: #ff0000;">"false"</span><span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</div>
</div>
<p>
L'intégration du <a href="http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html" title="<code>JmxRemoteLifecycleListener</code>" ><code>JmxRemoteLifecycleListener</code></a> qui permet de figer le deuxième port d'écoute RMI et ainsi se connecter avec <a href="https://visualvm.dev.java.net/" title="VisualVM" >VisualVM</a> et un tunnel SSH pour passer les firewalls. A nous le profiling sur les serveurs de production ! <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Mais attention aux chausses-trappes <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_sad.gif' alt=':-(' class='wp-smiley' />  :</p>
<ul>
<li>il faut télécharger le <a href="http://apache.cict.fr/tomcat/tomcat-6/v6.0.24/bin/extras/catalina-jmx-remote.jar" title="catalinajmxremotejar" >catalina-jmx-remote.jar</a> et le copier sous <code>$TOMCAT_HOME/lib</code>,</li>
<li>un vilain problème de UnmarshalException/ClassNotFoundException dans les clients comme Hyperic HQ si vous activez <code>useLocalPorts</code> (contournement <a href="http://markmail.org/message/enpid5dli75ynjfd" title="ici" >ici</a>),</li>
<li>les propriétés à définir dans <code>setenv.sh</code> (ou <code>catalina.properties</code>) en plus de la déclaration dans <code>server.xml</code>.</li>
</ul>
<p>L'occasion d'une contribution <img src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ?<br />
Exemple :<br />
Fragment de setenv.sh pour déclarer des variables d'environnement de JmxRemoteLifecycleListener :</p>
<div class="syntax_hilite">
<div id="java-13">
<div class="java">-Dcom.<span style="color: #006600;">sun</span>.<span style="color: #006600;">management</span>.<span style="color: #006600;">jmxremote</span>.<span style="color: #006600;">ssl</span>=<span style="color: #000000; font-weight: bold;">false</span><br />
-Dcom.<span style="color: #006600;">sun</span>.<span style="color: #006600;">management</span>.<span style="color: #006600;">jmxremote</span>.<span style="color: #006600;">authenticate</span>=<span style="color: #000000; font-weight: bold;">false</span></div>
</div>
</div>
<p>
Fragment de server.xml pour déclarer le JmxRemoteLifecycleListener :</p>
<div class="syntax_hilite">
<div id="xml-14">
<div class="xml"><span style="color: #009900;"><span style="font-weight: bold; color: black;">&lt;Listener</span> <span style="color: #000066;">className</span>=<span style="color: #ff0000;">"org.apache.catalina.mbeans.JmxRemoteLifecycleListener"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">rmiRegistryPortPlatform</span>=<span style="color: #ff0000;">"6969"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">rmiServerPortPlatform</span>=<span style="color: #ff0000;">"7969"</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000066;">useLocalPorts</span>=<span style="color: #ff0000;">"true"</span> <span style="font-weight: bold; color: black;">/&gt;</span></span></div>
</div>
</div>
<p></p>
<h3><a name="Agilit"></a>Agilité</h3>
<h4><a name="Lepairprogrammingcommentamarch"></a>Le pair-programming comment ça marche ?</h4>
<p>Stuart Wray de la Royal School of Signals, s'est fendu d'un article sur le fonctionnement du pair-programming dans l'édition de Janvier du magazine de l'IEEE. Dans l'article, il liste quatre bonne pratiques permettant de garantir selon ses termes, l'efficacité du développement par pair. Il ne s'agit pas de simplement développer à deux l'un au clavier et l'autre le doigt sur l'écran.</p>
<ul>
<li>Dialogue entre les développeurs :<br />
	Il est important de verbaliser les problèmes rencontrés de façon intelligible. Présenter une difficulté à un tiers permet de garder le focus dessus et l'effort de présentation force à clarifier la situation. Il faut sortir la tête du mur pour résoudre les problèmes et parfois le seul fait de présenter le blocage permet de trouver la solution. L'auteur identifie la conversation comme un point clé permettant aux paires d'être et de rester productifs.
	</li>
<li>Voir plus de détails :<br />
	Un phénomène bien connu de tous, deux personnes ne voient pas les même choses au même moment. C'est à cela que sert la relecture sur le blog Xebia. Il y a toujours des fautes d'inattention, liés à des centre d'intérêts différents par exemple. En paire, un développeurs trouve plus rapidement certaines erreurs que son collègue qui en voit d'autres. Celui qui ne tape pas au clavier repère toujours beaucoup plus rapidement les coquilles.<br />
	Stuart lève notre attention sur la fatigue des paires, en travaillant ensemble, les développeurs commencent à repérer les mêmes erreurs et à fixer leur attention sur les mêmes points. La productivité est alors en chute libre et l'apport du pair-programming se perd. Il faut prévoir des rotations régulière entre les paires pour se prémunir contre cet effet de bord.
	</li>
<li>Combattre les mauvaises pratiques :<br />
	Les deux développeurs doivent prendre l'engagement de coder en respectant une convention, en utilisant des bonnes pratiques. Chacun est juge du travail de son voisin, pourtant a terme c'est le travail des deux ensemble qui sera jugé. Cet engagement nécessaire des deux parties augmente la responsabilité de chacun sur la qualité du code produit. Posez vous la question : faites vous plus propre en développant seul dans votre cave ou en développant sous le regard attentif de votre paire ?
	</li>
<li>Partager et juger l'expertise :<br />
	Aucun individu n'a la même productivité et la différence varie au moins d'un facteur de un à dix entre deux individus. Cela implique des erreurs d'estimation temporelle par exemple si votre héros Java qui code les yeux fermés annonce une journée pour une tache et qu'elle est réalisée par un autre le temps passé ne sera sûrement pas d'une journée (Tous le monde ne peut pas coder les yeux fermés). C'est seulement en collaborant étroitement avec un développeur qu'il devient possible de juger de ses capacités. Mais avec le pair programming et la rotation des paires chaque développeur connait les domaines d'expertise des autres et sait se positionner par rapport aux autres. Les estimations seront donc plus réaliste dans une équipe en pair programming.
	</li>
</ul>
<ul>
<li><a href="http://www.infoq.com/news/2010/01/how-pair-programming-works" title="La news sur InfoQ" >La news sur InfoQ</a></li>
<li><a href="http://www.computer.org/cms/Computer.org/ComputingNow/homepage/2010/0110/W_SW_PairProgramming.pdf" title="Larticle complet" >L'article complet</a></li>
</ul>
<h3><a name="RIA"></a>RIA</h3>
<h4><a name="Firebugpasseenversion"></a>Firebug passe en version 1.5</h4>
<p><a href="http://getfirebug.com/" title="Firebug" >Firebug</a>, le plugin Firefox ultime pour le débogage de nos applications web, passe en <a href="http://blog.getfirebug.com/2010/01/15/firebug-1-5-0/" title="version 1.5" >version 1.5</a> (<em>via <a href="http://ajaxian.com/archives/firebug-1-5-new-features-and-ready-for-firefox-3-6" title="Ajaxian" >Ajaxian</em></a>).<br />
Pour rappel, cet outil permet d'inspecter notre code HTML, CSS et Javascript, de l'éditer avec répercutions direct sur la page, d'analyser les flux XMLHttpRequest avec le nombre d'appels effectués ainsi que leur durée... En bref, un outil incontournable !</p>
<p>Les corrections de bugs sont <a href="https://wiki.mozilla.org/Firebug/MarchOfTheFirebugs" title="nombreuses" >nombreuses</a> et les nouvelles fonctionnalités sont aussi au <a href="http://getfirebug.com/wiki/index.php/Firebug_Release_Notes#Firebug_1.5" title="rendez-vous" >rendez-vous</a>. On appréciera ainsi un mode d'inspection encore plus robuste, une boîte d'information rapide lors de l'inspection, l'ajout du <a href="http://blog.getfirebug.com/2009/07/24/firebug-1-5a19/" title="bouton de persistance" >bouton de persistance</a>, le blocage du Javascript et des évènements sur un breakpoint, les nombreux <a href="http://getfirebug.com/doc/breakpoints/demo.html" title="nouveaux breakpoints" >nouveaux breakpoints</a> ou bien encore l'<a href="http://www.softwareishard.com/blog/firebug/xml-explorer-for-firebug/" title="explorateur XML" >explorateur XML</a> pour une réponse de type XML. Ces deux derniers points seront à coup sûr des fonctionnalités clés pour le débogage de nos applications.</p>
<p>Si vous ne le possédez pas encore, c'est par <a href="https://addons.mozilla.org/fr/firefox/addon/1843" title="ici" >ici</a> que cela se passe.</p>

]]></content:encoded>
			<wfw:commentRss>http://blog.xebia.fr/2010/01/25/revue-de-presse-xebia-144/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
