<?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/"
xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:media="http://search.yahoo.com/mrss/"
> <channel><title>Blog Xebia France &#187; SOA</title> <atom:link href="http://blog.xebia.fr/tag/soa/feed/" rel="self" type="application/rss+xml" /><link>http://blog.xebia.fr</link> <description>J2EE, Agilité et SOA</description> <lastBuildDate>Wed, 08 Feb 2012 09:23:16 +0000</lastBuildDate> <language>fr</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=</generator> <copyright>CC BY-NC-ND 2.0 http://creativecommons.org/licenses/by-nc-nd/2.0/fr/</copyright> <managingEditor>blog-france@xebia.com (Xebia France)</managingEditor> <webMaster>blog-france@xebia.com (Xebia France)</webMaster> <ttl>1440</ttl> <image> <url>http://blog.xebia.fr/videos/xebia-podcast.png</url><title>Blog Xebia France</title><link>http://blog.xebia.fr</link> <width>144</width> <height>144</height> </image> <itunes:new-feed-url>http://blog.xebia.fr/feed/podcast/</itunes:new-feed-url> <itunes:subtitle>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agi[...]</itunes:subtitle> <itunes:summary>Les podcasts de Xebia France vous permettent de suivre l&#039;actualité autour de Java, de l&#039;agilité, des technologies Web et bien d&#039;autres. Xebia France est une entreprise spécialisée dans les technologies Java et JEE en environnement agile.</itunes:summary> <itunes:keywords>Xebia, Java, JEE, SOA, Agile, Méthodes, Agiles</itunes:keywords> <itunes:category text="Technology" /> <itunes:category text="Technology"> <itunes:category text="Software How-To" /> </itunes:category> <itunes:category text="Technology"> <itunes:category text="Tech News" /> </itunes:category> <itunes:author>Xebia France</itunes:author> <itunes:owner> <itunes:name>Xebia France</itunes:name> <itunes:email>blog-france@xebia.com</itunes:email> </itunes:owner> <itunes:block>no</itunes:block> <itunes:explicit>no</itunes:explicit> <itunes:image href="http://blog.xebia.fr/videos/xebia-podcast.png" /> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/</link> <comments>http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#comments</comments> <pubDate>Mon, 15 Nov 2010 23:40:11 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Apple]]></category> <category><![CDATA[Harmony]]></category> <category><![CDATA[Hyperic]]></category> <category><![CDATA[OpenJDK]]></category> <category><![CDATA[S4]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[Yahoo!]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5878</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Apple va collaborer au projet OpenJDK Oracle et Apache: de l&#8217;eau dans le gaz SOA La SOA renait de ses cendres Le coin de la technique Sortie d&#8217;Hyperic 4.5 S4, le nouveau jouet de Yahoo! Actualité éditeurs / SSII Apple [...]]]></description> <content:encoded><![CDATA[<p><img
style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /></p><p><em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#ApplevacollaborerauprojetOpenJ">Apple va collaborer au projet OpenJDK</a></li><li><a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#OracleetApachedeleaudanslegaz">Oracle et Apache: de l&#8217;eau dans le gaz</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#LaSOArenaitdesescendres">La SOA renait de ses cendres</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#SortiedHyperic">Sortie d&#8217;Hyperic 4.5</a></li><li><a
href="http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/#SlenouveaujouetdeYahoo">S4, le nouveau jouet de Yahoo!</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="ApplevacollaborerauprojetOpenJ"></a>Apple va collaborer au projet OpenJDK</h4><p>Presque un mois après son <a
title="annonce retentissante" href="http://blog.xebia.fr/2010/10/26/revue-de-presse-xebia-182/#LeJDKdApplecestfini">annonce retentissante</a> d&#8217;arrêter l&#8217;édition de la JVM pour Mac, Apple dans un <a
title="récent communiqué de presse" href="http://www.apple.com/pr/library/2010/11/12openjdk.html">récent communiqué de presse</a>, a annoncé sa future collaboration avec Oracle pour contribuer au projet OpenJDK. Il rassure ainsi sur le futur des JVM pour OS X. Avec dernièrement le <a
title="soutien dIBM" href="http://blog.xebia.fr/2010/10/12/revue-de-presse-xebia-180/#IBMrejointleprojetOpenJDK">soutien d&#8217;IBM</a> et maintenant d&#8217;Apple, le projet OpenJDK a de beaux jours devant lui. On espère que la qualité de l&#8217;intégration sera au rendez-vous pour les nombreux développeurs Java sous Mac.</p><p>Apple a confirmé que le JDK6 restera disponible de chez eux, pour OS X Snow Leopard et le prochain OS X Lion. Mais à partir du JDK 7, les versions pour Mac seront distribuées directement par Oracle. Chez Apple, on se félicite de ce partenariat qui devrait assurer aux Java-istes Mac d&#8217;obtenir dans le futur des releases au même rythme que tous les autres, au lieu d&#8217;avoir toujours un cran de retard. Espérons que tout se passe pour le mieux.</p><h4><a
name="OracleetApachedeleaudanslegaz"></a>Oracle et Apache: de l&#8217;eau dans le gaz</h4><p>Le début de la semaine passée a vu la Fondation Apache émettre <a
title="un billet" href="https://blogs.apache.org/foundation/entry/statement_by_the_asf_board1">un billet</a> qui a fait beaucoup de bruit. Dans celui-ci, elle reproche à Oracle de ne pas respecter les termes du JSPA (pour <em>Java Specification Participation Agreement</em>) et qui, d&#8217;après  la Fondation, l&#8217;autorisent à obtenir un <em>TCK</em> (Test Compatibility Kit) lui permettant de redistribuer <em>Harmony</em>, son JDK, sous la licence Apache. Le problème, qui reste un problème de brevet et de propriété intellectuelle, est ouvert depuis un moment: en 2007 déjà, Apache avait écrit <a
title="une lettre ouverte à Sun" href="http://www.apache.org/jcp/sunopenletter.html">une lettre ouverte à Sun</a>. Les choses n&#8217;ont que peu changé depuis. Sauf qu&#8217;aujourd&#8217;hui, la Fondation menace carrément de quitter le processus du <em>JCP</em> ! <a
title="Comme lanalyse InfoQ" href="http://www.infoq.com/news/2010/11/apache-jcp">Comme l&#8217;analyse InfoQ</a>, c&#8217;est peut-être la seule arme qui reste à la Fondation Apache. Mais serait-ce vraiment une bonne chose ?<br
/> Pour mieux comprendre les termes et enjeux de l&#8217;imbroglio dans lequel se sont empêtrées les parties, un excellent document reste <a
title="la FAQ" href="http://www.apache.org/jcp/sunopenletterfaq.html">la FAQ</a> publiée à l&#8217;époque par Apache pour expliciter sa lettre ouverte à Sun. Oracle vient d&#8217;ailleurs de publier <a
title="sa rponse" href="http://blogs.oracle.com/henrik/2010/11/moving_java_forward_open_response_from_oracle_to_apache.html">sa réponse</a> et&#8230; le moins que l&#8217;on puisse dire, c&#8217;est que la situation semble dans une impasse, chacun restant campé sur ses positions.</p><p>Par ailleurs, il faut aussi replacer les choses dans leur contexte actuel:</p><ul><li>IBM, le plus gros contributeur à <em>Harmony</em>, le JDK d&#8217;Apache, a <a
title="rcemment indiqu" href="http://blog.xebia.fr/2010/10/12/revue-de-presse-xebia-180/#IBMrejointleprojetOpenJDK">récemment indiqué</a> se rapprocher d&#8217;Oracle à travers <em>OpenJDK</em>. Ainsi, il se détache d&#8217;Apache qui se retrouve donc isolé.</li><li>Oracle a par ailleurs attaqué Google sur son implémentation d&#8217;Android, basée en grande partie sur ce même <em>Harmony</em>.</li><li>enfin, le récent regain d&#8217;intérêt envers <em><a
title="Java SE for embedded devices" href="http://www.oracle.com/technetwork/java/embedded/overview/index.html">Java SE for embedded devices</a></em> n&#8217;est peut-être pas étranger à tous ces problèmes. Même si le produit <a
href="http://twitter.com/alexismp/status/4201571055312896">&laquo;&nbsp;date d&#8217;avant Android&nbsp;&raquo;</a>, Oracle semble vouloir le renforcer. Et la première étape, comme <a
title="annoncé" href="http://armdevices.net/2010/11/13/java-embedded-se-6u21-synchronized-with-java-se/">annoncé</a> lors de l&#8217;<a
title="ARM Conference" href="http://vault.eetimes.com/armconference/">ARM Conference</a> consiste à faire correspondre les numéros de versions et implémentations des versions Java SE <em>classic</em> et <em>embedded</em>. Cette version est-elle appelée à se retrouver rapidement dans les téléphones portables à grande échelle maintenant que Java ME semble dépassé ? Oracle pourrait le souhaiter, car elle n&#8217;est pas gratuite !</li></ul><h3><a
name="SOA"></a>SOA</h3><h4><a
name="LaSOArenaitdesescendres"></a>La SOA renait de ses cendres</h4><p>C&#8217;est ce qu&#8217;affirme le Burton group après avoir fais le buzz il y a deux ans avec son acticle <a
title="SOA is Dead" href="http://apsblog.burtongroup.com/2009/01/soa-is-dead-long-live-services.html">SOA is Dead</a>.<br
/> En effet, le rapport du cabinet note une remontée d&#8217;intérêt concernant les projets SOA, boostée par l&#8217;émergence du cloud computing.<br
/> Il place d&#8217;ailleurs la SOA comme prérequis pour réussir ses projets dans le cloud.<br
/> Il est aussi précisé que l&#8217;échec de la SOA il y a deux ans, a été largement provoqué d&#8217;une part, par la crise économique, et d&#8217;autre part, par les différentes solutions et technologies poussées par les éditeurs.<br
/> Ainsi, il faudrait se focaliser plus sur les principes fondamentaux de la SOA pour garantir la réussite de son architecture du SI ou de ses projets de migration vers le cloud. Pour en savoir plus, les articles <a
title="de ZDNet" href="http://www.zdnet.com/blog/service-oriented/soa-rising-from-the-ashes-even-burton-group-says-so/6123?tag=mantle_skin;content">de ZDNet</a> ou <a
title="de EbizQ" href="http://www.ebizq.net/blogs/cloudsoa/2010/11/the-soa-is-dead-thing-returns.php">de EbizQ</a> sont de bons points de départ.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="SortiedHyperic"></a>Sortie d&#8217;Hyperic 4.5</h4><p>Hyperic, la solution de monitoring et de management de SpringSource/VmWare est récement sortie en version 4.5. On peut voir l&#8217;annonce sur le <a
title="blog de SpringSource" href="http://blog.springsource.com/2010/11/10/hyperic-4-5-released/">blog de SpringSource</a> ou celui d&#8217;<a
title="Hyperic" href="http://blog.hyperic.com/substantial-infrastructure-upgrade-in-hyperic-4-5-release/">Hyperic</a>.</p><p>Cette nouvelle version apporte quelques nouveautés telles que le support des produits GemFire (un système de cache distribué), RabbitMQ (un système de messaging) et tc Server (un serveur Tomcat modifié). On peut voir que les efforts ont été portés vers les produits de <a
title="SpringSource vFabric" href="http://blog.xebia.fr/2010/09/07/revue-de-presse-xebia-175/#LancementdevFabricauVMworldSpr">SpringSource vFabric</a> dont Hyperic fait partie.</p><p>La grosse nouveauté de cette version 4.5 réside dans ses fondations, avec des changements importants :</p><ul><li>l&#8217;utilisation du Framework Spring 3 à la place des EJB,</li><li>le déploiement d&#8217;Hyperic se fait maintenant sur un serveur Tomcat et non plus sur JBoss,</li><li>l&#8217;utilisation de Maven à la place de Ant,</li><li>le changement du SCM qui passe de Subversion à Git.</li></ul><p>Ces changements ont quelques conséquences plutôt bénéfiques pour le projet. En effet, le passage au framework Spring a permis de réduire la taille du code ainsi que sa complexité. De plus le passage de JBoss à Tomcat permet un gain sensible sur le temps de déploiement, faisant par la même gagner un temps précieux aux développeurs d&#8217;Hyperic.</p><p>Ces différentes améliorations devraient permettre de faciliter l&#8217;apparition de nouveautés dans les futures versions ainsi qu&#8217;une plus grande stabilité.</p><h4><a
name="SlenouveaujouetdeYahoo"></a>S4, le nouveau jouet de Yahoo!</h4><p>Cette semaine, on risque de beaucoup parler de Hadoop, en particulier grâce à Devoxx. Yahoo!, qui a fortement contribué à ce framework de Map/Reduce via la fondation Apache, prépare déjà sa succession : <a
title="S4" href="http://s4.io/">S4</a>. Là où Hadoop est plutôt orienté batch, S4 a pour but d&#8217;amener au Map/Reduce une dimension temps réel, en travaillant directement sur des flux continus de données.<br
/> Yahoo! utilise d&#8217;ores et déjà S4 en production pour analyser et cibler les informations publicitaires affichées aux internautes.<br
/> Le projet vient d&#8217;être cédé à la communauté openSource, sous licence Apache 2.0.<br
/> C&#8217;est le début d&#8217;une aventure qui s&#8217;annonce longue et semée d&#8217;embuche (comme le savent déjà ceux qui, comme nous, ont essayé de faire du pseudo temps-réel avec la stack Hadoop), mais d&#8217;ores et déjà palpitante.<br
/> S4 est écrit en Java, actuellement disponible en version alpha, et cherche des contributeurs !</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/11/16/revue-de-presse-xebia-185/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Créer un composant Apache Camel de connexion à l’APNS – 3 sur 3</title><link>http://blog.xebia.fr/2010/10/13/creer-un-composant-apache-camel-de-connexion-a-lapns-3-sur-3/</link> <comments>http://blog.xebia.fr/2010/10/13/creer-un-composant-apache-camel-de-connexion-a-lapns-3-sur-3/#comments</comments> <pubDate>Wed, 13 Oct 2010 21:07:31 +0000</pubDate> <dc:creator>Alexis Kinsella</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Apple]]></category> <category><![CDATA[Camel]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5625</guid> <description><![CDATA[Nous avons vu dans un premier article comment initier le développement d&#8217;un composant Apache Camel, puis dans un second comment implémenter ses différentes classes. A ce stade de notre développement nous sommes déjà en mesure d&#8217;utiliser pleinement notre composant, mais nous ne pouvons pas encore en assurer sa qualité. Pour cela, il est nécessaire d&#8217;ajouter [...]]]></description> <content:encoded><![CDATA[<p>Nous avons vu dans un <a
href="http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/" title="premier article" >premier article</a> comment initier le développement d&#8217;un composant Apache Camel, puis dans un <a
href="http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/" title="second article" >second</a> comment implémenter ses différentes classes.</p><p>A ce stade de notre développement nous sommes déjà en mesure d&#8217;utiliser pleinement notre composant, mais nous ne pouvons pas encore en assurer sa qualité. Pour cela, il est nécessaire d&#8217;ajouter à notre composant différentes classes de test. Bien que la testabilité de frameworks d&#8217;intégration puisse parfois paraître difficile, le projet Apache Camel fournit tous les outils nécessaires permettant de répondre à ce besoin. Nous verrons donc dans cet article comment tester le composant que nous avons développé.</p><p>Pour finir, nous verrons comment intégrer notre développement à un projet Camel, ainsi que les limites de notre composant et les solutions pour résoudre ces limitations.</p><h3><a
name="TesterlaclasseApnsConsumer"></a>Tester la classe ApnsConsumer</h3><p>Bien que le projet Apache Camel permette de travailler naturellement avec Spring, nous nous attarderons dans un premier temps sur les méthodes permettant de tester notre composant sur un mode standalone. Pour cela, nous étendrons la classe <em>CamelTestSupport</em>. Cette dernière fournit les méthodes nécessaires pour effectuer différentes assertions sur les valeurs attendues en fin de traitement, en particulier sur des endpoints de type <em>MockEndpoint</em>.</p><p>Nous devons tout d&#8217;abord implémenter les 2 méthodes suivantes:</p><table
class="tablo"><thead><th> Méthode</th><th> Description</th></thead><tbody><tr><td> createCamelContext()</td><td> Permet de créer le contexte Camel qui sera utilisé par le test</td></tr><tr><td> createRouteBuilder()</td><td> Permet de construire la route qui sera appelée par le test. Idéalement, la route doit se terminer par l&#8217;appel d&#8217;un MockEpoint</td></tr></tbody></table><p>Avant l&#8217;exécution de nos tests, un serveur APNS bouchonné doit être lancé. Il enverra sur le flux feedback des données factices.</p><p>L&#8217;objectif de ce test est de valider que le endpoint <em>apns:consumer</em> est capable de consommer les informations de test renvoyées par le flux feedback du serveur bouchonné. Le endpoint Camel <em>mock:result</em> nous permet de valider les assertions nécessaires sur les messages reçus par ce endpoint.</p><p>Le endpoint <em>apns:consumer</em> est configuré pour poller le flux feedback de l&#8217;APNS toutes les 500ms. Le test ne doit donc pas durer raisonnablement plus de 5 secondes en tenant compte du temps d&#8217;attente d&#8217;une seconde avant les assertions et du temps de démarrage du serveur bouchon APNS. Un timeout de 5 secondes est donc placé sur le test pour s&#8217;assurer que ce dernier tombe en erreur si un événement bloquant inattendu empêche le test de se terminer.</p><pre class="brush: java; title: ; notranslate">
public class ApnsConsumerTest extends CamelTestSupport {
    ApnsServerStub server;
    public ApnsConsumerTest() {
    	super();
    }
    /**
     * Démarrage du serveur bouchonné simulant l'APNS
     */
    @Before
    public void startup() throws InterruptedException {
        server = ApnsServerStub.prepareAndStartServer(FixedCertificates.TEST_GATEWAY_PORT, FixedCertificates.TEST_FEEDBACK_PORT);
    }
    /**
     * Arrêt du serveur bouchonné simulant l'APNS
     */
    @After
    public void stop() {
        server.stop();
    }
    /**
     * Test de l'ApnsConsumer. L'objectif est de vérifier que le flux feedback est
     * bien consommé par la route Camel. Pour cela on vérifie après consommation
     * que le endpoint MockEndpoint a bien reçu les messages.
     */
    @Test(timeout=5000)
    public void testConsumer() throws Exception {
    	byte[] deviceTokenBytes = ApnsUtils.createRandomDeviceTokenBytes();
        String deviceToken = ApnsUtils.encodeHexToken(deviceTokenBytes);
        MockEndpoint mock = getMockEndpoint(&quot;mock:result&quot;);
        mock.expectedMessageCount(1);
        mock.message(0).body().isInstanceOf(InactiveDevice.class);
        byte[] feedBackBytes = ApnsUtils.generateFeedbackBytes(deviceTokenBytes);
        server.toSend.write(feedBackBytes);
        Thread.sleep(1000);
        assertMockEndpointsSatisfied();
        InactiveDevice inactiveDevice = (InactiveDevice)mock.getExchanges().get(0).getIn().getBody();
        assertNotNull(inactiveDevice);
        assertNotNull(inactiveDevice.getDate());
        assertNotNull(inactiveDevice.getDeviceToken());
        assertEquals(deviceToken, inactiveDevice.getDeviceToken());
    }
    /**
     * Création et configuration du contexte Camel avec une configuration de test.
     * Enregistrement du composant APNS, et configuration de l'ApnsService
     */
    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();
        ApnsServiceFactory apnsServiceFactory = ApnsUtils.createDefaultTestConfiguration();
        ApnsService apnsService = apnsServiceFactory.getApnsService();
        ApnsComponent apnsComponent = new ApnsComponent(apnsService);
        camelContext.addComponent(&quot;apns&quot;, apnsComponent);
        return camelContext;
    }
    /**
     * Création de la route Camel permettant de simuler la consommation du flux
     * feedback de l'APNS
     */
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from(&quot;apns:consumer?initialDelay=500&amp;delay=500&amp;timeUnit=MILLISECONDS&quot;)
                	.to(&quot;log:com.apache.camel.component.apns?showAll=true&amp;multiline=true&quot;)
                	.to(&quot;mock:result&quot;);
            }
        };
    }
}
</pre><h3><a
name="TesterlaclasseApnsProducer"></a>Tester la classe ApnsProducer</h3><p>De la même façon que nous nous y sommes pris pour la classe de test <em>ApnsConsumerTest</em>, nous allons étendre la classe <em>CamelTestSupport</em> pour tester notre classe <em>ApnsProducer</em>. L&#8217;objectif est de vérifier que le serveur bouchonné reçoit bien les messages produits.</p><pre class="brush: java; title: ; notranslate">
public class ApnsProducerTest extends CamelTestSupport {
    private ApnsServerStub server;
    private String FAKE_TOKEN = &quot;19308314834701ACD8313AEBD92AEFDE192120371FE13982392831701318B943&quot;;
    public ApnsProducerTest() {
    	super();
    }
    /**
     * Démarrage du serveur bouchonné simulant l'APNS
     */
    @Before
    public void startup() {
        server = ApnsServerStub.prepareAndStartServer(FixedCertificates.TEST_GATEWAY_PORT, FixedCertificates.TEST_FEEDBACK_PORT);
    }
    /**
     * Arrêt du serveur bouchonné simulant l'APNS
     */
    @After
    public void stop() {
        server.stop();
    }
    /**
     * Test de l'ApnsProducer. L'objectif est de vérifier que le serveur APNS a
     * bien reçu les notifications envoyées.
     * Pour cela on vérifie après production des notifications que le serveur bouchonné
     * a bien reçu les messages: On s'assure que les tableaux de bytes de la notification
     * produite et du contenu reçu par le serveur sont bien égaux.
     */
    @Test(timeout=2000)
    public void testProducer() throws Exception {
    	String message = &quot;Hello World&quot;;
    	String messagePayload = APNS.newPayload().alertBody(message).build();
        ApnsNotification apnsNotification = new ApnsNotification(FAKE_TOKEN, messagePayload);
        server.stopAt(apnsNotification.length());
        template.sendBody(&quot;direct:test&quot;, message);
        server.messages.acquire();
        assertArrayEquals(apnsNotification.marshall(), server.received.toByteArray());
    }
    /**
     * Création et configuration du contexte Camel avec une configuration de test.
     * Enregistrement du composant APNS, et configuration de l'ApnsService
     */
    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();
        ApnsServiceFactory apnsServiceFactory = ApnsUtils.createDefaultTestConfiguration();
        ApnsService apnsService = apnsServiceFactory.getApnsService();
        ApnsComponent apnsComponent = new ApnsComponent(apnsService);
        camelContext.addComponent(&quot;apns&quot;, apnsComponent);
        return camelContext;
    }
    /**
     * Création de la route Camel permettant de simuler la production de messages
     * à destination des serveurs APNS.
     */
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from(&quot;direct:test&quot;).
                setHeader(ApnsConstants.HEADER_TOKENS, constant(FAKE_TOKEN)).
                to(&quot;apns:notify&quot;);
            }
        };
    }
}
</pre><h3><a
name="TesterlintgrationduncomposantC"></a>Tester l&#8217;intégration d&#8217;un composant Camel avec Spring</h3><p>Les configurations Camel sont souvent déclarées par des fichiers de configuration Spring. C&#8217;est pourquoi il est nécessaire de tester l&#8217;intégration du composant dans une configuration Spring. Un bon moyen d&#8217;automatiser ce type de test est d&#8217;utiliser les classes de support JUnit fournies par Spring ( _AbstractJUnit4SpringContextTests_ ).</p><p>L&#8217;ensemble de la configuration est déclarée dans le fichier <em>SpringApnsConsumerTest-context.xml</em> associé au test unitaire. Les différents beans utilisés par la classe de test sont injectés via les annotations <em>@Autowired</em> et <em>@EndpointInject(uri = &laquo;&nbsp;mock:result&nbsp;&raquo;)</em>.</p><pre class="brush: xml; title: ; notranslate">
&lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xmlns:camel=&quot;http://camel.apache.org/schema/spring&quot;
       xsi:schemaLocation=&quot;
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd&quot;&gt;
	&lt;bean id=&quot;apnsServiceFactory&quot; class=&quot;org.apache.camel.component.apns.factory.ApnsServiceFactory&quot;&gt;
		&lt;property name=&quot;feedbackHost&quot; value=&quot;localhost&quot; /&gt;
		&lt;property name=&quot;feedbackPort&quot; value=&quot;7843&quot; /&gt;
		&lt;property name=&quot;gatewayHost&quot; value=&quot;localhost&quot; /&gt;
		&lt;property name=&quot;gatewayPort&quot; value=&quot;7654&quot; /&gt;
		&lt;property name=&quot;sslContext&quot; ref=&quot;sslContext&quot; /&gt;
	&lt;/bean&gt;
	&lt;!-- Déclaration de l'ApnsService, utilisé par l'ApnsComponent --&gt;
	&lt;bean id=&quot;apnsService&quot; factory-bean=&quot;apnsServiceFactory&quot; factory-method=&quot;getApnsService&quot; /&gt;
	&lt;bean id=&quot;sslContext&quot; class=&quot;org.apache.camel.component.apns.util.FixedCertificates&quot; factory-method=&quot;clientContext&quot;/&gt;
	&lt;!-- Déclaration de l'ApnsComponent. Le scheme utilisé pour la création des endpoints --&gt;
	&lt;!-- sera l'Id utilisé pour la création du bean --&gt;
	&lt;bean id=&quot;apns&quot; class=&quot;org.apache.camel.component.apns.ApnsComponent&quot;&gt;
		&lt;property name=&quot;apnsService&quot; ref=&quot;apnsService&quot; /&gt;
	&lt;/bean&gt;
	&lt;!-- Déclaration du context Camel, et de la route de test: 'apns-test' --&gt;
	&lt;!-- Les message reçus par le flux feedback seront envoyés vers le endpoint mock:result --&gt;
	&lt;camelContext id=&quot;camel-apns-test&quot; xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
		&lt;route id=&quot;apns-test&quot;&gt;
			&lt;from uri=&quot;apns:consumer?initialDelay=500&amp;delay=500&amp;timeUnit=MILLISECONDS&quot; /&gt;
			&lt;to uri=&quot;log:org.apache.camel.component.apns?showAll=true&amp;multiline=true&quot; /&gt;
			&lt;to uri=&quot;mock:result&quot; /&gt;
		&lt;/route&gt;
	&lt;/camelContext&gt;
&lt;/beans&gt;
</pre><p>Une fois la déclaration du composant Camel effectuée via le fichier de configuration Spring, il ne reste plus qu&#8217;à injecter les différents beans configurés dans les propriétés de la classe de test. Le contenu du test en lui-même reste identique, cependant la partie configuration a disparu ce qui rend le test plus lisible. Afin de faire disparaître du test ce qui peut encore en parasiter sa lisibilité, une classe de test parent peut être créée pour contenir les méthodes d&#8217;initialisation et d&#8217;arrêt du serveur APNS de test.</p><pre class="brush: java; title: ; notranslate">
@ContextConfiguration
public class SpringApnsConsumerTest extends AbstractJUnit4SpringContextTests {
    ApnsServerStub server;
    /**
     * Injection du context Camel déclaré via Spring
     */
    @Autowired
    protected CamelContext camelContext;
    /**
     * Injection du endpoint Camel &quot;mock:result&quot; déclaré via Spring
     */
    @EndpointInject(uri = &quot;mock:result&quot;)
    protected MockEndpoint mock;
    public SpringApnsConsumerTest() {
    	super();
    }
    /**
     * Démarrage du serveur bouchonné simulant l'APNS
     */
    @Before
    public void startup() throws InterruptedException {
        server = ApnsServerStub.prepareAndStartServer(FixedCertificates.TEST_GATEWAY_PORT, FixedCertificates.TEST_FEEDBACK_PORT);
    }
    /**
     * Arrêt du serveur bouchonné simulant l'APNS
     */
    @After
    public void stop() {
        server.stop();
    }
    /**
     * Test du consommateur
     */
    @Test(timeout=5000)
    public void testConsumer() throws Exception {
    	byte[] deviceTokenBytes = ApnsUtils.createRandomDeviceTokenBytes();
        String deviceToken = ApnsUtils.encodeHexToken(deviceTokenBytes);
        mock.expectedMessageCount(1);
        mock.message(0).body().isInstanceOf(InactiveDevice.class);
        byte[] feedBackBytes = ApnsUtils.generateFeedbackBytes(deviceTokenBytes);
        server.toSend.write(feedBackBytes);
        Thread.sleep(1000);
        mock.assertIsSatisfied();
        InactiveDevice inactiveDevice = (InactiveDevice)mock.getExchanges().get(0).getIn().getBody();
        Assert.assertNotNull(inactiveDevice);
        Assert.assertNotNull(inactiveDevice.getDate());
        Assert.assertNotNull(inactiveDevice.getDeviceToken());
        Assert.assertEquals(deviceToken, inactiveDevice.getDeviceToken());
    }
}
</pre><h3><a
name="Limitationsducomposantactuel"></a>Limitations du composant actuel</h3><p>Dans un soucis de simplicité, le composant présenté est limité fonctionnellement et ne propose qu&#8217;un ensemble réduit de fonctionnalités. L&#8217;implémentation proposée dans ce billet nous oblige à déclarer les tokens à notifier directement au niveau de la route. Cependant une implémentation plus complète pourrait permettre d&#8217;exploiter des en-têtes par exemple pour rendre la sélection de token à notifier plus dynamique.</p><p>Heureusement, la richesse du framework Apache Camel nous permet de passer outre cette restriction et d&#8217;obtenir l&#8217;aspect dynamique souhaité en utilisant le pattern <a
href="http://camel.apache.org/recipient-list.html" title="Recipient List" >Recipient List</a>, qui permet par exemple l&#8217;extraction des URIs de destination depuis un en-tête de message produit au préalable.</p><pre class="brush: java; title: ; notranslate">
RouteBuilder builder = new RouteBuilder() {
    public void configure() {
        from(&quot;direct:a&quot;).recipientList(
        header(&quot;recipientListHeader&quot;).tokenize(&quot;,&quot;));
    }
};
</pre><p>Dans cet exemple, l&#8217;en-tête <em>recipientListHeader</em> contiendrait les différentes URIs séparées par des virgules.</p><h3><a
name="Utilisationducomposantdansunpr"></a>Utilisation du composant dans un projet</h3><p>Pour utiliser le composant développé dans cette série d&#8217;articles, il suffit de l&#8217;importer en tant que dépendance Maven dans votre projet Camel et de déclarer le repository qui permettra de le charger à défaut de l&#8217;avoir déjà dans son répository local.</p><p>Ce qui donne les lignes suivantes à ajouter dans le pom de votre projet:</p><ul><li>La dépendance Maven:</li></ul><pre class="brush: xml; title: ; notranslate">
&lt;dependency&gt;
    &lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
    &lt;artifactId&gt;camel-apns&lt;/artifactId&gt;
    &lt;version&gt;2.4.0&lt;/version&gt;
&lt;/dependency&gt;
</pre><ul><li>Le repository Maven qui met à disposition le composant:</li></ul><pre class="brush: xml; title: ; notranslate">
&lt;repositories&gt;
    &lt;repository&gt;
        &lt;id&gt;camel-apns.repo-release&lt;/id&gt;
        &lt;url&gt;http://camel-apns.googlecode.com/svn/maven/public/repository/release/&lt;/url&gt;
    &lt;/repository&gt;
&lt;/repositories&gt;
</pre><h3><a
name="Exemplesdutilisation"></a>Exemples d&#8217;utilisation</h3><p>Afin de donner une vision synthétique de l&#8217;usage de notre composant, voici un condensé de quelques exemples d&#8217;utilisation:</p><ul><li>Consommation du flux feedback avec une configuration Java</li></ul><pre class="brush: java; title: ; notranslate">
      from(&quot;apns:consumer&quot;)
            .to(&quot;log:com.apache.camel.component.apns?showAll=true&amp;multiline=true&quot;)
            .to(&quot;mock:result&quot;);
</pre><ul><li>Envoi de notifications avec une configuration Java</li></ul><pre class="brush: java; title: ; notranslate">
      from(&quot;direct:test&quot;)
            .setHeader(ApnsConstants.HEADER_TOKENS, constant(FAKE_TOKEN))
            to(&quot;apns:notify&quot;);
</pre><ul><li>Envoi d&#8217;une notification avec une configuration Spring</li></ul><pre class="brush: xml; title: ; notranslate">
&lt;camelContext id=&quot;camel-apns-test&quot; xmlns=&quot;http://camel.apache.org/schema/spring&quot;&gt;
	&lt;route id=&quot;apns-test&quot;&gt;
		&lt;from uri=&quot;apns:consumer&quot; /&gt;
		&lt;to uri=&quot;log:org.apache.camel.component.apns?showAll=true&amp;multiline=true&quot; /&gt;
		&lt;to uri=&quot;mock:result&quot; /&gt;
	&lt;/route&gt;
&lt;/camelContext&gt;
</pre><h3><a
name="Conclusion"></a>Conclusion</h3><p>Nous avons vu dans cet article comment créer et tester un composant Camel qui communique avec les serveurs de notifications d&#8217;Apple. Les API du framework ont été pensées pour faciliter le développement de nouveaux composants, et vous permettront d&#8217;implémenter et de tester facilement les composants dont vous avez besoin. Vous pouvez consulter le code source du composant camel-apns présenté dans cette série d&#8217;article sur sa page <a
href="http://code.google.com/p/camel-apns" title="Google code - Projet camel-apns" >Google Code</a>.</p><h3><a
name="Liensutiles"></a>Liens utiles:</h3><p>Le site google code du composant &#8216;camel-apns&#8217; présenté dans le billet:</p><ul><li><a
href="http://code.google.com/p/camel-apns" title="httpcodegooglecompcamelapns" >http://code.google.com/p/camel-apns</a></li></ul><p>D&#8217;autres liens utiles sur le développement de composants Camel:</p><ul><li><a
href="http://camel.apache.org/testing.html" title="Crer des tests unitaires Apache Camel" >Créer des tests unitaires Apache Camel</a></li><li><a
href="http://camel.apache.org/test.html" title="Tester un composant Apache Camel" >Tester un composant Apache Camel</a></li></ul><p>Précédentes parties de l&#8217;article:</p><ul><li><a
href="http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/" title="Crer un composant Apache Camel de connexion  lAPNS  1 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 1 sur 3</a></li><li><a
href="http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/" title="Crer un composant Apache Camel de connexion  lAPNS  2 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 2 sur 3</a></li></ul><style type="text/css">table.tablo { border-collapse:collapse; border: 1px solid #6C626C; width:95%; font: normal normal normal 1.1em/normal Arial, sans-serif; } table.tablo thead { background: #EFEFEF; border-bottom: 1px solid #6C626C; border-top: 1px solid #6C626C; color: #4F2F4F; } table.tablo thead th { padding: 5px; } table.tablo tbody tr { border: 1px solid #6C626C; } table.tablo tbody tr td { padding: 5px; }</style>]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/10/13/creer-un-composant-apache-camel-de-connexion-a-lapns-3-sur-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Créer un composant Apache Camel de connexion à l’APNS – 2 sur 3</title><link>http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/</link> <comments>http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/#comments</comments> <pubDate>Wed, 06 Oct 2010 20:44:21 +0000</pubDate> <dc:creator>Alexis Kinsella</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Apple]]></category> <category><![CDATA[Camel]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5549</guid> <description><![CDATA[Nous avons vu dans un premier article comment initier le développement d&#8217;un composant Apache Camel. Cependant, nous n&#8217;avons pas encore abordé son développement à proprement parler et notre composant ne permet pas encore de communiquer avec les serveurs Apple. Nous allons donc voir dans cet article comment implémenter les différentes classes nécessaires au bon fonctionnement [...]]]></description> <content:encoded><![CDATA[<p>Nous avons vu dans un <a
href="http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/" title="premier article" >premier article</a> comment initier le développement d&#8217;un composant Apache Camel. Cependant, nous n&#8217;avons pas encore abordé son développement à proprement parler et notre composant ne permet pas encore de communiquer avec les serveurs Apple. Nous allons donc voir dans cet article comment implémenter les différentes classes nécessaires au bon fonctionnement de notre composant.<br
/> Pour rappel l&#8217;objectif est de développer un composant capable de communiquer avec l&#8217;Apple Push Notification Service, qui permet d&#8217;envoyer des notifications aux appareils mobiles d&#8217;Apple (iPad, iPhone, iPod Touch).</p><h3><a
name="Implmentationducomposant"></a>Implémentation du composant</h3><p>Les quatre interfaces suivantes doivent être implémentées pour développer un composant Camel permettant à la fois de consommer et produire des messages :</p><table
class="tablo"><thead><th
nowrap="true"> Interfaces à implémenter</th><th> Description</th></thead><tbody><tr><td> Component</td><td> Elle permet de créer les endpoints relatifs au composant.</td></tr><tr><td> Endpoint</td><td> Elle permet la création des <em>Consumers</em> et <em>Producers</em> relatifs à un endpoint défini par son URI.</td></tr><tr><td> Consumer</td><td> Elle correspond à l&#8217;implémentation des <em>Consumers</em> relatifs au endpoint d&#8217;un composant.</td></tr><tr><td> Producer</td><td> Elle correspond à l&#8217;implémentation des <em>Producers</em> relatifs au endpoint d&#8217;un composant.</td></tr></tbody></table><h4><a
name="LaclasseApnsService"></a>La classe ApnsService</h4><p>Pour communiquer avec les serveurs Apple, nous devons instancier un objet <em>ApnsService</em>. Le framework java-apns fournit pour cela la classe <em>ApnsServiceBuilder</em>. Celle-ci permet de construire facilement un objet <em>ApnsService</em> en spécifiant au builder la configuration souhaitée.</p><p>Le builder est obtenu grâce à la classe utilitaire <em>Apns</em> :</p><pre class="brush: java; title: ; notranslate">
        ApnsServiceBuilder builder = APNS.newService();
</pre><p>Ensuite, il suffit d&#8217;appeler les différentes méthodes de configuration du builder. Dans le cadre d&#8217;une configuration simple, le code source suivant est suffisant :</p><pre class="brush: java; title: ; notranslate">
// Instanciation du builder
ApnsServiceBuilder builder = APNS.newService();
InputStream certificateInputStream = null;
try {
    // Ouverture de l'inputStream correspondant au certificat
	certificateInputStream = ResourceUtils.getInputStream(&quot;certificate_classpath&quot;);
	// Configuration du certificat utilisé pour communiquer avec l'APNS
	builder.withCert(certificateInputStream, &quot;certificate_password&quot;)
}
finally {
	// Fermeture de l'inputStream correspondant au certificat
	ResourceUtils.close(certificateInputStream);
}
// Configuration des URLs par défaut de production vers les serveurs APNS
builder.withProductionDestination();
// Configuration d'un pool de 5 connexions vers les serveurs APNS
builder.asPool(5);
// Configuration d'une politique de reconnexion uniquement lorsqu'une connexion vers les serveurs APNS est fermée
builder.withReconnectPolicy(ReconnectPolicy.Provided.NEVER);
// Obtention de l'instance configurée
ApnsService apnsService = builder.build();
</pre><p><em>Note :</em> Un exemple de configuration plus complet de l&#8217;objet <em>ApnsService</em> peut être trouvé dans le code source du composant <em>camel-apns</em>.</p><p>Afin d&#8217;intégrer de façon efficace notre composant avec Spring, la classe <em>ApnsServiceBuilder</em> se révèle être un bon point de départ pour écrire une factory permettant de construire un objet <em>ApnsService</em> via Spring.</p><h4><a
name="LaclasseApnsComponent"></a>La classe ApnsComponent</h4><p>L&#8217;interface <em>Component</em> correspond à l&#8217;unité de base définissant un composant Camel. Ce dernier est associé au scheme d&#8217;une URI lorsqu&#8217;il est ajouté à un contexte d&#8217;exécution.</p><p>Une implémentation par défaut de cette interface est fournie (en l&#8217;occurrence la classe <em>DefaultComponent</em>), ce qui permet de se focaliser sur les fonctionnalités de notre composant. Un composant Camel a pour rôle de créer les endpoints relatifs aux URI définies dans le contexte Camel. Cette tâche est réalisée par la méthode <em>createEndpoint</em>.</p><p>Chaque endpoint créé à partir d&#8217;un même <em>ApnsComponent</em> utilisera une unique configuration pour échanger avec l&#8217;APNS. C&#8217;est pourquoi le service d&#8217;accès à l&#8217;APNS sera injecté au niveau de l&#8217;objet <em>ApnsComponent</em>.</p><p>Le bean <em>apnsService</em> peut être setté par le constructeur ou bien par un setter pour faciliter l&#8217;intégration avec Spring.</p><pre class="brush: java; title: ; notranslate">
public class ApnsComponent extends DefaultComponent {
	private ApnsService apnsService;
	public ApnsComponent() {
		super();
	}
	public ApnsComponent(ApnsService apnsService) {
		super();
		AssertUtils.notNull(apnsService, &quot;apnsService is mandatory&quot;);
		this.apnsService = apnsService;
	}
	public ApnsComponent(CamelContext context) {
		super(context);
	}
	public ApnsService getApnsService() {
		return apnsService;
	}
	@SuppressWarnings(&quot;unchecked&quot;)
	protected Endpoint createEndpoint(String uri, String remaining, Map parameters) throws Exception {
		ApnsEndpoint endpoint = new ApnsEndpoint(uri, this);
		setProperties(endpoint, parameters);
		return endpoint;
	}
    /**
     * L'objet ApnsService peut être setté s'il le constructeur vide a été appelé pour instancier un objet ApnsComponent
     */
	public void setApnsService(ApnsService apnsService) {
		if (this.apnsService != null) {
			throw new IllegalArgumentException(&quot;apnsService already setted&quot;);
		}
		this.apnsService = apnsService;
	}
}
</pre><h4><a
name="LaclasseApnsEndpoint"></a>La classe ApnsEndpoint</h4><p>La classe <em>ApnsEndpoint</em> permet de gérer la création des objets <em>Consumer</em> et <em>Producer</em> définis dans les routes Camel. Dans notre cas, nous étendrons la classe <em>ScheduledPollEndpoint</em>. Elle permet d&#8217;implémenter un endpoint qui saura créer des objets Consumer dont le déclenchement s&#8217;effectuera à intervalle régulier.</p><p>C&#8217;est la classe <em>ApnsEndpoint</em> qui a la charge de gérer les paramètres passés dans l&#8217;URI. Ainsi, les tokens passés en paramètres de l&#8217;URI d&#8217;un objet <em>ApnsEndpoint</em> seront injectés automatiquement via les setters correspondant aux paramètres renseignés. Si un paramètre ne correspond pas à un setter déclaré, une exception sera alors lancée.</p><p>Afin de faciliter le travail de configuration des paramètres spécifiques au travail de polling, c&#8217;est la classe <em>ScheduledPollEndpoint</em> qui lira automatiquement les paramètres de déclenchement renseignés sur l&#8217;URI. L&#8217;<em>ApnsEndpoint</em> aura donc toutes les informations nécessaires pour configurer les paramètres de déclenchement de l&#8217;objet <em>ApnsConsumer</em>.</p><p>Dans le cas de l&#8217;exécution de tests, les paramètres de déclenchement de la consommation de messages en provenance de l&#8217;APNS peuvent être configurés de la façon suivante :</p><pre class="brush: java; title: ; notranslate">
from(&quot;apns:consumer?initialDelay=500&amp;delay=500&amp;timeUnit=MILLISECONDS&quot;)
	.to(&quot;log:com.apache.camel.component.apns?showAll=true&amp;multiline=true&quot;)
	.to(&quot;mock:result&quot;);
</pre><p>L&#8217;implémentation de la classe ApnsEndpoint donnera le code source suivant :</p><pre class="brush: java; title: ; notranslate">
public class ApnsEndpoint extends ScheduledPollEndpoint {
	@SuppressWarnings(&quot;unused&quot;)
	private static final Log LOG = LogFactory.getLog(ApnsEndpoint.class);
	private CopyOnWriteArraySet&lt;DefaultConsumer&gt; consumers = new CopyOnWriteArraySet&lt;DefaultConsumer&gt;();
	private String tokens;
	public ApnsEndpoint(String uri, ApnsComponent component) {
		super(uri, component);
	}
	public String getTokens() {
		return tokens;
	}
	public void setTokens(String tokens) {
		this.tokens = tokens;
	}
	private ApnsComponent getApnsComponent() {
		return (ApnsComponent)getComponent();
	}
    /**
     * On obtient une instance de la clase ApnsService depuis l'object ApnsComponant
     */
	public ApnsService getApnsService() {
		return getApnsComponent().getApnsService();
	}
    /**
      * Indique que le endpoint n'est instancié qu'une seule fois par le contexte Camel
      */
	public boolean isSingleton() {
		return true;
	}
    /**
     * Permet d'obtenir la liste des consumers
     */
	protected Set&lt;DefaultConsumer&gt; getConsumers() {
		return consumers;
	}
    /**
     * Permet de créer un consumer
     */
	public Consumer createConsumer(Processor processor) throws Exception {
		ApnsConsumer apnsConsumer = new ApnsConsumer(this, processor);
		configureConsumer(apnsConsumer);
		return apnsConsumer;
	}
	/**
	 * Permet de créer un producer
	 */
	public Producer createProducer() throws Exception {
		return new ApnsProducer(this);
	}
}
</pre><h4><a
name="LaclasseApnsProducer"></a>La classe ApnsProducer</h4><p>La classe <em>ApnsProducer</em> correspond à la classe qui permet d&#8217;envoyer des notifications aux terminaux mobiles Apple via les serveurs APNS. La classe abstraite <em>DefaultProducer</em> sera étendue pour fournir un support de base à notre implémentation.</p><p>Seule la méthode <em>process</em> reste ainsi à renseigner. Il suffira d&#8217;y implémenter l&#8217;envoi de la notification à l&#8217;APNS comme suit :</p><pre class="brush: java; title: ; notranslate">
public class ApnsProducer extends DefaultProducer {
	private static final transient Log LOG = LogFactory.getLog(ApnsProducer.class);
	private ApnsEndpoint endpoint;
	private List&lt;String&gt; tokenList;
	public ApnsProducer(ApnsEndpoint endpoint) {
		super(endpoint);
		this.endpoint = endpoint;
		configureTokens(apnsEndpoint);
	}
    /**
     * La méthode configureTokens permet d'extraire la liste de tokens destinataires
     * des notifications envoyées au endpoint.
     */
	private void configureTokens(ApnsEndpoint apnsEndpoint) {
		if (StringUtils.isNotEmpty(apnsEndpoint.getTokens())) {
			try {
				this.tokenList = extractTokensFromString(apnsEndpoint.getTokens());
			} catch (CamelException e) {
				throw new IllegalArgumentException(e);
			}
		}
	}
	/**
	 * Méthode appelée par le producer pour traiter les échanges Camel
	 */
	public void process(Exchange exchange) throws Exception {
		notify(exchange);
	}
	/**
	 * La méthode notify  est appelée pour envoyer une notification aux serveurs APNS.
	 */
	private void notify(Exchange exchange) throws ApnsException, CamelException {
		String payload = exchange.getIn().getBody(String.class);
                // Une copie de la liste des tokens à notifier est passée en paramètre,
                // ainsi que le payload du message
		endpoint.getApnsService().push(new ArrayList&lt;String&gt;(tokenList), payload);
	}
	/**
	 * On extrait une liste de tokens à partir d'une chaîne de caractères contenant
	 * des tokens séparés par un point virgule.
	 */
	private List&lt;String&gt; extractTokensFromString(String tokensStr) throws CamelException {
		tokensStr = StringUtils.trim(tokensStr);
		if (tokensStr.isEmpty()) {
			throw new CamelException(&quot;No token specified&quot;);
		}
		String[] tokenArray = tokensStr.split(&quot;;&quot;);
		int tokenArrayLength = tokenArray.length;
		for (String token : tokenArray) {
			token = token.trim();
			int tokenLength = token.length();
			// La taille d'un token est limitée à 64 caractères
			if (tokenLength != 64) {
				throw new CamelException(&quot;Token has wrong size['&quot; + tokenLength + &quot;']: &quot; + token);
			}
		}
		List&lt;String&gt; tokens = Arrays.asList(tokenArray);
		return tokens;
	}
}
</pre><p>Une fois la notification envoyée aux serveurs APNS, le terminal Apple recevra la notification et l&#8217;affichera comme suit dans le cas d&#8217;une notification texte:</p><div
style="text-align: center;"><img
src="http://blog.xebia.fr/wp-content/uploads/2010/10/iphone-push-notification-1st-screenshots.jpg" alt="iphone-push-notification-1st-screenshots" title="iphone-push-notification-1st-screenshots" width="243" height="366" class="aligncenter size-full wp-image-5574" />&nbsp;&nbsp;<img
src="http://blog.xebia.fr/wp-content/uploads/2010/10/iphone-push-notification-2nd-screenshots1.jpg" alt="iphone-push-notification-2nd-screenshots" title="iphone-push-notification-2nd-screenshots" width="243" height="366" class="aligncenter size-full wp-image-5578" /></div><h4><a
name="LaclasseApnsConsumer"></a>La classe ApnsConsumer</h4><p>La classe <em>ApnsConsumer</em> a pour objectif de nous permettre de consommer le flux feedback renvoyé par les serveurs APNS, permettant de connaître les terminaux mobiles Apple pour lesquels il n&#8217;est plus nécessaire d&#8217;envoyer de notifications (Par exemple, lorsque l&#8217;application a été désintallée).</p><p>Comme vu précédemment, la stratégie de consommation peut suivre un pattern de type <a
href="http://camel.apache.org/event-driven-consumer.html" title="Event Driven Consumer" >Event Driven Consumer</a> ou bien de <a
href="http://camel.apache.org/polling-consumer.html" title="Polling Consumer" >Polling Consumer</a>. Ici, nous choisirons le pattern Event Driven Consumer, et nous étendrons la classe <em>ScheduledPollConsumer</em> qui prend en charge toute la complexité de la gestion de consommation des messages et nous laisse nous concentrer sur le principal, c&#8217;est à dire, fournir les messages à consommer par nos routes de traitement.</p><p>Pour cela, il suffit d&#8217;implémenter la méthode <em>poll</em> qui permet d&#8217;interroger le service feedback d&#8217;Apple selon le timing d&#8217;interrogation configuré par l&#8217;URI.</p><p>C&#8217;est la classe <em>ApnsEndpoint</em>, qui au moment de la création de l&#8217;objet <em>ApnsConsumer</em>, configurera les paramétrages de polling à partir des paramètres récupérés via l&#8217;URI.</p><p>La méthode <em>doStart</em> aura pour rôle de vérifier qu&#8217;un seul objet <em>ApnsConsumer</em> est créé afin de ne pas consommer en double les messages d&#8217;une même configuration de l&#8217;<em>ApnsService</em>.</p><p>La méthode <em>poll</em> est implémentée ici de façon à récupérer les informations sur les appareils pour lesquels il ne faut plus envoyer de notifications. Pour cela, nous récupérons dans un premier temps une liste d&#8217;objets <em>InactiveDevice</em> renvoyés par le flux feedback de l&#8217;APNS, puis nous itérons sur cette liste pour les faire traiter par le processor Camel, qui n&#8217;est autre que la route de traitement Camel.</p><pre class="brush: java; title: ; notranslate">
public class ApnsConsumer extends ScheduledPollConsumer {
	private static final int DEFAULT_CONSUME_INITIAL_DELAY = 10;
	private static final int DEFAULT_CONSUME_DELAY = 3600;
	private static final TimeUnit DEFAULT_CONSUME_TIME_UNIT = TimeUnit.SECONDS;
	private static final boolean DEFAULT_APNS_FIXED_DELAY = true;
	/**
	 * La configuration par défaut des paramètres de polling est fait lors de la
	 * construction de l'objet. Ces valeurs pourront être écrasées par des valeurs
	 * configurées via l'URI.
	 */
	public ApnsConsumer(ApnsEndpoint apnsEndpoint, Processor processor) {
		super(apnsEndpoint, processor);
		setInitialDelay(DEFAULT_CONSUME_INITIAL_DELAY);
		setDelay(DEFAULT_CONSUME_DELAY);
		setTimeUnit(DEFAULT_CONSUME_TIME_UNIT);
		setUseFixedDelay(DEFAULT_APNS_FIXED_DELAY);
	}
	/**
	 * Chaque élément de cette liste obtenue par l'appel de la méthode  getInactiveDevices()
	 * sera passé à la route Camel via l'appel de la méthode getProcessor().process(e)
	 */
	protected void poll() throws Exception {
		List&lt;InactiveDevice&gt; inactiveDeviceList = getInactiveDevices();
		Iterator&lt;InactiveDevice&gt; it = inactiveDeviceList.iterator();
		while(it.hasNext()) {
			InactiveDevice inactiveDevice = it.next();
			Exchange e = getEndpoint().createExchange();
			e.getIn().setBody(inactiveDevice);
			// On donne chaque élément de la liste de terminaux inactifs
			// reçu sur le flux feedback pour qu'il soit traité par la route associée
			getProcessor().process(e);
		}
	}
	/**
	 * La méthode getInactiveDevices() permet d'obtenir depuis le flux feedback une
	 * liste d'objects InactiveDevice.
	 */
	private List&lt;InactiveDevice&gt; getInactiveDevices() {
		ApnsEndpoint ae = (ApnsEndpoint)getEndpoint();
		Map&lt;String, Date&gt; inactiveDeviceMap = ae.getApnsService().getInactiveDevices();
		List&lt;InactiveDevice&gt; inactiveDeviceList = new ArrayList&lt;InactiveDevice&gt;();
		for (Entry&lt;String, Date&gt; inactiveDeviceEntry : inactiveDeviceMap.entrySet()) {
			String deviceToken = inactiveDeviceEntry.getKey();
			Date date = inactiveDeviceEntry.getValue();
			InactiveDevice inactiveDevice = new InactiveDevice(deviceToken, date);
			inactiveDeviceList.add(inactiveDevice);
		}
		return inactiveDeviceList;
	}
    @Override
	public ApnsEndpoint getEndpoint() {
		return (ApnsEndpoint)super.getEndpoint();
	}
	/**
	 * La consommation du flux feedback doit être faite par un unique consumer.
	 * La méthode doStart permet de s'enassurer lors du démarrage.
	 * Si un autre consumer est déjà déclaré, alors une exception sera lancée.
	 */
    @Override
    protected void doStart() throws Exception {
        // only add as consumer if not already registered
        if (!getEndpoint().getConsumers().contains(this)) {
            if (!getEndpoint().getConsumers().isEmpty()) {
                throw new IllegalStateException(&quot;Endpoint &quot; + getEndpoint().getEndpointUri() + &quot; only allows 1 active consumer but you attempted to start a 2nd consumer.&quot;);
            }
            getEndpoint().getConsumers().add(this);
        }
        super.doStart();
    }
    @Override
    protected void doStop() throws Exception {
        super.doStop();
        getEndpoint().getConsumers().remove(this);
    }
}
</pre><h3><a
name="Conclusion"></a>Conclusion</h3><p>Nous avons vu dans cette seconde partie comment implémenter les classes nécessaires au développement d&#8217;un composant Apache Camel. Nous verrons dans une dernière partie comment mettre en place différentes stratégies de test pour valider notre composant.</p><h3><a
name="Liensutiles"></a>Liens utiles</h3><ul><li><a
href="http://camel.apache.org/writing-components.html" title="httpcamelapacheorgwritingcomponentshtml" >http://camel.apache.org/writing-components.html</a></li><li><a
href="http://soa.dzone.com/news/camel-component-amazon-sqs?mz=7893-progress" title="Cration dun composant Camel pour communiquer avec Amazon SQS" >Création d&#8217;un composant Camel pour communiquer avec Amazon SQS</a></li><li><a
href="http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/ApplePushService/ApplePushService.html" title="Apple Push Notification Service par Apple" >Apple Push Notification Service par Apple</a></li><li><a
href="http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingWIthAPS/CommunicatingWIthAPS.html" title="Provider Communication with Apple Push Notification Service par Apple" >Provider Communication with Apple Push Notification Service par Apple</a></li></ul><p>Le site google code du composant &#8216;camel-apns&#8217; présenté dans l&#8217;article :</p><ul><li><a
href="http://code.google.com/p/camel-apns" title="httpcodegooglecompcamelapns" >http://code.google.com/p/camel-apns</a></li></ul><p>Parties suivantes et précédentes de l&#8217;article :</p><ul><li><a
href="http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/" title="Créer un composant Apache Camel de connexion à l'APNS - 1 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 1 sur 3</a></li><li><a
href="http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-3-sur-3/" title="Créer un composant Apache Camel de connexion à l'APNS - 3 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 3 sur 3</a></li></ul><style type="text/css">table.tablo { border-collapse:collapse; border: 1px solid #6C626C; width:95%; font: normal normal normal 1.1em/normal Arial, sans-serif; } table.tablo thead { background: #EFEFEF; border-bottom: 1px solid #6C626C; border-top: 1px solid #6C626C; color: #4F2F4F; } table.tablo thead th { padding: 5px; } table.tablo tbody tr { border: 1px solid #6C626C; } table.tablo tbody tr td { padding: 5px; }</style>]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 1 sur 3</title><link>http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/</link> <comments>http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/#comments</comments> <pubDate>Thu, 30 Sep 2010 07:12:01 +0000</pubDate> <dc:creator>Alexis Kinsella</dc:creator> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Apple]]></category> <category><![CDATA[Camel]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=5537</guid> <description><![CDATA[Le projet Apache Camel est un framework d&#8217;intégration basé sur l&#8217;implémentation de patterns d&#8217;intégration d&#8217;entreprise connus. Il permet d&#8217;implémenter des règles de routage et de médiation à partir d&#8217;un DSL Java ou bien via des configurations Spring au format Xml. Apache Camel utilise la notion d&#8217;URIs, ce qui permet de travailler facilement avec différents types [...]]]></description> <content:encoded><![CDATA[<p>Le projet Apache Camel est un framework d&#8217;intégration basé sur l&#8217;implémentation de patterns d&#8217;intégration d&#8217;entreprise connus. Il permet d&#8217;implémenter des règles de routage et de médiation à partir d&#8217;un DSL Java ou bien via des configurations Spring au format Xml.</p><p>Apache Camel utilise la notion d&#8217;URIs, ce qui permet de travailler facilement avec différents types de transport ou modèles d&#8217;échange de messages, tels que HTTP ou JMS. De la même manière, Apache Camel est capable de travailler avec différents formats de données (Csv, Xml, Json, &#8230;).</p><p>L&#8217;utilisation des composants fournis <em>out of the box</em> permet de travailler avec de nombreux protocoles et formats de données. Mais qu&#8217;en est-il lorsqu&#8217;un connecteur vient à manquer?</p><p>Pour répondre à cette question, le projet Apache Camel propose une API complète permettant d&#8217;implémenter soi-même des composants adaptés à son besoin.</p><h3><a
name="Objectif"></a>Objectif</h3><p>L&#8217;objectif de cet article est de présenter comment initier le développement d&#8217;un composant Apache Camel.</p><p>Pour cela, nous mettrons en place un composant qui permettra de dialoguer avec l&#8217;<em>Apple Push Notification Service</em>, dans le but d&#8217;envoyer des notifications aux différents terminaux Apple (iPad, iPhone, iPod Touch).</p><p>Le composant proposera à la fois des endpoints de type <em>producer</em> et de type <em>consumer</em> qui permettrons respectivement d&#8217;envoyer des notifications et de lire un flux feedback d&#8217;informations en provenance de l&#8217;APNS.</p><p>En pré-requis, un ensemble de endpoints devra utiliser une même instance de la classe <em>ApnsService</em> proposée par la librairie java-apns, qui permet de dialoguer avec les serveurs d&#8217;Apple. La firme à la pomme préconise en effet de créer un nombre limité de connexions, et de réutiliser celles-ci pour communiquer avec ses serveurs. Nous utiliserons également le scheme <em>apns</em> pour déclarer les URIs qui représenteront les endpoints gérés par nos composants.</p><h3><a
name="PrsentationdelAPNS"></a>Présentation de l&#8217;APNS</h3><p>L&#8217;Apple Push Notification Service est disponible pour les applications destinées aux iPhones, iPads et iPods touch. Il permet d&#8217;envoyer des notifications de 3 types : texte, image ou badge.</p><p>Pour envoyer une notification, un provider (une application serveur en général) doit en premier lieu envoyer la notification à l&#8217;Apple Push Notification Service qui se chargera à son tour de diffuser la notification aux terminaux concernés.</p><p>La notification est composée d&#8217;un token (identifiant unique d&#8217;un terminal) et d&#8217;un payload (contenu de la notification).</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/remote_notif_simple.jpg" border="0" alt="Simple notification APNS" /></div><p>L&#8217;APNS propose en complément de l&#8217;envoi de notifications, un flux feedback d&#8217;informations permettant de connaître la liste des terminaux pour lesquels les notifications n&#8217;ont pu être délivrées de façon répétée (généralement, lorsque l&#8217;application a été désinstallée).</p><p>Pour qu&#8217;une application iOS soit en mesure de recevoir des notifications, elle doit en premier lieu fournir à l&#8217;application serveur (celle qui va envoyer les notifications aux serveurs Apple) toutes les informations nécessaires notamment son token d&#8217;identification. Cette opération peut-être réalisée, par exemple, via un simple appel HTTP.</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/registration_sequence.jpg" border="0" alt="Séquence d'enregistrement" /></div><h3><a
name="APIJavadeconnexionlAPNS"></a>API Java de connexion à l&#8217;APNS</h3><p>De nombreux projets permettent de dialoguer avec l&#8217;APNS via différents langages de programmation. Actuellement deux implémentations existent pour le langage Java :</p><ul><li><a
href="http://github.com/notnoop/java-apns" title="javaapns" >java-apns</a> sur GitHub, et</li><li><a
href="http://code.google.com/p/javapns/" title="javapns" >javapns</a> sur Google Code.</li></ul><p>Historiquement, l&#8217;implémentation javapns est apparue avant java-apns. Cependant nous choisirons d&#8217;utiliser la librairie java-apns qui a pour avantage de proposer des fonctionnalités complètes (gestion de pool de connections, capacité de reconnexion, &#8230;), ainsi qu&#8217;une API élégante et différentes facilités d&#8217;écriture de tests unitaires.</p><h3><a
name="LesendpointsCamel"></a>Les endpoints Camel</h3><p>Le développement d&#8217;un endpoint Apache Camel implique d&#8217;implémenter une ou plusieurs des méthodes suivantes selon les besoins :</p><table
class="tablo" border="0"><thead><th> Méthode</th><th> Description</th></thead><tbody><tr><td> createProducer()</td><td> Crée un producer permettant d&#8217;envoyer des messages à un endpoint</td></tr><tr><td> createConsumer()</td><td> Crée un consumer implémentant le pattern Event Driven Consumer pour consommer des messages depuis un endpoint</td></tr><tr><td> createPollingConsumer()</td><td> Crée un consumer implémentant le Polling Consumer pour consommer des messages depuis un endpoint</td></tr></tbody></table><h4><a
name="LEventDrivenConsumer"></a>L&#8217;Event Driven Consumer</h4><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/event-driven-consumer-solution.gif" border="0" alt="Solution Event Driven Consumer" /></div><p>Ce modèle événementiel de consommation des messages correspond au modèle de consommation par défaut des messages par les composants Camel.</p><h4><a
name="LePollingConsumer"></a>Le Polling Consumer</h4><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/polling-consumer-solution.gif" border="0" alt="Solution Polling Consumer" /></div><p>Le polling consumer propose 3 types de méthodes:</p><table
class="tablo" border="0"><thead><th> Méthode</th><th> Description</th></thead><tbody><tr><td> receive()</td><td> Attend qu&#8217;un échange soit disponible et le retourne (potentiellement indéfiniment)</td></tr><tr><td> receive(long)</td><td> Attend un échange jusqu&#8217;à un timeout défini. Renvoie null si aucun échange n&#8217;a été reçu dans le temps imparti</td></tr><tr><td> receiveNoWait()</td><td> Tente de recevoir un message sans attendre de timeout et retourne null si aucun échange n&#8217;est disponible</td></tr></tbody></table><p>Le composant <em>camel-jms</em> implémente cette notion de polling-consumer pour s&#8217;intégrer à Apache Camel.</p><h3><a
name="Gnrerunsquelettedecomposant"></a>Générer un squelette de composant</h3><p>Partir de zéro pourrait s&#8217;avérer compliqué. Heureusement le projet Apache Camel met à disposition l&#8217;archétype Maven: <em>camel-artefact-component</em>.</p><pre class="brush: java; title: ; notranslate">
mvn archetype:create
-DarchetypeGroupId=org.apache.camel.archetypes
-DarchetypeArtifactId=camel-archetype-component
-DarchetypeVersion=2.3.0
-DgroupId=org.apache.camel
-DartifactId=camel-apns
</pre><p>L&#8217;exécution de la ligne de commande précédente va créer un squelette de composant sur lequel s&#8217;appuyer pour développer notre composant:</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/maven-archetype-generated-content.png" border="0" alt="Contenu généré par l'archetype Maven" /></div><p>L&#8217;archétype va générer la structure nécessaire au développement du composant Camel. Cependant il sera nécessaire de personnaliser le composant nouvellement créé pour qu&#8217;il corresponde au nommage souhaité :</p><ul><li>&#8216;META-INF/services/&lt;PACKAGE_NAME&gt;/direct&#8217; devra être renommé selon le scheme de l&#8217;URI de votre composant (Dans notre cas: &#8216;apns&#8217;).</li><li>Les différentes classes générées seront préfixées par &#8216;Apns&#8217; plutôt que &#8216;Direct&#8217;.</li></ul><p>Il est possible de supprimer les classes qui ne seraient pas utilisées dans le cas où le composant serait uniquement destiné à consommer des messages ou à bien en produire.</p><p>Après renommage, le résultat obtenu doit être le suivant :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2010/09/vue-composant-apns.png" border="0" alt="Vue composant APNS" /></div><h3><a
name="ImportersoncomposantdansEclips"></a>Importer son composant dans Eclipse</h3><p>Pour cela, il est possible d&#8217;utiliser la commande suivante:</p><pre class="brush: java; title: ; notranslate">
mvn eclipse:eclipse
</pre><h3><a
name="Lefichierpomxml"></a>Le fichier pom.xml</h3><p>Il est conseillé d&#8217;hériter du projet parent <em>camel-parent</em>:</p><pre class="brush: xml; title: ; notranslate">
&lt;parent&gt;
	&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
	&lt;artifactId&gt;camel-parent&lt;/artifactId&gt;
	&lt;version&gt;2.4.0&lt;/version&gt;
&lt;/parent&gt;
</pre><p>Le composant <em>camel-parent</em> déclare en effet un certain nombre de dépendances nécessaires, ainsi que le type <em>bundle</em> qui permet d&#8217;OSGifier son composant. Ceci permettra aux utilisateurs/développeurs de le déployer dans un conteneur OSGi, tel qu&#8217;Apache ServiceMix.</p><p>Nous allons donc déclarer le packaging du composant, ainsi que différentes propriétés nécessaires à l&#8217;OSGificiation comme suit:</p><pre class="brush: xml; title: ; notranslate">
&lt;packaging&gt;bundle&lt;/packaging&gt;
...
&lt;properties&gt;
	...
	&lt;!-- OSGi bundles properties --&gt;
	&lt;camel.osgi.import.pkg&gt;&lt;strong&gt;&lt;/camel.osgi.import.pkg&gt;
	&lt;camel.osgi.private.pkg&gt;!&lt;/strong&gt;&lt;/camel.osgi.private.pkg&gt;
	&lt;camel.osgi.export&gt;${camel.osgi.export.pkg}*;version=${camel.osgi.export.version}&lt;/camel.osgi.export&gt;
	&lt;camel.osgi.export.version&gt;${project.version}&lt;/camel.osgi.export.version&gt;
	&lt;camel.osgi.import&gt;${camel.osgi.import.pkg}&lt;/camel.osgi.import&gt;
	&lt;camel.osgi.symbolic.name&gt;${groupId}.${artifactId}&lt;/camel.osgi.symbolic.name&gt;
&lt;/properties&gt;
</pre><p>Il est également nécessaire de déclarer les dépendances Camel dont nous aurons besoin, ainsi que les dépendances nécessaires à l&#8217;implémentation du composant:</p><pre class="brush: xml; title: ; notranslate">
&lt;dependencies&gt;
	...
	&lt;!-- Camel --&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
		&lt;artifactId&gt;camel-core&lt;/artifactId&gt;
		&lt;version&gt;${camel.version}&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
		&lt;artifactId&gt;camel-spring&lt;/artifactId&gt;
		&lt;version&gt;${camel.version}&lt;/version&gt;
	&lt;/dependency&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
		&lt;artifactId&gt;camel-test&lt;/artifactId&gt;
		&lt;version&gt;${camel.version}&lt;/version&gt;
		&lt;scope&gt;test&lt;/scope&gt;
	&lt;/dependency&gt;
	...
	&lt;!-- APNS --&gt;
	&lt;dependency&gt;
		&lt;groupId&gt;com.notnoop.apns&lt;/groupId&gt;
		&lt;artifactId&gt;apns&lt;/artifactId&gt;
		&lt;version&gt;${apns.version}&lt;/version&gt;
		&lt;exclusions&gt;
			&lt;exclusion&gt;
				&lt;groupId&gt;ch.qos.logback&lt;/groupId&gt;
				&lt;artifactId&gt;logback-classic&lt;/artifactId&gt;
			&lt;/exclusion&gt;
		&lt;/exclusions&gt;
	&lt;/dependency&gt;
	...
&lt;/dependencies&gt;
</pre><p>Le projet Apache Camel propose le plugin <em>camel-maven-plugin</em> que nous allons déclarer dans notre fichier pom. Celui-ci permet de lancer en ligne de commande une instance standalone d&#8217;Apache Camel et de démarrer les routes qui sont déclarées dans le classpath via le fichier Spring suivant: &#8216;META-INF/spring/camel-context.xml&#8217;.</p><pre class="brush: xml; title: ; notranslate">
&lt;!-- allows the route to be ran via 'mvn camel:run' --&gt;
&lt;plugin&gt;
	&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
	&lt;artifactId&gt;camel-maven-plugin&lt;/artifactId&gt;
	&lt;version&gt;${camel.version}&lt;/version&gt;
&lt;/plugin&gt;
</pre><p>Plusieurs entrées <em>repository</em> et <em>pluginReposity</em> doivent également être déclarées dans le pom afin que Maven puisse importer différentes dépendances et plugins nécessaires à notre projet:</p><pre class="brush: xml; title: ; notranslate">
&lt;repositories&gt;
	&lt;repository&gt;
		&lt;id&gt;open.iona.m2&lt;/id&gt;
		&lt;name&gt;IONA Open Source Community Release Repository&lt;/name&gt;
		&lt;url&gt;http://repo.open.iona.com/maven2&lt;/url&gt;
		&lt;snapshots&gt;
			&lt;enabled&gt;false&lt;/enabled&gt;
		&lt;/snapshots&gt;
		&lt;releases&gt;
			&lt;enabled&gt;true&lt;/enabled&gt;
		&lt;/releases&gt;
	&lt;/repository&gt;
	&lt;repository&gt;
		&lt;id&gt;open.iona.m2-snapshot&lt;/id&gt;
		&lt;name&gt;IONA Open Source Community Snapshot Repository&lt;/name&gt;
		&lt;url&gt;http://repo.open.iona.com/maven2-snapshot&lt;/url&gt;
		&lt;snapshots&gt;
			&lt;enabled&gt;true&lt;/enabled&gt;
		&lt;/snapshots&gt;
		&lt;releases&gt;
			&lt;enabled&gt;false&lt;/enabled&gt;
		&lt;/releases&gt;
	&lt;/repository&gt;
	&lt;!-- java-apns repository --&gt;
	&lt;repository&gt;
		&lt;id&gt;notnoop-repos&lt;/id&gt;
		&lt;url&gt;http://notnoop.github.com/m2-repo&lt;/url&gt;
	&lt;/repository&gt;
	...
	&lt;repository&gt;
		&lt;id&gt;apache.incubating.releases&lt;/id&gt;
		&lt;name&gt;Apache Incubating Release Distribution Repository&lt;/name&gt;
		&lt;url&gt;http://people.apache.org/repo/m2-incubating-repository&lt;/url&gt;
	&lt;/repository&gt;
&lt;/repositories&gt;
&lt;pluginRepositories&gt;
	&lt;pluginRepository&gt;
		&lt;id&gt;open.iona.m2&lt;/id&gt;
		&lt;name&gt;IONA Open Source Community Release Repository&lt;/name&gt;
		&lt;url&gt;http://repo.open.iona.com/maven2&lt;/url&gt;
		&lt;snapshots&gt;
			&lt;enabled&gt;false&lt;/enabled&gt;
		&lt;/snapshots&gt;
		&lt;releases&gt;
			&lt;enabled&gt;true&lt;/enabled&gt;
		&lt;/releases&gt;
	&lt;/pluginRepository&gt;
	&lt;pluginRepository&gt;
		&lt;id&gt;open.iona.m2-snapshot&lt;/id&gt;
		&lt;name&gt;IONA Open Source Community Snapshot Repository&lt;/name&gt;
		&lt;url&gt;http://repo.open.iona.com/maven2-snapshot&lt;/url&gt;
		&lt;snapshots&gt;
			&lt;enabled&gt;true&lt;/enabled&gt;
		&lt;/snapshots&gt;
		&lt;releases&gt;
			&lt;enabled&gt;false&lt;/enabled&gt;
		&lt;/releases&gt;
	&lt;/pluginRepository&gt;
	&lt;pluginRepository&gt;
		&lt;id&gt;maven-repository.dev.java.net&lt;/id&gt;
		&lt;name&gt;Java.net Maven 2 Repository&lt;/name&gt;
		&lt;url&gt;http://download.java.net/maven/2&lt;/url&gt;
	&lt;/pluginRepository&gt;
&lt;/pluginRepositories&gt;
</pre><h3><a
name="Conclusion"></a>Conclusion</h3><p>Nous avons vu dans cette première partie comment initier le développement d&#8217;un composant Camel à l&#8217;aide de l&#8217;archétype Maven <em>camel-archetype-component</em>.</p><p>Dans un prochain billet, nous verrons comment implémenter les différentes classes d&#8217;un composant Camel. Puis nous conclurons dans une troisième et dernière partie, par la présentation des méthodes permettant de tester notre composant afin de fournir un livrable de qualité.</p><h3><a
name="Liensutiles"></a>Liens utiles:</h3><ul><li><a
href="http://camel.apache.org" title="Le site du projet Apache Camel" >Le site du projet Apache Camel</a></li><li><a
href="http://camel.apache.org/creating-a-new-camel-component.html" title="httpcamelapacheorgcreatinganewcamelcomponenthtml" >http://camel.apache.org/creating-a-new-camel-component.html</a></li></ul><p>Le site google code du composant <em>camel-apns</em> présenté dans cet article:</p><ul><li><a
href="http://code.google.com/p/camel-apns" title="httpcodegooglecompcamelapns" >http://code.google.com/p/camel-apns</a></li></ul><p>Parties suivantes de l&#8217;article :</p><ul><li><a
href="http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-2-sur-3/" title="Créer un composant Apache Camel de connexion à l'APNS - 2 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 2 sur 3</a></li><li><a
href="http://blog.xebia.fr/2010/10/06/creer-un-composant-apache-camel-de-connexion-a-lapns-3-sur-3/" title="Créer un composant Apache Camel de connexion à l'APNS - 3 sur 3" >Créer un composant Apache Camel de connexion à l&#8217;APNS &#8211; 3 sur 3</a></li></ul><style type="text/css">table.tablo { border-collapse:collapse; border: 1px solid #6C626C; width:95%; font: normal normal normal 1.1em/normal Arial, sans-serif; } table.tablo thead { background: #EFEFEF; border-bottom: 1px solid #6C626C; border-top: 1px solid #6C626C; color: #4F2F4F; } table.tablo thead th { padding: 5px; } table.tablo tbody tr { border: 1px solid #6C626C; } table.tablo tbody tr td { padding: 5px; }</style>]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/09/30/creer-un-composant-apache-camel-de-connexion-a-lapns-1-sur-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/</link> <comments>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#comments</comments> <pubDate>Tue, 06 Jul 2010 05:14:27 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[EDI]]></category> <category><![CDATA[GAE]]></category> <category><![CDATA[Google App Engine]]></category> <category><![CDATA[Hibernate Validator]]></category> <category><![CDATA[Paris JUG]]></category> <category><![CDATA[Smook]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Tomcat]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=4986</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Une étude américaine prédit une pénurie d&#8217;informaticiens pour bientôt. SOA La future version 1.4 de Smooks supportera les messages UN/EDIFACT Serveurs d&#8217;applications / Cloud Computing Tomcat 7 sort en BETA Google App Engine 1.3.5 et toolkit Paypal Le coin de [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité  éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#Unetudeamricaineprditunepnurie">Une étude américaine prédit une pénurie d&#8217;informaticiens pour bientôt.</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#LafutureversiondeSmookssupport">La future version 1.4 de Smooks supportera les messages UN/EDIFACT</a></li></ul><p><strong>Serveurs d&#8217;applications / Cloud Computing</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#TomcatsortenBETA">Tomcat 7 sort en BETA</a></li><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#GoogleAppEngineetdutoolkitPayp">Google App Engine 1.3.5 et toolkit Paypal</a></li></ul><p><strong>Le coin de la  technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#HibernateValidator">Hibernate Validator 4.1.0</a></li></ul><p><strong>Evènements  de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/#LeParisJUGetlAvantJUG">Le ParisJUG et l&#8217;AvantJUG</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité  éditeurs / SSII</h3><h4><a
name="Unetudeamricaineprditunepnurie"></a>Une étude américaine prédit une pénurie d&#8217;informaticiens pour bientôt.</h4><p>C&#8217;est à la fois une bonne et une mauvaise nouvelle qui est sortie d&#8217;un étude américaine sur le marché de l&#8217;informatique, <a
href="http://www.infoq.com/news/2010/06/career-labor-statistics" title="rapporte par infoQ" >rapportée par infoQ</a> : la bonne nouvelle, elle est pour les techniciens que nous sommes, car nous devrions avoir du travail pendant un long moment. La mauvaise nouvelle est pour nos employeurs, qui vont avoir de plus en plus de mal à recruter.<br
/> Les prévisions qui ressortent de cette étude sont les suivantes :</p><ul><li>la croissance du secteur informatique devrait être quatre fois supérieure à celle des autres métiers de l&#8217;ingénierie dans les années à venir.</li><li>aux Etats Unis, il y a deux fois plus d&#8217;offres que de diplômés chaque année. C&#8217;est le seul métier scientifique pour laquelle l&#8217;offre est supérieure à la demande.</li></ul><p>En parallèle de l&#8217;augmentation des besoins, il semble que les étudiants percoivent les métiers de l&#8217;informatique de manière erronée :</p><ul><li><em>Tous les postes motivant sont exportés en Inde</em>. Le mouvement global (aussi bien aux Etats Unis qu&#8217;en Europe)  est plutôt à un retour des activités intéressantes en local, et une exportation des taches à faible valeurs ajoutées.</li><li><em>C&#8217;est un métier d&#8217;homme</em>. Ce fait avéré est en train de changer, en partie grâce à certaines initiatives locales (voir ci-dessous). Même si la balance est loin d&#8217;être équilibrée, il semblerait que de plus en plus de demoiselles choisissent les carrières techniques. C&#8217;est à nos communautés de les convaincre de les poursuivre !</li><li><em>L&#8217;informatique, c&#8217;est programmer, et programmer c&#8217;est rester toute la journée devant un écran</em>. Tous les consultants vous le diront, même si ils ne pratiquent pas l&#8217;XP, l&#8217;informatique est une activité sociale <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></li><li><em>C&#8217;est trop difficile</em>. S&#8217;il est sûr que comprendre les algorithmes de GC en détail relève parfois de la mission impossible, tous les chefs de projets ou scrum master vous le diront : travailler dans l&#8217;informatique, c&#8217;est avant tout gérer son stress, gérer ses connaissances (et les augmenter au fur à et mesure) et se montrer inventif.</li></ul><p>Il existe ainsi un certain nombre de mythes, que <a
href="http://www.rebootingcomputing.org/" title="certains professeurs amricains tentent de dmonter" >certains professeurs américains tentent de démonter</a>.</p><p>Les défis à venir sont énormes, puisqu&#8217;il va falloir réconcilier le désamour des étudiants pour les carrières informatiques, et les besoins des entreprises qui s&#8217;annoncent énormes. Bien heureusement, un certain nombre d&#8217;acteurs français essayent de proposer une vision du marché de l&#8217;informatique plus <em>humaine</em> que d&#8217;autres.</p><p><a
href="http://blog.xebia.fr/2010/05/20/xebia-recrute-aussi-des-jeunes-diplomes-hf/" title="A ce propos, vous savez que Xebia recrute ? ;)" >A ce propos, vous savez que Xebia recrute ? <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </a></p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="LafutureversiondeSmookssupport"></a>La future version 1.4 de Smooks supportera les messages UN/EDIFACT</h4><p>L&#8217;équipe de développement de Smooks vient d&#8217;annoncer le support du traitement des messages <a
href="http://fr.wikipedia.org/wiki/%C3%89change_de_donn%C3%A9es_informatis%C3%A9" title="EDI" >EDI</a> (Échange de Données Informatisées) au format <a
href="http://www.unece.org/trade/untdid/welcome.htm" title="UNEDIFACT Interchange" >UN/EDIFACT Interchange</a>, dans la future version du projet.</p><p>Pour rappel <a
href="http://www.smooks.org/mediawiki/index.php?title=Main_Page" title="Smooks" >Smooks</a> est un framework Java offrant un moteur de traitement des données XML et non XML (CSV, EDI, Java, etc.). Il est capable d&#8217;effectuer des transformations de données en s&#8217;appuyant sur des transformations existantes, ou en utilisant des technologies de <em>templating</em> telles que XSLT, Freemarker, StringTemplate, etc. Smooks permet également d&#8217;analyser un flux de données afin de remplir un modèle d&#8217;objets Java (Java Bean Binding).</p><p>Le framework Smooks peut prendre en charge les modèles de traitement DOM et SAX, ce qui signifie qu&#8217;il est capable de traiter aussi bien un fichier qu&#8217;un flux de données.</p><p>Ainsi, les messages EDI pourront être traités grâce à deux nouvelles fonctionnalités :</p><ul><li>Un module de lecture dédié au format UN/EDIFACT Interchange (&lt;unedifact:reader&gt;), qui permettra de transformer un message EDI de manière automatique dans un format XML compréhensible par le moteur de traitement de Smooks.</li></ul><ul><li>Un outil pour Maven et ANT, appellé EDI Conversion Tool (ECT), embarquant directement les référentiels UN/EDIFACT, et offrant la possibilité de générer un Jar contenant les fichiers de mapping Smooks correspondant au message EDI traité.</li></ul><p>Avec ces nouvelles fonctionnalités, Smooks propose une véritable alternative Open Source et performante aux solutions propriétaires pour le traitement des messages EDI au format UN/EDIFACT. Déjà intégré au sein de Mule ESB et de JBoss ESB, Smooks devient de plus en plus incontournable au sein des architectures SOA s&#8217;appuyant sur des solutions Open Source.</p><p>Ces nouveautés sont déjà disponibles dans la version 1.4-SNAPSHOT, téléchargeable directement depuis le <a
href="http://snapshots.repository.codehaus.org/org/milyn/edi/unedifact/" title="repository Maven" >repository Maven</a> du projet.</p><p>Pour en savoir plus :</p><ul><li><a
href="http://blog.smooks.org/2010/06/28/processing-unedifact-message-interchanges" title="Lannonce sur le blog de Smooks" >L&#8217;annonce sur le blog de Smooks</a></li><li><a
href="http://www.smooks.org" title="Le site du projet Smooks" >Le site du projet Smooks</a></li><li><a
href="http://www.unece.org/trade/untdid/welcome.htm" title="Le format UNEDIFACT Interchange" >Le format UN/EDIFACT Interchange</a></li></ul><h3><a
name="ServeursdapplicationsetCloudCo"></a>Serveurs d&#8217;applications / Cloud Computing</h3><h4><a
name="TomcatsortenBETA"></a>Tomcat 7 sort en BETA</h4><p>Après 18 mois de travail, Apache nous livre la première version officielle de Tomcat 7. Cette nouvelle release est désormais disponible dans les pages de téléchargements du site <a
href="http://tomcat.apache.org" title="httptomcatapacheorg" >http://tomcat.apache.org</a> qui intègre pour l&#8217;occasion la documentation du précieux. Comme promis de longue date, Tomcat 7 implémente les Servlet 3.0, ainsi que JSP et EL 2.2.</p><p>A ces mises à niveau s&#8217;ajoutent de nouvelles fonctionnalités:</p><ul><li>Détection et prévention des fuites de mémoire, pour en finir avec les OutOfMemory au rechargement des applications web liés à l&#8217;utilisation du PermGen. Ce développement avait été porté sur Tomcat 6, début avril, le voilà disponible tout naturellement sur Tomcat 7.</li><li>La sécurité est aussi largement améliorée avec notamment un filtre permettant de bloquer les attaques de type Cross Site Request Forgery. C&#8217;est aussi une nouvelle gestion des rôles pour Tomcat Manager et Host Manager.</li><li>La gestion d&#8217;alias de répertoire à la mode apache.</li><li>Enfin, la possibilité d&#8217;embarquer et de lancer Tomcat simplement, ce qui ne manque pas de faire penser à Jetty.</li></ul><p>Outre toutes ces nouveautés, le code a subi une vaste cure de nettoyage et l&#8217;équipe affirme avoir porté toutes les corrections de bugs des versions précédentes dans Tomcat 7. Nous en reparlerons sûrement sur le blog, en attendant, n&#8217;hésitez pas, faites le tour du propriétaire et sachez apprécier la nouvelle décoration.</p><p>Pour en savoir plus:</p><ul><li><a
href="L'annonce de Mark Thomas" title="httpwwwtomcatexpertcomblog20100629apachetomcat7hasbeenreleased" >http://www.tomcatexpert.com/blog/2010/06/29/apache-tomcat-7-has-been-released</a></li><li><a
href="Téléchargez Tomcat 7" title="httptomcatapacheorgdownload70cgi" >http://tomcat.apache.org/download-70.cgi</a></li><li><a
href="L'article sur DZone" title="httpjavadzonecomarticlestomcatluckynumber7beta" >http://java.dzone.com/articles/tomcat-lucky-number-7-beta</a></li></ul><h4><a
name="GoogleAppEngineetdutoolkitPayp"></a>Google App Engine 1.3.5 et toolkit Paypal</h4><p>La sortie de Google App Engine en version 1.3.5 apporte comme à son habitude son lot de nouveautés et de corrections pour les développeurs Java et Python:</p><ul><li>Une amélioration de la Task Queue API permettant de traiter 50 reqs/sec par queue au lieu de 50 reqs/sec par application. Google promet d&#8217;ailleurs de futures améliorations de scalabilité relatives à cette API.</li><li>Le support pour la précompilation de fichiers sources Python</li><li>Une amélioration de l&#8217;API BlobStore permettant la lecture d&#8217;un blob tel un fichier avec une classe BlobstoreInputStream.</li></ul><p>La réelle nouveauté vient cependant de PayPal annonçant le support de sa plateforme de paiement PayPal X pour GAE.</p><p>A travers sa plateforme PayPal X, le leader du micro-paiement sécurisé propose une API clé en main, permettant aux développements d&#8217;embarquer différentes solutions de paiement dans leurs applications via différents modèles de monétisation: Le <a
href="http://fr.wikipedia.org/wiki/Freemium" title="freemium" >freemium</a>, les abonnements, le pay-per-use, les micro transactions. PayPal souhaite ainsi fournir une solution de paiement adaptée à tous les besoins.</p><p>Grâce à ce nouveau service orienté e-commerce et entreprise, le géant de Moutain View espère bien profiter de la demande croissante des entreprises envers l&#8217;hébergement d&#8217;applications sur une architecture cloud, et continuer de développer son offre destinée aux entreprises.</p><p>Pour en savoir plus:</p><ul><li><a
href="http://googleappengine.blogspot.com/2010/06/paypal-introduces-paypal-x-platform.html" title="Billet du blog Google App Engine prsentant le toolkit PayPal X" >Billet du blog Google App Engine présentant le toolkit PayPal X</a></li><li><a
href="http://code.google.com/p/paypalx-gae-toolkit/" title="PayPal X toolkit" >PayPal X toolkit</a></li><li><a
href="http://googleappengine.blogspot.com/2010/06/app-engine-sdk-135-released-with-new.html" title="Annonce de la sortie de Google App Engine 135" >Annonce de la sortie de Google App Engine 1.3.5</a></li></ul><h3><a
name="Lecoindelatechnique"></a>Le coin de la  technique</h3><h4><a
name="HibernateValidator"></a>Hibernate Validator 4.1.0</h4><p>Outre quelques corrections de bugs et améliorations de performance au niveau de certains parsings, cette <a
href="http://in.relation.to/Bloggers/HibernateValidator410FinalHasLanded#comment16028" title="version" >version</a> d&#8217;Hibernate Validator fournit de nouvelles fonctionnalités intéressantes, assez bien détaillées sur le <a
href="http://musingsofaprogrammingaddict.blogspot.com/2010/06/whats-new-in-hibernate-validator-41.html" title="blog" >blog</a> de Gunar Morling, un des développeurs du projet.</p><p>Pour commencer, quelques types de contraintes ont été ajoutés:</p><ul><li><code>@CreditCardNumber</code> : permet de valider un numéro de carte de crédit selon l&#8217;algorithme de <a
href="http://fr.wikipedia.org/wiki/Formule_de_Luhn" title="Luhn" >Luhn</a></li><li><code>@NotBlank</code> : Le champ ne doit être ni null, ni vide, ni contenir que des espaces</li><li><code>@URL</code> : valide une URL, on peut préciser le protocole, http par exemple</li><li><code>@ScriptAssert</code> : cette contrainte permet de déléguer à un langage script tiers la validation du champ, ceci étant rendu possible grâce à la <a
href="http://jcp.org/en/jsr/detail?id=223" title="JSR-223" >JSR-223</a> permettant l&#8217;intégration de languages de script dans Java (à partir de la version 1.6). Plus de détail <a
href="http://docs.jboss.org/hibernate/stable/validator/api/org/hibernate/validator/constraints/ScriptAssert.html" title="ici" >ici</a></li></ul><p>De plus il est possible maintenant de choisir sa propre stratégie pour récupérer les ResourceBundle, pour par exemple associer un message d&#8217;erreur à un champ. Il suffit pour cela de fournir une implémentation de l&#8217;interface <code>ResourceBundleLocator</code> qui contient une méthode retournant un <code>ResourceBundle</code>. On peut donc par exemple stocker ces messages dans une base de données.</p><p>Enfin cette version introduit la possibilité de créer des contraintes programmatiquement. Voici un exemple qui  vient de la <a
href="http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html/programmaticapi.html#example-constraint-mapping" title="documentation" >documentation</a>:</p><pre class="brush: java; title: ; notranslate">
ConstraintMapping mapping = new ConstraintMapping();
mapping.type( Car.class ).property( &quot;manufacturer&quot;, FIELD ).constraint( NotNullDef.class )
   .property( &quot;licensePlate&quot;, FIELD ).constraint( NotNullDef.class )
   .constraint( SizeDef.class ).min( 2 ).max( 14 )
   .property( &quot;seatCount&quot;, FIELD ).constraint( MinDef.class ).value ( 2 )
   .type( RentalCar.class ).property( &quot;rentalStation&quot;, METHOD).constraint( NotNullDef.class );
</pre><p>On utilise le principe des méthodes chainées, ça rappelle de loin les Criteria d&#8217;Hibernate. Entre cette possibilité et celle des @ScriptAssert, l&#8217;utilisateur a désormais deux nouveaux outils pour exprimer des contraintes relativement complexes.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements  de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="LeParisJUGetlAvantJUG"></a>Le ParisJUG et l&#8217;AvantJUG</h4><p>Ce mardi aura lieu la soirée du ParisJUG comme tous les deuxièmes mardis du mois. Au programme de cette soirée, les <a
href="http://parisjug.org/xwiki/bin/view/Meeting/20100706" title="EJB 3 présenté par Adam Bien" >EJB 3 présenté par Adam Bien</a>. Vous voulez avoir une idée du contenu de la soirée ? Alors lisez le billet publié par le <a
href="http://jduchess.org/duchess-france/blog/soiree-adam-bien-au-paris-jug-0607/" title="blog des JDuchess France" >blog des JDuchess France</a> qui résume les concepts que présentera Adam Bien ce soir là.<br
/> Comme depuis quelques mois déjà, le ParisJUG sera précédé de l&#8217;AvantJUG. C&#8217;est un évènement organisé par les JDuchess France pour faire connaissance avant de débuter la soirée du Paris JUG. A l&#8217;origine pour inciter les femmes à venir au Paris JUG, cette rencontre est ouvert à tous ceux qui veulent discuter et partager. Si vous voulez avoir une bonne excuse pour motiver une collègue à venir au ParisJUG ou tout simplement échanger autour d&#8217;un verre, venez donc à l&#8217;AvantJUG ! Toutes les modalités pour l&#8217;inscription se trouvent <a
href="http://jduchess.org/duchess-france/blog/venez-nombreuses-a-lavantjug-de-juillet/" title="ici" >ici</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/07/06/revue-de-presse-xebia-166/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/</link> <comments>http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#comments</comments> <pubDate>Mon, 19 Apr 2010 16:49:05 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[AMQP]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JEE]]></category> <category><![CDATA[jQuery]]></category> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[Oracle]]></category> <category><![CDATA[rabbitmq]]></category> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=4418</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposépar Xebia. Agilité Comment faire des tests d&#8217;IHM sans se tirer une balle dans le pied ? La gestion des risques dans un projet agile SOA RabbitMQ racheté par SpringSource Le coin de la technique Billy Newport et la programmation parallèle Performance jQuery avec $.delegate() Faille de [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposépar Xebia.</em></p><p><strong>Agilité</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#CommentfairedestestsdIHMsansse">Comment faire des tests d&#8217;IHM sans se tirer une balle dans le pied ?</a></li><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#Lagestiondesrisquesdansunproje">La gestion des risques dans un projet agile</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#RabbitMQrachetparSpringSource">RabbitMQ racheté par SpringSource</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#BillyNewportetlaprogrammationp">Billy Newport et la programmation parallèle</a></li><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#PerformancejQueryavecdelegate">Performance jQuery avec $.delegate()</a></li><li><a
href="http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/#FailledescuritdansOracleJava">Faille de sécurité dans Oracle Java</a></li></ul><h3><a
name="Agilit"></a>Agilité</h3><h4><a
name="CommentfairedestestsdIHMsansse"></a>Comment faire des tests d&#8217;IHM sans se tirer une balle dans le pied ?</h4><p>L&#8217;automatisation des tests d&#8217;IHM est souvent une mauvaise idée. Le constat est très souvent le même : bien que simple à mettre en place en général, leur apport est souvent mineur par rapport à leur coût (je vous dirige vers <a
href="http://blog.objectmentor.com/articles/2009/09/29/ruining-your-test-automation-strategy" title="lexcellent article de Robert Martin" >l&#8217;excellent article de Robert Martin</a> pour creuser le sujet). Comment faire si l&#8217;on veut cependant s&#8217;engager dans cette voie?<br
/> Dans <a
href="http://gojko.net/2010/04/13/how-to-implement-ui-testing-without-shooting-yourself-in-the-foot-2/" title="cet article" >cet article</a>, Gojko Adzic (commiter fitnesse et auteur du livre passionnant &laquo;&nbsp;<a
href="http://www.amazon.fr/Bridging-Communication-Gap-Specification-Acceptance/dp/0955683610" title="Bridging the communication gap" >Bridging the communication gap</a>&laquo;&nbsp;), nous livre des pistes pour maximiser le retour sur investissement sur ceux-ci. Tout d&#8217;abord, ne surtout pas partir sur de l&#8217;enregistrement brut des cas de tests les uns après les autres (avec <a
href="http://seleniumhq.org/projects/ide/" title="Selenium IDE" >Selenium IDE</a> par exemple). C&#8217;est dans ce cas-là que l&#8217;on se tire une balle dans le pied. Les coûts de maintenance explosent et l&#8217;intérêt des tests est remis en question au fil du temps.<br
/> La clé est de représenter les tests d&#8217;IHM sur plusieurs niveaux :</p><ul><li>Règles métiers</li><li>Worfklows</li><li>Technique</li></ul><p>Les niveaux supérieurs sont plus stables dans le temps et sont plus compréhensibles que ceux du dessous. Les niveaux supérieurs s&#8217;appuient bien évidemment sur les niveaux du dessous pour fonctionner.<br
/> Le but de cette approche est de faire en sorte que les tests restent compréhensibles (bon courage pour aller comprendre la règle métier cachée derrière une centaine d&#8217;instructions Selenium) et surtout de promouvoir la réutilisabilité afin de garder la main sur la maintenance des tests.</p><h4><a
name="Lagestiondesrisquesdansunproje"></a>La gestion des risques dans un projet agile</h4><p><a
href="http://blog.mountaingoatsoftware.com/managing-risk-on-agile-projects-with-the-risk-burndown-chart" title="Mike Cohn" >Mike Cohn</a>, scrum master certifié et auteur de nombreux ouvrages de référence, nous suggère une manière de mettre en place la gestion des risques sur un projet agile.<br
/> Le management des risques est un sujet central dans de nombreux projets et est souvent considéré comme un enjeu déterminant pour leur réussite.<br
/> Il existe un ensemble de méthodes dédiées, ainsi que des normes et pratiques pour limiter les risques.<br
/> Au premier abord, on peut constater que Scrum n&#8217;implémente pas vraiment une gestion spécifique des risques. Cependant, les différentes pratiques et outils mis en place comme: les itérations courtes, l&#8217;intégration continue, les tests automatisés, etc. permettent de limiter drastiquement l&#8217;apparition des risques.<br
/> Ainsi, la mise en place d&#8217;une gestion des risques sur des projets agiles ayant des facteurs de risque faibles n&#8217;est pas nécessaire. Pour les autres projets, Mike nous propose une solution introduite par John Brothers dans <em>The Agile Times</em> avec le <em>risk burndown chart</em>.</p><p>Pour obtenir ce graphique, il convient au préalable de faire un recensement des risques (durant un sprint planning par exemple). On évalue la probabilité d&#8217;apparition, l&#8217;impact en jours sur la livraison si celui-ci se réalise, et enfin le nombre de jours exposés à ce risque potentiel. Pour calculer ce dernier, Mike multiplie la probabilité du risque par l&#8217;impact en nombre de jours. Ces informations sont renseignées dans un tableau de recensement.<br
/> Pour générer le <em>risk burndown chart</em>, il suffit ensuite de positionner la colonne du nombre de jours exposés en ordonnée et le nombre de jours (ou de sprints) en abscisse. On constate alors que plus on avance dans les sprints, moins le projet est exposé à des risques.</p><p>Sans tomber dans le sur-outillage, la mise en place d&#8217;un <em>risk burndown chart</em> permet d&#8217;introduire de manière légère la gestion des risques. Le tableau de recensement des risques peut suffire.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="RabbitMQrachetparSpringSource"></a>RabbitMQ racheté par SpringSource</h4><p>Deux nouvelles importantes ces derniers jours autour d&#8217;AMQP, une bonne et une mauvaise.</p><p>La bonne nouvelle pour <a
href="http://blog.xebia.fr/2010/02/23/amqp-une-alternative-a-jms/" title="AMQP" >AMQP</a>, c&#8217;est le rachat (<a
href="http://www.springsource.com/newsevents/springsource-acquires-rabbitmq-cloud-messaging" title="ici" >ici</a>, <a
href="http://www.springsource.com/rabbit-technologies-acquisition-faq" title="ici" >ici</a> et <a
href="http://www.rabbitmq.com/news.html" title="là" >là</a>) par VMWare de RabbitMQ, rejoignant ainsi la gamme de produit SpringSource. Ceci donne l&#8217;occasion à Rod Johnson de donner son <a
href="http://blog.springsource.com/2010/04/13/springsource-acquires-rabbitmq/" title="point de vue" >point de vue</a>. Les efforts de RabbitMQ pour s&#8217;intégrer à des solutions cloud semblent avoir été déterminants pour VMWare. L&#8217;aspect standardisation par contre apparait moins dans les différentes annonces et il est sûrement encore trop tôt pour savoir quel sera l&#8217;investissement de SpringSource dans le groupe de travail d&#8217;AMQP. Néanmoins AMQP profitera sûrement de l&#8217;aura de Spring dans la communauté Java et ça ne peut être qu&#8217;une bonne nouvelle pour ce standard. Par contre <a
href="http://www.opencredo.com/technologies/opencredo-amq" title="OpenCredo" >OpenCredo</a>, qui tente de faciliter les solutions AMQP en Java et propose entre autres un template Spring pour RabbitMQ, risque d&#8217;être une victime collatérale de cette nouvelle association.</p><p>Ensuite la mauvaise nouvelle. IMatix, qui a créé OpenAMQ, la première implémentation de ce standard, a l&#8217;intention d&#8217;arrêter son support en <a
href="http://lists.openamq.org/pipermail/openamq-dev/2010-March/001598.html" title="2011" >2011</a>. <a
href="http://www.zeromq.org/" title="0MQ" >0MQ</a>, acheté il y a quelques mois, remplacera ce produit. Par la même occasion, ils cesseront de participer au groupe de travail AMQP. Outre le fait que 0MQ parait avoir des performances très supérieures à OpenAMQ, il semble que l&#8217;inertie autour de la nouvelle version de la norme AMQP/1.0 ait fini par éteindre l&#8217;enthousiasme des dirigeants d&#8217;iMatix. D&#8217;ailleurs, on peut trouver sur leur site un <a
href="http://www.imatix.com/articles:whats-wrong-with-amqp" title="article intressant" >article intéressant</a> sur les arcanes du groupe de travail. Il apparait qu&#8217;à vouloir spécifier trop de choses le standard deviendrait beaucoup trop complexe et que le retard pris sur la livraison de la nouvelle version serait dû à des considérations plus humaines que techniques, laissant entendre que l&#8217;ambiance n&#8217;y est peut-être pas toujours très détendue.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="BillyNewportetlaprogrammationp"></a>Billy Newport et la programmation parallèle</h4><p>Billy Newport, un des acteurs majeurs de la programmation distribuée, a donné <a
href="http://www.infoq.com/interviews/billy-newport-parallel" title="une interview  InfoQ" >une interview à InfoQ</a> dans le cadre de Qcon.<br
/> Il y parle de programmation parallèle en Java, selon lui l&#8217;avenir de notre langage.<br
/> La tendance actuelle dans le hardware est à la multiplication des cœurs, mais au ralentissement de leur fréquence. Et contrairement à ce que semblent penser certaines équipes d&#8217;exploitation (nous avons des noms), la multiplication des cœurs ne permettra pas aux applications Web de traiter plus d&#8217;utilisateurs, plus vite (bien au contraire, puisque unitairement, les cœurs sont moins puissants).</p><p>Le problème que Billy Newport voit dans l&#8217;écosystème actuel est l&#8217;absence complète d&#8217;un framework de haut niveau pour faciliter la programmation parallèle (qui reste une arcane secrète réservée aux grand maîtres). Il existe bien un certain nombre d&#8217;outils pour gérer le <em>comment implémenter</em> des traitements parallèles :</p><ul><li>les grilles de calculs en mémoire, comme eXtrem Scale.</li><li>les traitements massifs de fichiers, comme Hadoop.</li></ul><p>Malheureusement, aucune de ces solutions ne propose d&#8217;API de haut niveau qui permettrait de décrire les traitements à appliquer aux données quelle que soit l&#8217;implémentation &laquo;&nbsp;physique&nbsp;&raquo; mise en place. De plus, il semblerait que bien peu de personnes travaillent dans la recherche sur ce sujet. Billy Newport y voit là une superbe opportunité pour créer la prochaine entreprise <em>à la mode</em> dans l&#8217;open source.<br
/> Proposer une API de haut niveau qui proposerait de décrire les traitements et la façon de les appliquer aux données, en permettant de s&#8217;abstraire de la tuyauterie classique de la programmation parallèle :</p><ul><li>Gérer les structures de données et la concurrence autour de ces données.</li><li>Gérer la distribution optimisée des traitements (afin que le gain de temps réalisé en utilisant un cœur distant ne soit pas perdu en temps d&#8217;IO par exemple).</li></ul><p>Selon lui, les mécanismes existant en Java posant les prémices du calcul massivement parallèle (les Actors en Scala par exemple) sont de trop bas niveau.<br
/> Afin de pouvoir faire de la programmation parallèle sans avoir à connaitre toutes les implémentations sur le bout des doigts, il faudrait que Java adopte une réflexion comme celle que les auteurs de Haskell et Erlang ont mené (et non pas des recherche sur des mécanismes de <em>primitives</em> comme Scala)</p><p>D&#8217;autres problématiques vont apparaitre, notamment à cause des mécanismes d&#8217;auto découverte des nœuds d&#8217;une architecture distribuée (il existe plusieurs parades, comme changer les ports standard ou bien utiliser un mécanisme déclaratif).</p><p>Bref une entrevue passionnante, dont vous trouverez l&#8217;intégralité en video, mais également en transcript, peut être plus accessible pour les anglophobes.</p><h4><a
name="PerformancejQueryavecdelegate"></a>Performance jQuery avec $.delegate()</h4><p>Voilà une petite astuce <a
href="http://jquery.com/" title="jQuery" >jQuery</a> plutôt intéressante pour gagner en performance sur votre site web si vous êtes déjà, tout comme moi <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> , un accro de la fonction <a
href="http://api.jquery.com/live/" title="live" >live</a> <em>(via <a
href="http://www.sitecrafting.com/blog/delegate" title="ce site" >ce site</a>)</em>.</p><p>Pour la gestion des évènements, nous avons la méthode <a
href="http://api.jquery.com/bind/" title="jQuery" >bind</a> qui permet d&#8217;associer à un élément de notre page un évènement de type <code>click</code>, <code>change</code>, <code>focus</code>&#8230; Mais <code>bind</code> ne s&#8217;appliquera que sur les éléments explicitement retournés par le sélecteur. Ainsi, même si nous spécifions un sélecteur du type <code>$('a')</code> <em>(tous les éléments <code>a</code> de la page)</em>, les éventuels éléments <code>a</code> qui seraient créés plus tard dans la page ne seront pas pris en compte.</p><p>Pour cela, jQuery 1.4 introduit la méthode <code>live</code> qui est un <code>bind</code> <em>présent</em> et <em>futur</em>. En effet, il s&#8217;applique sur tous les éléments retournés par le sélecteur mais aussi sur tous les éléments futurs de la page qui matcheront avec ce sélecteur ! Une fonctionnalité très intéressante donc mais aussi très consommatrice si l&#8217;on a un DOM important. En effet, le sélecteur parcourt à chaque fois le document pour matcher les nouveaux éléments et leurs associer l&#8217;évènement.</p><p>Mais c&#8217;est sans compter sur <a
href="http://api.jquery.com/delegate/" title="delegate" >delegate</a> qui est un <code>live</code> <em>voisin</em>. Ainsi, plutôt que de matcher tous les éléments <code>a</code> de ma page, <code>delegate</code> va s&#8217;appliquer sur un élément parent <em>(et donc restreint)</em> et, de cet élément parent, rechercher un certain élément sur lequel binder l&#8217;évènement. Imaginons que notre <code>a</code> soit inclus dans un élément ayant l&#8217;id <code>container</code>, on pourra alors écrire :</p><pre class="brush: java; title: ; notranslate">
$('#container').delegate('a', 'click', function() {...})
</pre><p>Une écriture quelque peu différente donc mais un véritable gain sur un DOM conséquent. A essayer d&#8217;urgence !</p><h4><a
name="FailledescuritdansOracleJava"></a>Faille de sécurité dans Oracle Java</h4><p>Oracle Java a sorti une nouvelle mise à jour du JDK et du JRE 6 suite à une <a
href="http://www.oracle.com/technology/deploy/security/alerts/alert-cve-2010-0886.html" title="alerte" >alerte</a> de sécurité sur le Java Deployment Toolkit utilisé pour Java Web Start. <a
href="http://seclists.org/fulldisclosure/2010/Apr/119" title="Tavis Ormandy" >Tavis Ormandy</a> et <a
href="http://reversemode.com/index.php?option=com_content&#038;task=view&#038;id=67&#038;Itemid=1" title="Ruben Santamarta" >Ruben Santamarta</a> ont découvert simultanément la possibilité d&#8217;exécuter du code arbitraire à travers cette faille et ont alerté la communauté le 9 avril dernier. Ce problème existe depuis la version 1.6.0_10 et est dû à un certain laxisme sur la vérification du paramètre &laquo;&nbsp;codebase&nbsp;&raquo; dans le JNLP qui devient maintenant obligatoire. Bien que ce problème impacte potentiellement les environnements Linux, Windows semble plus vulnérable, donnant par exemple la possibilité de charger une DLL. Par contre il ne concerne pas les Mac. Oracle a commencé par minimiser la gravité du problème avant finalement de sortir cette mise à jour une semaine après sa découverte. Il est donc fortement conseillé de se <a
href="http://www.java.com/en/download/installed.jsp?detect=jre&#038;try=2" title="mettre  jour" >mettre à jour</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/04/19/revue-de-presse-xebia-155/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/</link> <comments>http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#comments</comments> <pubDate>Mon, 04 Jan 2010 19:12:31 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Camel]]></category> <category><![CDATA[Impala]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JEE]]></category> <category><![CDATA[OSGi]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[Spring Integration]]></category> <category><![CDATA[Spring ROO]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3702</guid> <description><![CDATA[La revue de presse de l&#8217;actualité Java/J2EE hebdomadaire proposée par Xebia. SOA Spring Integration et Apache Camel : 2 ESB lightweight en action Le coin de la technique Impala, la modularité pour Spring sans OSGi La définition de DataSources dans JEE 6 Les google-collections sont finales ! Spring Roo en 1.0.0 pour terminer l&#8217;année SOA [...]]]></description> <content:encoded><![CDATA[<p><img
style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /><br
/> <em>La revue de presse de l&#8217;actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#SpringIntegrationetApacheCamel">Spring Integration et Apache Camel : 2 ESB <em>lightweight</em> en action</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#ImpalalamodularitpourSpringsan">Impala, la modularité pour Spring sans OSGi</a></li><li><a
href="http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#LadfinitiondeDataSourcesdansJE">La définition de <em>DataSources</em> dans JEE 6</a></li><li><a
href="http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#Lesgooglecollectionssontfinale">Les google-collections sont finales !</a></li><li><a
href="http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/#SpringRooenpourterminerlanne">Spring Roo en 1.0.0 pour terminer l&#8217;année</a></li></ul><h3><a
name="SOA"></a>SOA</h3><h4><a
name="SpringIntegrationetApacheCamel"></a>Spring Integration et Apache Camel : 2 ESB <em>lightweight</em> en action</h4><p>La mouvance SOA a amené un certain nombre de produits classifiés comme ESB (<em>Enterprise Service Bus</em>) dont le but est de répondre aux problématiques d&#8217;intégration courantes en entreprise. Dans un premier temps, ces produits prenaient la forme de <em>middlewares</em> très lourds dont la mise en œuvre devait être justifiée par des besoins importants. Il y a deux ans, <a
title="nous assistions  lavnement" href="http://blog.xebia.fr/2007/12/17/spring-integration-lavenement-des-lightweight-esb/">nous assistions à l&#8217;avènement</a> d&#8217;ESB qualifiés de <em>lightweight</em> car ils prenaient la forme de <em>frameworks</em> moins gourmands en ressources et plus simples à utiliser. Spring Integration et Apache Camel sont les deux principales options à envisager en matière d&#8217;ESB léger.</p><p>C&#8217;est justement de l&#8217;utilisation de chacun de ces deux <em>frameworks</em> que discute <a
title="larticle que vient de publier Biju Kunjummen" href="http://java.dzone.com/articles/spring-integration-and-apache">l&#8217;article que vient de publier Biju Kunjummen</a>. Il y propose une problématique d&#8217;intégration qui consiste en l&#8217;exposition d&#8217;un service qui, lorsqu&#8217;il est invoqué, entraîne l&#8217;invocation multiple d&#8217;un même service de bas niveau via l&#8217;utilisation d&#8217;un pattern <em>splitter</em> sur la requête et d&#8217;un pattern <em>aggregator</em> sur la réponse. Les deux <em>frameworks</em> offrent nativement ce type d&#8217;EIP (<em>Enterprise Intergration Pattern</em>).</p><p>Aucun favori ne se démarque clairement dans la comparaison entre ces deux implémentations : Spring Integration vient s&#8217;intégrer naturellement à l&#8217;<em>Application Context</em> de Spring en reprenant le même type de structure de définition XML, tandis qu&#8217;Apache Camel, bien qu&#8217;offrant également la possibilité d&#8217;une configuration XML, sera surtout apprécié pour son DSL Java permettant la définition des routes d&#8217;intégration.</p><p>Le lecteur intéressé par ces deux <em>frameworks</em> pourra se tourner, au-delà des documentations respectives, vers les deux livres en préparation chez l&#8217;éditeur Manning, <a
title="Spring Integration in Action" href="http://manning.com/fisher/">Spring Integration in Action</a> et <a
title="Camel in Action" href="http://manning.com/ibsen/">Camel in Action</a>, prévus pour l&#8217;été prochain.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="ImpalalamodularitpourSpringsan"></a>Impala, la modularité pour Spring sans OSGi</h4><p>La modularité est un sujet porteur en ce moment, tant du côté du JDK avec Jigsaw, que du côté Java Entreprise avec OSGi dont le principal acteur actuellement est sans conteste SpringSource avec Spring Dynamic Modules et son serveur d&#8217;application associé Spring dm Server.</p><p>Phil Zoio <a
title="a été interviewé il y a peu" href="http://osgi.dzone.com/articles/impala-alternative-module">a été interviewé il y a peu</a> pour présenter le projet Open Source qu&#8217;il a fondé : <a
title="Impala" href="http://code.google.com/p/impala/">Impala</a>. Il s&#8217;agit d&#8217;une vision différente de la modularité pour applications d&#8217;entreprise. Ainsi, Impala repose sur Spring, tout comme Spring Dynamic Modules, mais contrairement à ce dernier, il n&#8217;utilise pas OSGi et adopte une stratégie radicalement différente : il constitue lui-même des modules encapsulant chacun un <em>application context</em> qui déclare un certain nombre de <em>beans</em>. La solution de modularité ainsi produite offre tout comme OSGi un fonctionnement dynamique permettant le chargement à chaud de nouveaux modules.</p><p>Dans un climat où beaucoup s&#8217;interrogent sur la potentielle lourdeur d&#8217;OSGi, ce type d&#8217;initiative proposant une solution alternative plus simple face au standard prend tout son sens et n&#8217;est pas sans rappeler l&#8217;offensive de <em>Spring Framework</em> lui-même, il y a quelques années, face au contesté standard EJB.</p><h4><a
name="LadfinitiondeDataSourcesdansJE"></a>La définition de <em>DataSources</em> dans Java EE 6</h4><p>Matt Corey <a
title="poste cette semaine un article" href="http://smokeandice.blogspot.com/2009/12/datasourcedefinition-hidden-gem-from.html">poste cette semaine un article</a> mettant en avant une facilité rarement (jamais ?) évoquée de Java EE 6 : la configuration des sources de données par annotation. En effet, si la nouvelle spécification de Sun est largement couverte depuis des mois, y compris sur notre blog, il est en général question des nouveautés qui retiennent le plus l&#8217;attention telles que les <em>beans</em> singletons d&#8217;EJB 3.1, l&#8217;API <em>query builder</em> de JPA 2.0 ou encore ses nouveaux modèles de composants.</p><p>En fait il s&#8217;agit d&#8217;une standardisation de la technique de configuration des sources de données dans les serveurs d&#8217;application Java EE. Cette définition était en effet jusqu&#8217;alors un détail d&#8217;implémentation des serveurs et n&#8217;était donc pas portable. Cette configuration peut donc maintenant se faire par l&#8217;annotation <a
title="DataSourceDefinition" href="http://java.sun.com/javaee/6/docs/api/javax/annotation/sql/DataSourceDefinition.html"><code>@DataSourceDefinition</code></a> ce qui évite ainsi l&#8217;utilisation de XML et va donc dans le sens de la logique initiée depuis Java EE 5. L&#8217;exemple suivant permet de mieux se rendre compte de son utilisation :</p><pre class="brush: java; title: ; notranslate">
@DataSourceDefinition (
className=&quot;org.apache.derby.jdbc.ClientDataSource&quot;,
name=&quot;java:global/jdbc/AppDB&quot;,
serverName=&quot;localhost&quot;,
portNumber=1527,
user=&quot;user&quot;,
password=&quot;password&quot;,
databaseName=&quot;dev-db&quot;
)
public class Config {
...
}
</pre><p>Si tout le monde n&#8217;appréciera pas forcément d&#8217;avoir recours à une annotation pour ce type de configuration, les projets souhaitant distribuer des <code>war</code> ou <code>ear</code> portables qui se connectent à une base de données embarquée ou locale devraient en revanche y trouver leur compte.</p><h4><a
name="Lesgooglecollectionssontfinale"></a>Les google-collections sont finales !</h4><p>Annoncée sur la <a
title="&lt;i&gt;users list&lt;/i&gt;" href="http://groups.google.com/group/google-collections-users/browse_thread/thread/8001013ee996b3c9?pli=1"><em>users list</em></a> du projet, l&#8217;API <a
title="google-collections" href="http://code.google.com/p/google-collections/">google-collections</a> passe en version <a
title="finale 10" href="http://code.google.com/p/google-collections/downloads/list">finale 1.0</a>.<br
/> Pour ceux qui ne connaissent pas encore cette API de collections <em>type-safe</em>, rendez-vous sur <a
title="cette page" href="http://bwinterberg.blogspot.com/2009/09/introduction-to-google-collections.html">cette page</a> pour une introduction à la librairie.</p><p>La finalisation de Google Collections constitue un changement majeur dans l&#8217;environnement des développeurs Java. En effet Apache Commons Collections constituait jusqu&#8217;alors le principal complément à l&#8217;API de base du JDK. Or, la librairie de la fondation Apache est vieillissante et ne propose toujours pas les <em>generics</em> de Java 5. Google Collection se positionne donc ni plus ni moins que comme un remplaçant.</p><p>La <a
title="FAQ" href="http://code.google.com/p/google-collections/wiki/Faq">FAQ</a> répondra à bon nombre de questions que l&#8217;on peut se poser sur cette API notamment sur les raisons qui ont poussé Google à créer sa propre API plutôt que de contribuer à Commons Collections.</p><p>Enfin on notera que Google Collections sera intégré à <a
href="http://code.google.com/p/guava-libraries/">Guava</a> sous peu pour constituer la librairie d&#8217;extension du JDK de Google.</p><p>De par la nature de ces APIs, Google Collections et Guava peuvent également constituer un premier pas vers la programmation <em>un peu</em> plus orientée fonctionnelle. A ce sujet, il est aussi possible de regarder du côté de <a
title="lambdaj" href="http://code.google.com/p/lambdaj/">lambdaj</a>, une API de parcours de collections sans boucle explicite. Et pour ceux qui souhaitent aller encore plus loin, rendez-vous sur <a
title="functionaljava" href="http://functionaljava.org/">functional.java</a> ou  tournez vous vers la préparation des <em>closures</em> dans Java.</p><h4><a
name="SpringRooenpourterminerlanne"></a>Spring Roo en 1.0.0 pour terminer l&#8217;année</h4><p>Encore une <em>release</em> pour Spring pour clôturer en beauté l&#8217;année 2009. Bravo!<br
/> <a
title="Spring Roo" href="http://www.springsource.org/roo">Spring Roo</a>, 8 mois après sa première version alpha, vient de sortir en <a
title="100" href="https://jira.springsource.org/browse/ROO#selectedTab=com.atlassian.jira.plugin.system.project%3Achangelog-panel">1.0.0</a>. Roo, en quelques mots, permet de développer des applications plus rapidement en générant et maintenant, tout au long des développements, une partie importante du code source (du POJO à la JSP).<br
/> Un effort a été mis sur la documentation qui a intégré un tutoriel et les commandes. La seule partie encore en travaux est le chapitre 3, celle qui concerne le fonctionnement interne de ROO. Cette partie permet entre autres d&#8217;avoir les bases pour développer des extensions.<br
/> En standard, Roo propose déjà des extensions, comme par exemple les fonctionnalités de sécurité, basées sur Spring Security et des flows avec Spring Webflow.</p><p>Spring Roo présente un formidable intérêt pédagogique, car il s&#8217;appuie systématiquement sur les toutes dernières versions des jars de Spring et d&#8217;Hibernate.<br
/> On peut par contre trouver peu commode son mécanisme interne qui se base sur la technologie AspectJ. Son principe est de générer les méthodes de classe en se basant sur des fichiers d&#8217;aspects. Jusqu&#8217;à présent, notre expérience avec Spring Roo a montré que cela ne fonctionnait pas de manière complètement transparente pour le développeur, même avec l&#8217;Eclipse de SpringSource (<a
title="STS" href="http://www.springsource.com/products/sts">STS</a>). Cette limitation pourra donc dissuader certaines équipes de partir sur un projet avec ROO tout au long des développements.</p><p>Voici sur Slideshare, les deux présentations mises en ligne par le <em>leader</em> du projet, Ben Alex:</p><ul><li><a
title="Introduction To Spring Roo 100" href="http://www.slideshare.net/benalexau/introduction-to-spring-roo-100-2805183">Introduction To Spring Roo 1.0.0</a></li><li><a
title="Spring Roo 100 Technical Deep Dive" href="http://www.slideshare.net/benalexau/spring-roo-100-technical-deep-dive">Spring Roo 1.0.0 Technical Deep Dive</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2010/01/04/revue-de-presse-xebia-141/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139/</link> <comments>http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139/#comments</comments> <pubDate>Mon, 21 Dec 2009 20:25:00 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Kanban]]></category> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[Mingle]]></category> <category><![CDATA[OpenJDK]]></category> <category><![CDATA[SCRUM]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[Spring 3.0]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3595</guid> <description><![CDATA[La revue de presse de l&#8217;actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Thoughtworks murmure la sortie de Mingle 3.0 Spring 3.0 enfin finalisé ! Agilité Quand le ScrumMaster est un obsctacle Kanban ou Scrum ? Kanban et Scrum ! SOA Gouvernance implicite et explicite dans une SOA Le coin de la technique [...]]]></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/2009/12/21/revue-de-presse-xebia-139#ThoughtworksmurmurelasortiedeM">Thoughtworks murmure la sortie de Mingle 3.0</a></li><li><a
href="http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139#Springenfinfinalis">Spring 3.0 enfin finalisé !</a></li></ul><p><strong>Agilité</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139#QuandleScrumMasterestunobsctac">Quand le ScrumMaster est un obsctacle</a></li><li><a
href="http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139#KanbanouScrumKanbanetScrum">Kanban ou Scrum ? Kanban et Scrum !</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139#Gouvernanceimpliciteetexplicit">Gouvernance implicite et explicite dans une SOA</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139#LesoptimisationssesuccdentsurO">Les optimisations se succèdent sur OpenJDK 7</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="ThoughtworksmurmurelasortiedeM"></a>Thoughtworks murmure la sortie de Mingle 3.0</h4><p><a
href="http://www.thoughtworks-studios.com" title="Thoughtworks Studios" >Thoughtworks Studios</a>, la partie éditeur de logiciels de Thoughtworks, <a
href="http://www.thoughtworks-studios.com/mingle-agile-project-management/mingle-releasing-with-murmurs" title="annonce la sortie" >annonce la sortie</a> d&#8217;une nouvelle version majeure de son outil de gestion de projet agile : <a
href="http://www.thoughtworks-studios.com/mingle-agile-project-management" title="Mingle" >Mingle</a>.</p><p>&laquo;&nbsp;Les nouvelles fonctionnalités de Mingle 3.0 permettent de transformer des échanges non structurés en mine d&#8217;informations à utiliser pour le développement&#8230;&nbsp;&raquo; annonce Chad Wathington (vice président de Thoughtworks Studios) :</p><ul><li>Amélioration de la collaboration à l&#8217;intérieur de l&#8217;équipe : Mingle intègre une nouvelle plate-forme de communication appelée Murmurs.</li></ul><p>Les échanges informels (du type messages instantanés ou emails) autour du développement d&#8217;une fonctionnalité sont associés en temps réel à une card Mingle. Ainsi tous les échanges sont conservés et aucune information n&#8217;est perdue dans les différents canaux de communication. L&#8217;intégration avec <a
href="http://fr.wikipedia.org/wiki/Jabber" title="Jabber Chat" >Jabber Chat</a> est fournie.</p><ul><li>Une fonctionnalité autour de la collaboration fait effet d&#8217;annonce. Thougtworks Studios propose une intégration avec le tout dernier moyen d&#8217;échanger des informations : <a
href="http://blog.xebia.fr/2009/11/20/pourquoi-tant-de-vagues-autour-de-google-wave/" title="Google Wave" >Google Wave</a>. Il sera alors possible de manipuler des cards (créer, changer de statuts&#8230;) directement depuis une Wave et de référencer du contenu de Wave pour le retrouver directement dans Mingle. Attention cependant, cette fonctionnalité sera seulement disponible courant 2010 (les bas de page sont, dans ce cas, à lire attentivement).</li></ul><p>Les autres évolutions apportent de la flexibilité et des outils pour les grosses structures :</p><ul><li>Pour le <em>reporting</em> et l&#8217;extraction de données, cette version fournit au manager une vision agrégée et multi-projets pour faciliter par exemple l&#8217;affectation des ressources ou encore la copie de Cards entre différents projets.</li><li>Dans la même voie, Mingle améliore sa boite à outils de développement de macro afin de proposer la recherche de données multi-projets ainsi qu&#8217;une macro d&#8217;exemple.</li><li>Mingle 3.0 supporte dorénavant le <em>clustering</em> pour les organisations de grosse taille.</li><li>Amélioration de l&#8217;intégration avec des applications extérieures en fournissant des API plus complètes pour manipuler les données de Mingle et une mise à jour du connecteur Subversion pour supporter la version 1.6.5</li></ul><p>Mingle est déjà mature en version 2.3.1, et il se présente comme un des meilleurs outils de gestion de projet agile (gestion façon Kanban des user stories, customisation du <em>workflow</em> de développement, extraction de données simple, <em>reporting</em>&#8230;).<br
/> En tant qu&#8217;utilisateurs de Mingle, l&#8217;agrégation des échanges informels nous semble cependant une avancée intéressante : ils deviennent un canal privilégié d&#8217;échange (surtout dans dans le cadre d&#8217;équipes distribuées) et sont souvent à l&#8217;origine de bonnes idées. En assurer le suivi et l&#8217;indexation au sein de l&#8217;outil principal de gestion du projet apporte indubitablement de la valeur ajoutée.</p><h4><a
name="Springenfinfinalis"></a>Spring 3.0 enfin finalisé !</h4><p>Deux mois après un communiqué de presse <a
href="http://blog.xebia.fr/2009/10/19/revue-de-presse-xebia-130/#SpringOneGXcestpartipourSpring" title="qui avait semé la confusion" >qui avait semé la confusion</a> lors de la conférence SpringOne G2X, <a
href="http://blog.springsource.com/2009/12/16/spring-framework-3-0-goes-ga/" title="SpringSource a finalement livr la version finale du framework Spring 30" >SpringSource a finalement livré la version finale du framework Spring 3.0</a>. Cette version se rapproche des standards Java, ou les standards se rapprochent de Spring <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> comme vous préférez !</p><p>Plus sérieusement, c&#8217;est un pas important pour cette version de Spring qui est maintenant compatible Java EE 6.</p><p>De plus, Spring supporte plusieurs standards :</p><ul><li>JSR-250 @ManagedBean, annotation permettant de scanner les composants annotés et ainsi injecter des ressources, gérer les intercepteurs et callbacks attachés</li><li><a
href="http://jcp.org/en/jsr/detail?id=303" title="JSR303 pour la validation du modle par annotation" >JSR-303 pour la validation du modèle par annotation</a></li><li>JSR-330 <a
href="http://blog.xebia.fr/2009/05/11/inject-standardisation-de-linjection-de-dependances/" title="Inject standardisation de linjection de dpendances par annotation" >@Inject standardisation de l&#8217;injection de dépendances par annotation</a></li></ul><p><a
href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/new-in-3.html" title="Il y a de nombreuses nouveauts" >Il y a de nombreuses nouveautés</a>, en voici un panel :</p><ul><li>Spring Expression Language (SpEL) (inspiré de Seam) est un langage EL (Expression Language) étendu comme on peut le trouver dans nos chères JSP.</li><li>Enrichissement des annotations, ce qui devrait calmer les détracteurs de Spring qui reprochaient la surconfiguration XML</li><li>Support REST (client et serveur) dans Spring MVC</li><li>etc &#8230;</li></ul><p>Voici un exemple intéressant des capacités de SpEL, dans le fichier de configuration XML de Spring :</p><pre class="brush: java; title: ; notranslate">
&lt;bean class=&quot;mycompany.RewardsTestDatabase&quot;&gt;
    &lt;property name=&quot;databaseName&quot; value=&quot;#{systemProperties.databaseName}&quot;/&gt;
    &lt;property name=&quot;keyGenerator&quot; value=&quot;#{strategyBean.databaseKeyGenerator}&quot;/&gt;
&lt;/bean&gt;
</pre><p>ou en java :</p><pre class="brush: java; title: ; notranslate">
@Repository
public class RewardsTestDatabase {
@Value(&quot;#{systemProperties.databaseName}&quot;)
public void setDatabaseName(String dbName) { ... }
@Value(&quot;#{strategyBean.databaseKeyGenerator}&quot;)
public void setKeyGenerator(KeyGenerator kg) { ... }
}
</pre><p>Autre élément important, Spring ne supporte plus Java 1.4. En effet Spring couvre les environnements Java 1.5 et 1.6 et Servlet 2.4 et plus, soit Tomcat 5.x et 6.x, ainsi que WebSphere 6.1 et WebLogic 9.2 (qui sont officiellement toujours basés sur J2EE 1.4).</p><p>Donc en résumé rien de révolutionnaire, mais il y a quand même beaucoup de nouveautés qui méritent un coup d&#8217;oeil. <a
href="http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/" title="Nhsitez pas  lire la documentation officielle de Spring pour toutes les dcouvrir " >N&#8217;hésitez pas à lire la documentation officielle de Spring pour toutes les découvrir </a>.</p><h3><a
name="Agilit"></a>Agilité</h3><h4><a
name="QuandleScrumMasterestunobsctac"></a>Quand le ScrumMaster est un obsctacle</h4><p>Cette semaine, Vikas Hazrati, un de nos collègues indiens, nous gratifie (sur InfoQ) <a
href="http://www.infoq.com/news/2009/12/scrummaster-the-impediment" title="dun article dlicieusement subversif" >d&#8217;un article délicieusement subversif</a> : et si le Scrum Master était un <em>obstacle</em> &#8211; un <em>impediment</em> pour utiliser un anglicisme barbare &#8211; majeur.<br
/> Reprenant plusieurs fils de discussions, InfoQ distingue trois types de ScrumMaster <em>problématiques</em> :</p><ul><li>Le ScrumMaster développeur : il agit comme un membre de l&#8217;équipe de développement, s&#8217;implique fortement dans la réalisation du backlog. L&#8217;équipe devient alors spectatrice de l&#8217;avancée du projet.</li><li>Le ScrumMaster chef de projet : il dirige les travaux de l&#8217;équipe, qui devient totalement dépendante de ses consignes.</li><li>Le ScrumMaster tampon : il gère toutes les communications entre les développeurs et les products owners et / ou clients. Il devient rapidement un goulot d&#8217;étranglement. C&#8217;est un cas fréquent dans les projets Scrum distribués.</li></ul><p>D&#8217;autres mauvaises habitudes se dégagent de ces discussions :</p><ul><li>le manque d&#8217;anticipation : le ScrumMaster tient le journal des difficultés rencontrées, et même si il les lève, il ne fait rien pour les anticiper.</li><li>l&#8217;expertise à tout prix : le ScrumMaster s&#8217;implique dans toutes les tâches délicates et l&#8217;équipe devient dépendante de son aide. Rapidement, il est contraint par un manque de temps et devient un obstacle à la réalisation du sprint.</li><li>toucher à tout, et oublier son rôle : le ScrumMaster est majoritairement là pour aider l&#8217;équipe à avancer dans la réalisation des sprints. Toute tâche annexe à celle ci est consommatrice de temps et empêche l&#8217;accomplissement de sa mission principale.</li></ul><p>Malgré toutes ces analyses pertinentes, si nous ne devions en conserver qu&#8217;une, ce serait celle de <a
href="http://agileanarchy.wordpress.com/" title="Tobias Mayer" >Tobias Mayer</a> : donner à quelqu&#8217;un le titre de ScrumMaster ne suffit pas à ce qu&#8217;il en devienne un.</p><h4><a
name="KanbanouScrumKanbanetScrum"></a>Kanban ou Scrum ? Kanban et Scrum !</h4><p><a
href="http://www.infoq.com/" title="InfoQ" >InfoQ</a> nous propose en téléchargement gratuit le livre <a
href="http://www.infoq.com/minibooks/kanban-scrum-minibook" title="Kanban et Scrum  making the most of both" >Kanban et Scrum &#8211; making the most of both</a> par Henrik Kinberg et Mattias Skarin.<br
/> L&#8217;objectif du livre est que vous puissiez comprendre <em>(si ce n&#8217;est pas déjà fait)</em> comment Kanban et Scrum pourraient être utiles dans votre environnement.<br
/> La première partie se consacre à une brève description de Kanban et Scrum <em>(rôles, itérations&#8230;)</em>. Ils sont ensuite comparer directement mais aussi comparer à d&#8217;autres méthodes agiles. La deuxième partie est une étude de cas avec des questions, des réponses et beaucoup d&#8217;exemples : pourquoi changer ? Par où commencer ? Démarrage des équipes ? Comment estimer ? etc&#8230;<br
/> Pour la version papier, cela se passe par <a
href="http://www.lulu.com/content/7731694" title="ici" >ici</a>.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="Gouvernanceimpliciteetexplicit"></a>Gouvernance implicite et explicite dans une SOA</h4><p>Andrej Koelewijn <a
href="http://www.andrejkoelewijn.com/wp/2009/12/15/soa-governance-implicit-or-explicit/" title="ouvre cette semaine une discussion" >ouvre cette semaine une discussion</a> intéressante sur la gouvernance dans une SOA. Il commence par expliquer le rôle incontournable qu&#8217;à la gouvernance dans le cadre de l&#8217;évolution correcte des services. Puis il explique qu&#8217;il y a, selon lui, deux manières d&#8217;aborder cette gouvernance, toutes deux étant idéalement appliquées conjointement :</p><ul><li>La gouvernance explicite est celle dont il est en général question, il s&#8217;agit d&#8217;une personne ou d&#8217;un groupe de personnes en charge de s&#8217;assurer de la cohérence des services exposés dans la SOA au fil du temps. Ils ont alors le pouvoir de contraindre les équipes projets à se conformer aux règles définies en cas d&#8217;écart.</li><li>La gouvernance implicite ne passe pas par le contrôle effectué par une équipe ou une personne tierce mais par des choix architecturaux contraignant ou tendant à diriger naturellement vers les choix idéaux.</li></ul><p>A titre d&#8217;exemple il cite ainsi l&#8217;affectation d&#8217;une base de données propre à chaque service de bas niveau, afin d&#8217;assurer un partitionnement fonctionnel strict ; des services de plus haut niveau peuvent alors couvrir plusieurs domaines fonctionnels en procédant par agrégation. Toujours dans le but d&#8217;assurer ce découpage propre, il suggère la mise en place d&#8217;équipes en charge de fonctionnalités, qui seront amenées à développer des services de haut niveau, collaborant avec des équipes en charge de services de bas niveau, qui, elles, font évoluer les services dont elles ont la charge aux fur et à mesure que les besoins sont exprimés.</p><p>Ces suggestions, imprégnées par l&#8217;expérience pratique, sont dans l&#8217;alignement des présentations actuelles sur SOA telles que <a
href="http://blog.xebia.fr/2009/11/23/devoxx-jour-2-soa-en-pratique/" title="celle de Nicolai Josuttis  Devoxx 09" >celle de Nicolai Josuttis à Devoxx 09</a>, dans lesquelles SOA y apparaît comme ayant dépassé le <em>hype</em> pour atteindre la maturité.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="LesoptimisationssesuccdentsurO"></a>Les optimisations se succèdent sur OpenJDK 7</h4><p>Rémi Forax <a
href="http://weblogs.java.net/blog/forax/archive/2009/12/18/tailcall-anyone" title="discute sur son blog" >discute sur son blog</a> de l&#8217;arrivée d&#8217;une nouvelle optimisation majeure au sein d&#8217;OpenJDK 7 : l&#8217;optimisation des <a
href="http://en.wikipedia.org/wiki/Tail_call" title="<em>tail calls</em>&nbsp;&raquo; ><em>tail calls</em></a>. Cette apparition fait suite à <a
href="http://blog.xebia.fr/2009/10/12/revue-de-presse-xebia-129/#LesoptimisationsduJDKuactivesp" title="lajout rcent" >l&#8217;ajout récent</a> de l&#8217;<em>escape analysis</em> et de la compression de pointeurs.</p><p>Un <em>tail call</em> est une invocation positionnée en fin de <em>bytecode</em> d&#8217;une méthode, juste avant un <code>return</code>. En pratique, pour le développeur Java, il s&#8217;agit d&#8217;une ligne du type <code>return m(data)</code>, où la valeur retournée est fonction d&#8217;une méthode tierce.</p><p>Lors de l&#8217;invocation d&#8217;une méthode, outre le saut de code nécessaire, la JVM doit également recréer un <em>stackframe</em> pour la nouvelle méthode en y copiant ses arguments. L&#8217;optimisation des <em>tail calls</em> consiste alors à supprimer cette opération sur la <em>stack</em> en réduisant l&#8217;invocation à un simple saut dans le code. Dans la mesure où cette simplification nécessite tout de même certaines précautions, une instruction de <em>bytecode</em> doit marquer l&#8217;invocation optimisée en tant que <em>tail call</em> auprès de la JVM.</p><p>Dans certaines applications présentant un grand nombre d&#8217;invocations de ce type, un gain de performance pourra apparaître lorsque cette optimisation sera activée. Celle-ci s&#8217;inscrit ainsi dans la continuité d&#8217;une <a
href="http://www.devoxx.com/display/DV09/Towards+A+Universal+VM">présentation que Brian Goetz avait donnée</a> lors de Devoxx 09 où il expliquait qu&#8217;un très grand nombre d&#8217;optimisations élaborées étaient effectuées par la JVM afin de réduire, ou de supprimer, le surcoût lié aux constructions courantes des langages objets.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/12/21/revue-de-presse-xebia-139/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Devoxx &#8211; Jour 2 &#8211; SOA en pratique</title><link>http://blog.xebia.fr/2009/11/23/devoxx-jour-2-soa-en-pratique/</link> <comments>http://blog.xebia.fr/2009/11/23/devoxx-jour-2-soa-en-pratique/#comments</comments> <pubDate>Mon, 23 Nov 2009 14:09:15 +0000</pubDate> <dc:creator>Michaël Figuière</dc:creator> <category><![CDATA[SOA]]></category> <category><![CDATA[Devoxx]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3267</guid> <description><![CDATA[Les sessions dédiées à SOA étaient présentes cette année encore à Devoxx. Nicolai Josuttis a animé une présentation intitulée &#171;&#160;SOA in practice&#160;&#187; à l&#8217;image du titre du livre dont il est l&#8217;auteur, publié chez O&#8217;Reilly. Passage obligé de toute présentation sur SOA, Nicolai Josuttis commence par introduire l&#8217;ensemble des concepts gravitant autour de l&#8217;architecture orientée [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2009/11/DSC_1491.jpg" style="margin: 1em 1em 1em 1em; float: right;" alt="Nicolai Josuttis" title="Nicolai Josuttis" /><br
/> Les sessions dédiées à SOA étaient présentes cette année encore à Devoxx. Nicolai Josuttis a animé une présentation intitulée &laquo;&nbsp;SOA in practice&nbsp;&raquo; à l&#8217;image du titre du livre dont il est l&#8217;auteur, <a
href="http://oreilly.com/catalog/9780596529550" title="publi chez OReilly" >publié chez O&#8217;Reilly</a>.</p><p>Passage obligé de toute présentation sur SOA, Nicolai Josuttis commence par introduire l&#8217;ensemble des concepts gravitant autour de l&#8217;architecture orientée services. Nous passerons sur ces rappels ici, car malgré quelques divergences dans les définitions, on retrouve les idées décrites dans <a
href="http://blog.xebia.fr/category/soa/" title="les diffrents articles portant sur SOA" >les différents articles portant sur SOA</a> que nous avons pu publier jusqu&#8217;alors.</p><p>Après cette introduction, Nicolai Josuttis s&#8217;est arrêté sur <a
href="http://blog.xebia.fr/2009/01/12/revue-de-presse-xebia-91/#Criselesanalystestuentletempsd" title="les dbats ayant agit le petit monde des SOAistes en ce dbut danne" >les débats ayant agité le petit monde des SOAistes en ce début d&#8217;année</a> : ce modèle d&#8217;architecture est-il mort ? N&#8217;était-ce qu&#8217;une mode de passage ? Non, le concept de service garde toute sa valeur pour l&#8217;entreprise et la suite de sa présentation, sans rien cacher des défauts de SOA, montrera tout son intérêt.</p><p>La suite de la présentation s&#8217;oriente rapidement autour de la mise en pratique de ces concepts.</p><p>&nbsp;<br
/> <br
/>&nbsp;</p><h3><a
name="SOAenpratiquedanslentreprise"></a>SOA en pratique dans l&#8217;entreprise</h3><h4><a
name="Entrefrontendsetbackends"></a>Entre <em>frontends</em> et <em>backends</em></h4><p>Une architecture orientée services repose en général sur un ensemble de <em>frontends</em> et une série de <em>backends</em> idéalement organisés en respectant les frontières des départements ou des <em>business units</em> de l&#8217;entreprise. La figure suivante représente ce type de système :</p><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2009/11/soa-in-practice.png" border="0" alt="" /></div><p>Le <em>frontend</em> peut prendre plusieurs formes. Il peut s&#8217;agir d&#8217;une simple interface de visualisation qui se contente alors de présenter les données formées par les services d&#8217;agrégation sous-jacents. A l&#8217;inverse, il peut permettre la modification des données, ce qui en fait une application plus intelligente. Il est alors également nécessaire de faire un choix quant à la validation des données entrantes : celle-ci peut se faire dans le <em>frontend</em>, dans le <em>frontend</em> et le <em>backend</em>, ou via un service dédié. Cette dernière solution simplifie l&#8217;architecture en assurant la cohérence de la validation mais entraîne une grande quantité d&#8217;invocations de services.</p><h4><a
name="Versionning"></a><em>Versionning</em></h4><p>Les services exposés dans une SOA subissent en général des modifications au cours de leur vie car ils mettent en œuvre des besoins en perpétuelle évolution. Les consommateurs ne pouvant alors être tous mis à jour lorsque le service évolue, <a
href="http://blog.xebia.fr/2008/05/21/les-10-pieges-de-la-soa-09-le-versioning/" title="plusieurs versions vont coexister" >plusieurs versions vont coexister</a>.</p><p>Nicolai Josuttis préconise alors de limiter à 3 le nombre de versions d&#8217;un même service en production. Pour cela :</p><ul><li>Il est nécessaire que les consommateurs d&#8217;une version obsolète d&#8217;un service fassent évoluer leur application afin d&#8217;exploiter la version la plus récente.</li><li>Le point précédent implique qu&#8217;une collaboration est nécessaire entre producteur et consommateur.</li><li>Il implique également qu&#8217;il est vital d&#8217;être en mesure d&#8217;énumérer l&#8217;ensemble des consommateurs d&#8217;un service.</li></ul><p>Interrogé sur le positionnement de nouveaux <em>framework</em> tels que <a
href="http://incubator.apache.org/thrift/" title="Apache Thrift" >Apache Thrift</a> gérant nativement la problématique de <em>versionning</em>, Nicolai Josuttis explique qu&#8217;il s&#8217;agit là d&#8217;un détail d&#8217;implémentation qui ne doit pas être une justification pour contourner le nombre maximum de versions simultanément en production.</p><h4><a
name="Rutilisabilit"></a>Ré-utilisabilité</h4><p>La <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="rutilisabilit" >ré-utilisabilité</a> est une des propriétés fondamentales des services dans une SOA.</p><p>Pourtant, Nicolai Josuttis a pu observer qu&#8217;en pratique cette propriété est rarement possible. En effet, il explique que ses observations ont montré que la majorité des services d&#8217;un système d&#8217;information ont au plus deux consommateurs. Certains ne sont même pas consommés.</p><p>Dans la mesure où la ré-utilisabilité va souvent à l&#8217;encontre des performances puisqu&#8217;il est alors souvent nécessaire d&#8217;invoquer plusieurs services, il est conseillé de se fixer des objectifs raisonnables quant à cette propriété.</p><h4><a
name="Annuaires"></a>Annuaires</h4><p>Les <a
href="http://blog.xebia.fr/2009/10/30/le-referentiel-de-services-dans-une-architecture-soa/" title="annuaires de services" >annuaires de services</a> permettent de recenser l&#8217;ensemble des services disponibles dans une SOA.</p><p>Nicolai Josuttis préconise de ne pas mettre en œuvre d&#8217;annuaire dès la création de l&#8217;architecture orientée services, mais d&#8217;attendre que le besoin s&#8217;en fasse naturellement ressentir.</p><h4><a
name="Gouvernance"></a>Gouvernance</h4><p>La SOA faisant interagir l&#8217;ensemble des départements de l&#8217;entreprise, des aspects humains et des problématiques de gouvernance surviennent inévitablement.</p><p>Il est suggéré de recourir à une équipe SOA dédiée, assurant le respect d&#8217;une stratégie d&#8217;architecture globale.</p><p>Lors de l&#8217;émergence de SOA dans l&#8217;entreprise, il est indispensable de procéder progressivement, en lançant des projets pilotes permettant de détecter les problématiques et d&#8217;adapter les équipes à cette nouvelle architecture. Ainsi le processus de transition peut prendre 5 ans.</p><h3><a
name="SOAlheuredubilan"></a>SOA à l&#8217;heure du bilan</h3><p>Après avoir énuméré l&#8217;ensemble de ces problématiques propres à SOA, Nicolai Josuttis pose une question simple : compte-tenu de tous ces défauts, pourquoi passer à SOA ? Il répond simplement en montrant que dans de nombreuses situations, ce modèle d&#8217;architecture n&#8217;est pas contournable pour satisfaire les besoins de communications entre les composantes de l&#8217;entreprise.</p><p>Enfin, il reconnait et dénonce le <em>hype</em> qui a entouré SOA, mais n&#8217;en minimise pas l&#8217;intérêt pour autant.</p><h3><a
name="Conclusion"></a>Conclusion</h3><p>L&#8217;architecture orientée services aurait-elle atteint la maturité ? C&#8217;est en tout cas l&#8217;impression qui transparaît face à la multiplication de présentations telles que celle de Nicolai Jusuttis, imprégnées de pragmatisme et de réalisme, tout en montrant son rôle incontournable dans le remplacement des systèmes monolithiques ou organisés en silos isolés.</p><p>L&#8217;apparition d&#8217;outils et de <em>frameworks</em> légers tranchant avec les solutions très lourdes que SOA a connu dans ses débuts, ainsi que la percée des méthodes agiles pour leur mise en œuvre, s&#8217;ajoutent à ces nouveaux discours pour constituer le renouveau des architectures orientées services.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/11/23/devoxx-jour-2-soa-en-pratique/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/</link> <comments>http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/#comments</comments> <pubDate>Mon, 16 Nov 2009 17:47:49 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Android]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[Google App Engine]]></category> <category><![CDATA[Google Wave]]></category> <category><![CDATA[GWT]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[jdk-7]]></category> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3140</guid> <description><![CDATA[La revue de presse de l&#8217;actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Innovation permanente chez Google Java SE 5 en fin de vie, JDK 7 en approche SOA 10 mythes au sujet des SOA Evènements de notre communauté en France et à l&#8217;étranger Soirée Google au LyonJUG Actualité éditeurs / SSII Innovation [...]]]></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/2009/11/16/revue-de-presse-xebia-134/#InnovationpermanentechezGoogle">Innovation permanente chez Google</a></li><li><a
href="http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/#JavaSEenfindevieJDKenapproche">Java SE 5 en fin de vie, JDK 7 en approche</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/#mythesausujetdesSOA">10 mythes au sujet des SOA</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/#SoireGoogleauLyonJUG">Soirée Google au LyonJUG</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="InnovationpermanentechezGoogle"></a>Innovation permanente chez Google</h4><p>Google est encore une fois au cœur de l&#8217;actualité cette semaine avec la mise à disposition d&#8217;un nouveau langage de programmation et d&#8217;un protocole destiné à remplacer HTTP.</p><p><a
href="http://golang.org/" title="Le langage Go" >Le langage Go</a> est à la croisée de C, Java et Pascal et est annoncé comme ayant des performances proches du C. Go se distingue par le fait que son compilateur produise directement du code natif, et qu&#8217;il ne requiert donc pas de machine virtuelle. Il apporte toutefois un ramasse-miette et un ensemble d&#8217;abstractions permettant de simplifier la programmation parallèle.</p><p>Très rapidement, plusieurs opinions et résultats d&#8217;expérimentations sont apparus. Ainsi, <a
href="http://timyang.net/programming/c-erlang-java-performance/" title="Tim Yang montre les performances" >Tim Yang montre les performances</a> obtenues par une application serveur développée en Java (en utilisant Mina), C (avec Nginx) et Go. Les résultats qu&#8217;il obtient montre que Go est en retrait par rapport aux deux autres solutions. Ces résultats doivent toutefois être relativisés par la maturité acquise par le système d&#8217;entrée / sortie de la JVM, le design très performant offert par Mina, la réputation de performance de Nginx et enfin, bien sûr, par le stade embryonnaire de Go.</p><p>Google a également diffusé les spécifications de <a
href="http://dev.chromium.org/spdy/spdy-protocol" title="SPDY" >SPDY</a> (prononcer Speedy), un protocole visant à remplacer HTTP. On le sait, HTTP n&#8217;est pas adapté au Web moderne. En particulier il n&#8217;est pas optimisé pour obtenir une latence minimale. SPDY ne redéfinit pas tout, il se base sur HTTP et y ajoute un ensemble de possibilités supplémentaires telles que la compression d&#8217;en-têtes, le multiplexage de flux ou encore la priorisation de requêtes.</p><p>Des tests sur le transport du contenu des sites Web les plus populaires, permettent à Google d&#8217;annoncer un gain moyen de 55%.</p><p>L&#8217;entreprise américaine continue donc d&#8217;impressionner par son innovation permanente, n&#8217;hésitant pas à remettre en cause régulièrement des technologies considérées comme incontournables.</p><h4><a
name="JavaSEenfindevieJDKenapproche"></a>Java SE 5 en fin de vie, JDK 7 en approche</h4><p>Sur la <a
href="http://java.sun.com/javase/downloads/index_jdk5.jsp" title="page ddie  J2SE 50" >page dédiée à J2SE 5.0</a>, Sun notifie depuis début novembre les utilisateurs de l&#8217;arrivée en fin de vie <em>(End of Service Life)</em> de cette version de Java.</p><p>Arrivé <a
href="http://java.sun.com/j2se/codenames.html" title="il y a 5 ans" >il y a 5 ans</a>, Java 5 avait constitué la mise à jour la plus importante de la plate-forme et de son langage depuis sa création. Son adoption en entreprise fut longue, mais s&#8217;est concrétisée au fil du temps. Ainsi aujourd&#8217;hui, on ne compte plus qu&#8217;une minorité de projets fonctionnant encore exclusivement avec la version 1.4 ou inférieure de Java.</p><p>Il en est tout autrement pour Java 6.0. En effet, contrairement à la version 5.0 dont l&#8217;adoption était indispensable pour profiter des technologies d&#8217;entreprise les plus récentes, les principales motivations pour passer à la version 6.0 concernent la JVM elle-même et les améliorations qu&#8217;elle a connue.</p><p>L&#8217;arrivée en EOSL pourrait accélérer les choses dans certaines entreprises, tandis que d&#8217;autres préfèreront se tourner vers l&#8217;offre <a
href="http://www.sun.com/software/javaforbusiness/" title="Java for Business" >Java for Business</a> de Sun qui permet de continuer de bénéficier du support de l&#8217;éditeur.</p><p>Une autre possibilité pourrait se trouver dans l&#8217;arrivée de JDK 7. En effet, la <a
href="http://openjdk.java.net/projects/jdk7/milestones/" title="roadmap" >roadmap</a> du projet promet un début de phase <em>Release Candidate</em> débutant à la fin du premier trimestre 2010 pour une durée d&#8217;un à deux mois, ce qui permettrait donc l&#8217;arrivée d&#8217;une version finale dans 6 mois. Si la confiance dans les dates de finalisation annoncées de JDK 7 s&#8217;est évaporée au fil des reports successifs, la situation semble maintenant se stabiliser : <a
href="http://blogs.sun.com/mr/entry/jdk7_m5" title="Mark Reinhold vient dannoncer" >Mark Reinhold vient d&#8217;annoncer</a> la disponibilité de la M5 de JDK 7, en accord avec le calendrier prévisionnel de la <em>roadmap</em>. Quatre des fameuses évolutions du langage apportées par le projet Coin y sont implémentées et peuvent donc être d&#8217;ores et déjà testées.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="mythesausujetdesSOA"></a>10 mythes au sujet des SOA</h4><p><a
href="http://www.ebizq.net/webinars/11585.html" title="Yefim Natis de Gartner a expos durant lvnement SOA in Action dix mythes communs" >Yefim Natis, de Gartner, a exposé durant l&#8217;évènement <em>SOA in Action</em>, dix mythes communs</a> <em>(et la réponse qu&#8217;il faut leur apporter)</em> sur la mise en place d&#8217;une SOA.<br
/> Là où l&#8217;article porte à sourire, c&#8217;est que, pour une fois, la faute est partagée : cinq de ces mythes sont propagés par les fanatiques de la SOA, et sont mis en regard de cinq autres portés par les allergiques.</p><p>Pour les fanatiques, nous avons :</p><ul><li>Les services sont portés par l&#8217;IT et propagés vers les acteurs fonctionnels.<br
/> Pour Yefim Natis, une SOA est un moyen pour l&#8217;IT de mieux comprendre et appréhender les problématiques métier.</li><li>Les plate formes orientées services reposent sur des briques pré-fabriquées.<br
/> Les SOA ne reposent pas uniquement sur des applications &#8216;services&#8217;, mais aussi sur des batchs et des applications héritées.</li><li>Partager et réutiliser sont les principaux apports d&#8217;une SOA.<br
/> C&#8217;est en effet un des bénéfices attendus, mais c&#8217;est loin d&#8217;être le seul. On peut citer : meilleure exploitation, meilleure montée en charge &#8230;</li><li>Mettre en place une SOA permet de s&#8217;abstenir de réaliser une phase d&#8217;intégration.<br
/> Même si la SOA permet d&#8217;introduire une stabilité dans les interactions entre services, elle ne dispense pas de réaliser de vrais tests d&#8217;intégration, bien au contraire.</li><li>Une SOA réduit les coûts du SI.<br
/> Sur le long terme, peut être &#8230; Mais dans un premier temps, une SOA peut s&#8217;avérer couteuse : nouvelle façon de penser, nouveaux outils, formations à prévoir&#8230;</li></ul><p>Pour les allergiques, la liste est la suivante :</p><ul><li>Une SOA introduit une grande complexité et de nouveaux problèmes.<br
/> La plupart des problèmes liés à la mise en place d&#8217;une SOA sont des problèmes existants partout ailleurs dans le monde de l&#8217;informatique distribuée. La mise en œuvre d&#8217;une SOA ne fait souvent que mettre en exergue des problèmes existants.</li><li>SOA n&#8217;est pas nouveau, c&#8217;est juste un effet de mode.<br
/> Il faut voir au delà de l&#8217;aspect technique : certes SOA repose sur les principes de l&#8217;informatique distribué, mais c&#8217;est l&#8217;ensemble de la démarche qui est nouvelle et qui a au moins l&#8217;avantage de crystaliser certaines bonnes pratiques.</li><li>Une SOA est vouée à l&#8217;échec, parce que les Web Services sont un standard trop instable.<br
/> SOA et SOAP sont deux choses complètement différentes. Les Web Services sont &#8216;juste&#8217; un moyen d&#8217;exposer des services.</li><li>Il est difficile de vendre une SOA, car les acteurs fonctionnels n&#8217;en voient pas les bénéfices.<br
/> Certains bénéfices sont apparents de manières quasi instantanée <em>(on pense aux indicateurs BAM)</em>, et les acteurs fonctionnels gagnent rapidement une nouvelle compréhension de leur environnement IT.</li><li>SOA est déjà dépassé, il faut passer à la suite.<br
/> Le challenge d&#8217;une SOA basique est en effet dépassé. Mais il reste de nombreux enjeux à adresser, notamment dans les architectures les plus complexes.</li></ul><p><a
href="http://www.infoq.com/news/2009/11/SOA10" title="via InfoQ" >via InfoQ</a></p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="SoireGoogleauLyonJUG"></a>Soirée Google au LyonJUG</h4><p>Lundi 23 Novembre, le <a
href="http://www.lyonjug.org/bin/view/Main/" title="LyonJUG" >LyonJUG</a> organise une soirée dédiée aux technologies Google. L&#8217;occasion de découvrir, démonstration à l&#8217;appui, Google Web Toolkit, Google App Engine, Android et le dernier né Google Wave. L&#8217;objectif est aussi de présenter l&#8217;architecture globale de ces produits pour mieux en saisir le fonctionnement et le but.<br
/> Pour faciliter l&#8217;organisation de la soirée dans les locaux d&#8217;EPITECH, vous devez vous inscrire <a
href="http://www.jugevents.org/jugevents/event/show.html?id=21154" title="ici" >ici</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/11/16/revue-de-presse-xebia-134/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Le référentiel de services dans une architecture SOA</title><link>http://blog.xebia.fr/2009/10/30/le-referentiel-de-services-dans-une-architecture-soa/</link> <comments>http://blog.xebia.fr/2009/10/30/le-referentiel-de-services-dans-une-architecture-soa/#comments</comments> <pubDate>Fri, 30 Oct 2009 14:17:52 +0000</pubDate> <dc:creator>Christophe Heubès</dc:creator> <category><![CDATA[SOA]]></category> <category><![CDATA[Web Service]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3052</guid> <description><![CDATA[Dans une architecture orientée service, le référentiel ou catalogue de services appartient à une famille de composants destinés à ce que l&#8217;on appelle généralement la gouvernance. La gouvernance est une notion évanescente, dont la définition fait l&#8217;objet d&#8217;âpres débats, mais qui, quelle que soit celle que l&#8217;on retient, renvoie au besoin de se doter d&#8217;outils [...]]]></description> <content:encoded><![CDATA[<p>Dans une architecture orientée service, le <strong>référentiel ou catalogue de services</strong> appartient à une famille de composants destinés à ce que l&#8217;on appelle généralement la <strong>gouvernance</strong>. La gouvernance est une notion évanescente, dont la définition fait l&#8217;objet d&#8217;âpres débats, mais qui, quelle que soit celle que l&#8217;on retient, renvoie au besoin de se doter d&#8217;outils et de procédures susceptibles d&#8217;<strong>assurer le contrôle de la complexité de l&#8217;architecture</strong> et d&#8217;en mesurer la consistance.</p><p>Le référentiel de service est un incontournable pour maîtriser les services.</p><p>Traditionnellement, et de façon macroscopique, un référentiel de services dans une architecture distribuée comprend deux grandes catégories de fonctionnalités :</p><ul><li>Les fonctions de <strong>registre</strong> qui visent à faciliter le fonctionnement de l&#8217;infrastructure de services :</li><ul><li>Contrôle d&#8217;accès.</li><li>Correspondance entre les différents noms que peut porter chaque service dans les différents sous-systèmes.</li><li>Localisation et routage.</li><li>Transcodification et uniformisation des codes <em>(y compris les codes erreurs)</em>.</li><li>&#8230;</li></ul><li>Les fonctions d&#8217;<strong>annuaire</strong> qui visent à consolider la connaissance métier :</li><ul><li>Etre la référence unique portant la connaissance des services de l&#8217;entreprise.</li><li>Porter la connaissance des formats d&#8217;échanges.</li><li>Distinguer les services qui nécessitent une réponse de ceux qui n&#8217;en attendent pas.</li><li>Identifier l&#8217;appartenance fonctionnelle de chaque flux.</li><li>Gérer les versions.</li><li>&#8230;</li></ul></ul><p>Les fonctions de registre sont destinées à l&#8217;exécution des services. Elles permettent aux consommateurs de services de localiser les fournisseurs <em>(dans la version adéquate)</em>, d&#8217;identifier les modalités techniques de l&#8217;interaction, de valider les formats d&#8217;échange et de vérifier les politiques d&#8217;accès. Elles adressent aussi la dimension routage à savoir qu&#8217;à partir des informations de contexte, elles offrent la possibilité de déterminer le service cible, le mode d&#8217;accès <em>(M.O.M., Web Services, &#8230;)</em>, les ressources associées <em>(nom de la file MQ, URL d&#8217;accès, etc.)</em>.<br
/> Ces fonctions de registre s&#8217;appuient le plus souvent sur le standard UDDI v3, et un ensemble de standards complémentaires pour les différentes métadonnées et stratégies <em>(WSDL 1.1, SOAP w/wo Attachement 1.1, OASIS Web Service Security, XACML 1.0, SAML 2.0)</em>.</p><p>Les fonctions d&#8217;annuaire, quant à elles, offrent une large palette de fonctionnalités destinées aux personnels impliqués dans la mise en œuvre de la SOA : modélisation et structuration du référentiel, accès à la documentation des services, recherche, gestion du cycle de vie <em>(éventuellement avec des processus d&#8217;approbation)</em>, analyse d&#8217;impact, reporting, etc. Ces fonctionnalités sont proposées au travers d&#8217;interfaces graphiques plus ou moins sophistiquées et ergonomiques.<br
/> Ces fonctions ne font pas l&#8217;objet de standards, et sont en conséquence un facteur de différenciation fort entre les offres logicielles.</p><p>Le référentiel assure donc la <strong>cohérence entre les différentes nomenclatures</strong> des applications.<br
/> Dans son acception classique, le référentiel doit être et rester l&#8217;<strong>unique point de référencement</strong> des services. Il constitue un composant central de l&#8217;architecture, et nécessite à ce titre des procédures de gestion et d&#8217;administration adaptées.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/10/30/le-referentiel-de-services-dans-une-architecture-soa/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/</link> <comments>http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#comments</comments> <pubDate>Mon, 26 Oct 2009 18:32:17 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Exploitation]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Artifactory]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[Grails]]></category> <category><![CDATA[Groovy]]></category> <category><![CDATA[Play!]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[VisualVM]]></category> <category><![CDATA[WADL]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=3036</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. SOA SOA Manifesto : pragmatisme utopique ? WADL devient une Submission W3C Le coin de la technique Play! Framework 1.0 Mise à jour de VisualVM en 1.2 Comment concevoir un datacenter, &#8230; par Google Ca bouge dans la communauté Groovy/Grails Votre application web est [...]]]></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>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#SOAManifestopragmatismeutopiqu">SOA Manifesto : pragmatisme utopique ?</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#WADLsurlavoiedelastandardisati">WADL devient une <em>Submission</em> W3C</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#PlayFramework">Play! Framework 1.0</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#MisejourdeVisualVMen">Mise à jour de VisualVM en 1.2</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#Commentconcevoirundatacenterpa">Comment concevoir un datacenter, &#8230; par Google</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#CabougedanslacommunautGroovyGr">Ca bouge dans la communauté Groovy/Grails</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#Votreapplicationwebestellevuln">Votre application web est elle vulnérable ?</a></li><li><a
href="http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/#ArtifactoryvolutionsetmodeSaaS">Artifactory : évolutions et mode SaaS</a></li></ul><h3><a
name="SOA"></a>SOA</h3><h4><a
name="SOAManifestopragmatismeutopiqu"></a>SOA Manifesto : pragmatisme utopique ?</h4><p>La communauté SOA vient de publier son <a
href="http://soa-manifesto.org/" title="SOA Manifesto" >SOA Manifesto</a>. Les valeurs sont très consensuelles, on pourrait même les trouver trop lisses quand on a vécu un naufrage SOA (avec l&#8217;oubli des objectifs métier, sa perfection naïve initiale, ses services faussement partagés qui finalement ne satisfont même pas le premier consommateur et autres ESB passe-plats).</p><p>Saluons tout de même cette initiative. SOA est une réalité. Les projets utopistes sont aujourd&#8217;hui minoritaires face à tous les projets qui intègrent des web services pour interconnecter les applications.<br
/> Le Manifeste SOA en français :<br
/> <strong>Valeur métier</strong> plutôt que stratégie technique,<br
/> <strong>Objectifs stratégiques</strong> plutôt que bénéfices spécifiques à un projet,<br
/> <strong>Interopérabilité intrinsèque</strong> plutôt qu&#8217;intégration propriétaire,<br
/> <strong>Services partagés</strong> plutôt qu&#8217;implémentation spécifique à un besoin particulier,<br
/> <strong>Flexibilité</strong> plutôt qu&#8217;optimisation,<br
/> <strong>Amélioration incrémentale</strong> plutôt que recherche de la perfection initiale.</p><p>Et rassurons-nous, ce n&#8217;est pas un manifesto qui empêchera les zélotes SOA de se déchirer. La guerre SOAP versus REST bat (toujours) son plein <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p><p>Ils parlent du SOA Manifesto : <a
href="http://www.innoq.com/blog/st/2009/10/soa_manifesto.html" title="InfoQ SOA Manifesto" >InfoQ SOA Manifesto</a>, <a
href="http://www.innoq.com/blog/st/2009/10/comments_on_the_soa_manifesto.html" title="Stefan Tilkovs Weblog  Comments on SOA Manifesto" >Stefan Tilkov&#8217;s Weblog : Comments on SOA Manifesto</a>.</p><p>Allez, je retourne à mes web services Contract First avec CXF <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p><h4><a
name="WADLsurlavoiedelastandardisati"></a>WADL devient une <em>Submission</em> W3C</h4><p>Marc Hadley, auteur de la spécification <a
href="http://www.w3.org/Submission/2009/SUBM-wadl-20090831/" title="WADL" >WADL</a> et <em>spec-lead</em> de la JSR-311 (JAX-RS), <a
href="http://weblogs.java.net/blog/mhadley/archive/2009/10/23/wadl-submitted-w3c" title="a annonc" >a annoncé</a> que WADL venait d&#8217;être accepté en tant que <em>Submission</em> W3C.</p><p>Cette spécification portée par Sun a pour but de définir un format XML de description de services REST. Il s&#8217;agit donc d&#8217;un équivalent à WSDL pour REST. Alors que REST-*, porté par JBoss, a récemment <a
href="http://blog.xebia.fr/2009/09/21/revue-de-presse-xebia-127/#LinitiativeRESTfaitdbat" title="relanc le dbat" >relancé le débat</a> sur la tendance récurrente à vouloir intégrer dans REST les fonctionnalités des très controversés WS-*, la soumission de WADL au W3C fait réapparaître la question de l&#8217;intérêt de définir des contrats pour des services REST.</p><p>Joe Gregorio <a
href="http://bitworking.org/news/193/Do-we-need-WADL" title="sopposait vivement" >s&#8217;opposait vivement</a> à l&#8217;initiative WADL il y a deux ans déjà. Il reprochait principalement :</p><ul><li>l&#8217;insuffisance de WADL pour définir élégamment tous les types de services REST</li><li>la fragilité du client qui ne fonctionne plus lorsque le contrat change comme c&#8217;est déjà le cas avec WSDL</li><li>le manque de réalisme de l&#8217;approche WADL2Java qui ne permettrait pas la pleine exploitation de REST. Il préférait donc une approche d&#8217;écriture du client REST manuelle, en se basant sur un socle commun.</li></ul><p>Toutefois, l&#8217;approche &laquo;&nbsp;REST avec un contrat&nbsp;&raquo; est séduisante pour les applications d&#8217;entreprise dont les services sont souvent aussi nombreux que les consommateurs variés.<br
/> C&#8217;est dans cette logique que de nombreux projets lèvent les ambiguïtés de leurs services REST en préférant XSD à JSON. Les URL et paramètres d&#8217;appel restant alors décrits uniquement dans une documentation annexe.</p><p>Par ailleurs, on peut regretter que WADL n&#8217;ait pas mieux adressé que WSDL des problèmes aussi important que le <em>versioning</em> des services alors qu&#8217;un projet comme <a
href="http://incubator.apache.org/thrift/" title="Apache Thrift" >Apache Thrift</a> a su être innovant sur le sujet.</p><p>La soumission de WADL au W3C n&#8217;implique donc pas forcément son succès à venir. La disponibilité en masse d&#8217;outils et de <em>frameworks</em> permettant de gérer ce format pourrait en revanche attirer une partie des adeptes de SOAP.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="PlayFramework"></a>Play! Framework 1.0</h4><p><a
href="http://www.theserverside.com/" title="The Server Side" >The Server Side</a> nous annonce la sortie de <a
href="http://www.playframework.org/" title="Play! Framework" >Play! Framework</a> en version 1.0.</p><p>Play! est un framework web de haute productivité (tout comme <a
href="http://grails.org/" title="Grails" >Grails</a> ou <a
href="http://www.springsource.org/roo" title="Spring Roo" >Spring Roo</a>) qui simplifie la création et le développement d&#8217;applications Web en langage Java. Ce framework <em>full stack</em> inclut tout une batterie de composants tels que Groovy (pour le <em>templating</em>), Apache Mina mais aussi Hibernate. Quant à l&#8217;architecture de vos projets Play!, elle sera de type RESTful.</p><p>Cette <a
href="http://vimeo.com/7087610" title="vido" >vidéo</a> nous donne un bon aperçu du produit, surtout en ce qui concerne le fameux <em>Fix the bug and hit reload !</em> c&#8217;est à dire pas de compilation, de déploiement ou de redémarrage serveur suite à la modification de vos classes Java, juste un rafraîchissement de votre navigateur pour voir vos modifications.</p><p>A noter que l&#8217;équipe travaille déjà sur la version 1.1 et, entre autres, sur le support de <a
href="http://www.scala-lang.org/" title="Scala" >Scala</a></p><p>Pour les liens utiles, la documentation complète du produit se trouve sur cette <a
href="http://www.playframework.org/documentation" title="page" >page</a>. Le téléchargement se passe par <a
href="http://download.playframework.org/" title="ici" >ici</a>. Et, comme le rappelle TSS, n&#8217;oubliez pas la présentation <a
href="http://www.devoxx.com/display/DV09/Play+framework+in+practice" title="Play! framework in practice" >Play! framework in practice</a> à Devoxx, en tous cas nous y serons !</p><h4><a
name="MisejourdeVisualVMen"></a>Mise à jour de VisualVM en 1.2</h4><p>8 mois après la sortie de la version 1.1, l&#8217;équipe nous gratifie d&#8217;une nouvelle version de son outil de monitoring de JVM. Avec un passage de 1.1.1 à 1.2, il ne faut pas s&#8217;attendre à de grandes révolutions. Une liste de <a
href="https://visualvm.dev.java.net/issues/buglist.cgi?Submit+query=Submit+query&#038;issue_type=DEFECT&#038;component=visualvm&#038;resolution=FIXED&#038;target_milestone=1.2&#038;email1=&#038;emailtype1=exact&#038;emailassigned_to1=1&#038;email2=&#038;emailtype2=exact&#038;emailreporter2=1&#038;issueidtype=include&#038;issue_id=&#038;changedin=&#038;votes=&#038;chfield=creation_ts&#038;chfieldfrom=&#038;chfieldto=Now&#038;chfieldvalue=&#038;short_desc=&#038;short_desc_type=fulltext&#038;long_desc=&#038;long_desc_type=fulltext&#038;issue_file_loc=&#038;issue_file_loc_type=fulltext&#038;status_whiteboard=&#038;status_whiteboard_type=fulltext&#038;field0-0-0=noop&#038;type0-0-0=noop&#038;value0-0-0=&#038;cmdtype=doit&#038;order=Reuse+same+sort+as+last+time" title="31 bugs corrigs" >31 bugs corrigés</a>, suivie de quelques nouvelles fonctionnalités notables:</p><ul><li>Un sampling profiler CPU et mémoire</li><li>Support de plusieurs instances de JStatd</li><li>Amélioration de l&#8217;API de génération de graphes</li><li>Sauvegarde d&#8217;un snapshot de l&#8217;application dans un fichier nps pouvant-être utilisé plus tard pour analyse</li></ul><p>Nous vous passons les améliorations de GUI et le support des proxys qui peut toujours s&#8217;avérer utile pour les analyses à distance. La vraie grande nouveauté c&#8217;est le plugin permettant de profiler l&#8217;application par sampling. Il ne faut pas s&#8217;attendre à la précision des outils instrumentant l&#8217;application comme <a
href="http://www.jinspired.com/products/jxinsight/" title="JXInsight" >JXInsight</a>. Cependant, cela permettra une analyse assez poussée sans impact sur les performances.</p><h4><a
name="Commentconcevoirundatacenterpa"></a>Comment concevoir un datacenter, &#8230; par Google</h4><p>Lors de la conférence Ladis 2009 (<b>La</b>rge Scale <b>Di</b>stributed <b>S</b>ystems and Middleware), <a
href="http://research.google.com/people/jeff/index.html" title="Jeff Dean" >Jeff Dean</a>, du groupe infrastructure chez Google, a présenté <a
href="http://www.cs.cornell.edu/projects/ladis2009/talks/dean-keynote-ladis2009.pdf" title="les manires de concevoir un systme distribu" >les manières de concevoir un système distribué</a>.</p><p>Il passe en revue différentes problématiques :</p><ul><li>Infrastructure</li><li>Stockage</li><li>Clustering</li><li>Échange de données sur le réseau</li><li>Communication entre applications</li><li>Construction d&#8217;application sur de telles infrastructures</li></ul><p>Il est intéressant de voir les problématiques posées et les solutions proposées, sur des problématiques que nous avons trop tendance à oublier en tant que développeurs. Citons entre autres :</p><ul><li>Latence réseau : un critère important, car difficile à optimiser</li><li>Bande passante du réseau</li><li>Capacité de stockage (mémoire et disque)</li></ul><p>Il est donc très important même pour un <a
href="http://surana.wordpress.com/2009/01/01/numbers-everyone-should-know/" title="dveloppeur davoir ces chiffres en tte" >développeur d&#8217;avoir ces chiffres en tête</a>.</p><p>Par retour d&#8217;expérience, Jeff Dean montre les joies d&#8217;interagir avec du matériel physique. Les applications ne doivent pas supposer que le matériel est infaillible, il y a différentes erreurs que nos applications doivent gérer. Quand on voit les nombres d&#8217;occurrences de ce type de problème et leur nature, leur gestion par l&#8217;application n&#8217;est pas aussi triviale qu&#8217;il y parait :</p><ul><li>Problème DNS</li><li>Plantage de serveur</li><li>Perte de connections</li><li>&#8230;</li></ul><p>Cette présentation est très riche, et elle permet de voir les tenants et aboutissants d&#8217;une bonne infrastructure mais aussi les impacts que cela peut avoir dans nos développements de tous les jours.</p><p>Les contraintes que s&#8217;est imposé Google en terme de disponibilité, dimensionnement, &#8230;  ont amené plusieurs innovations technologiques en terme d&#8217;infrastructure qui ont des impacts sur le développement applicatif :</p><ul><li>Protocol Buffer</li><li>MapReduce</li><li>Google File System</li><li>Big Table</li></ul><p>Les lecteurs intéressés par les innovations mises en place par Google sur ses infrastructures noteront que Gregor Hohpe (auteur de <a
href="http://www.eaipatterns.com/" title="Enterprise Integration Patterns" >Enterprise Integration Patterns</a>) présentera à Devoxx une session <a
href="http://www.devoxx.com/display/DV09/Distributed+Programming+the+Google+Way" title="Distributed Programming the Google Way" >Distributed Programming the Google Way</a>.</p><h4><a
name="CabougedanslacommunautGroovyGr"></a>Ca bouge dans la communauté Groovy/Grails</h4><p>Pour commencer, on peut noter <a
href="http://www.infoq.com/presentations/Web-Development-Grails-Graeme-Rocher" title="la longue prsentation de Grails" >la longue présentation de Grails</a> faite par Graeme Rocher sur InfoQ. Le &laquo;&nbsp;papa&nbsp;&raquo; de Grails revient sur de nombreux points relatifs à ce très bon framework permettant de créer des applications web rapidement en bénéficiant de la puissance de Java, Groovy, Hibernate, Spring&#8230;</p><p>Ensuite, et c&#8217;est la rançon du succès, il y a beaucoup de discussions et d&#8217;interrogations autour des besoins auxquels répondent Groovy et Grails. <a
href="http://blog.peterdelahunty.com/2009/10/grails-iron-man-suit-for-tony-stark.html" title="Sur son blog" >Sur son blog</a>, Peter Delahunty précise par exemple que, pour lui, Grails n&#8217;est l&#8217;arme absolue que si on a une bonne connaissance des technologies sous-jacentes (Spring, Hibernate&#8230;). Il ne faut pas débuter par Grails sans s&#8217;attendre à bloquer sur des problèmes relatifs à ces technologies.</p><p><a
href="http://www.danielhonig.info/index.php?/archives/1-Groovy-and-Grails-Java-Skills-Not-Directly-Relevant.html" title="Cet article" >Cet article</a> va dans le même sens et rappelle qu&#8217;à partir du moment où l&#8217;on parle de &laquo;&nbsp;la magie Groovy&nbsp;&raquo; il faut être conscient que des choses qui n&#8217;ont rien de magique (cela reste du code !) se passent. Les &laquo;&nbsp;dynamic finders&nbsp;&raquo;, le MOP (Meta Object Protocol) et la magie des closures font rêver mais s&#8217;expliquent bel et bien ! Ensuite, il y est noté que la proximité de Groovy et Java fait que de nombreuses personnes pensent que l&#8217;on peut passer de Java à Groovy sans formation particulière. Si l&#8217;on ne comprend pas les principes de ces choses magiques et que l&#8217;on se contente de les accepter comme tels, on s&#8217;expose tôt ou tard à des retours de flamme sévères qui se matérialisent généralement sous la forme de StackTraces incompréhensibles. Enfin, le manque de support professionnel pour Groovy/Grails est évoqué. Sur ce point, je pense que l&#8217;auteur se trompe. On note en effet que Springsource semble fournir un <a
href="http://www.springsource.com/services/enterprisesupport" title="support commercial pour ces technologies" >support commercial pour ces technologies</a>. Mais, il y a peu, Groovy et Grails n&#8217;étaient pas encore dans le giron de Springsource et l&#8217;on devait &laquo;&nbsp;se contenter&nbsp;&raquo; du support de la communauté. Néanmoins, celui-ci a toujours été assez réactif et de bon niveau.</p><p>Toujours concernant Groovy, on peut noter la version Community Edition de l&#8217;IDE IntelliJ, tout récemment publiée, semble <a
href="http://mrhaki.blogspot.com/2009/10/groovy-intentions-in-intellij-idea.html" title="bien lotie" >bien lotie</a> au niveau du support de ce langage. Malheureusement, le support de Grails, lui, n&#8217;est <a
href="http://www.jetbrains.com/idea/nextversion/editions_comparison_matrix.html" title="pas prsent dans cette version" >pas présent dans cette version</a>.</p><h4><a
name="Votreapplicationwebestellevuln"></a>Votre application web est elle vulnérable ?</h4><p>Le Web Application Security Consortium (WASC) estime que 87% des applications de la toile sont vulnérables. Tout le monde ne peut pas s&#8217;offrir les services d&#8217;un expert en sécurité, et un développeur ne peut pas écrire du code sécurisé s&#8217;il ne connaît ou ne comprends pas les risques auxquels il s&#8217;expose. C&#8217;est pour cette raison que DeveloperWorks revient sur les principales failles de sécurité qui nous guettent, et quelques outils simples pour analyser notre code.<br
/> Les points de faiblesse les plus connus sont :</p><ul><li>le cross site scripting : le pirate injecte, via un autre site (de type forum par exemple), un script (de type javascript) vers le site visé. Ce script lui permet de récupérer des informations de connexion, des cookies&#8230;</li><li>l&#8217;injection de SQL : le pirate saisit du code SQL dans un formulaire web. Celui-ci est poussé jusqu&#8217;à la base, exécuté et donne (le plus souvent) accès à la base &#8216;en direct&#8217; au pirate (l&#8217;un des exemples le plus connus est l&#8217;injection de <em>OR 1=1-</em> dans un formulaire d&#8217;authentification, qui retourne alors toujours TRUE).</li></ul><p>Et <a
href="http://blog.xebia.fr/2009/06/30/jazoon-jour-3-agile-et-securite/" title="lon reparle de lOWASP" >l&#8217;on reparle de l&#8217;OWASP</a>, qui propose un outil open source pour détecter ces erreurs de conception : WebScarab. WebScarab s&#8217;utilise comme un proxy HTTP (qui se place entre votre browser et votre serveur d&#8217;applications, par simple redirection des ports). Ensuite, un simple fichier .txt permet d&#8217;injecter votre site avec quelques-uns des plus célèbres cas de cross site scripting ou d&#8217;injection SQL. Un autre outil open source est présenté, d&#8217;un fonctionnement similaire, Paros Proxy.<br
/> Reste ensuite à détecter les faux positifs, opération généralement manuelle.</p><p>On notera que la section <a
href="http://www.ibm.com/developerworks/web/library/wa-appsecurity/?S_TACT=105AGX01&#038;S_CMP=HP&#038;ca=drs-#resources" title="Ressources" >Ressources</a> de l&#8217;article original est richement fournie, et permet de réellement comprendre les risques auxquels sont exposées les applications accessibles sur internet.</p><p>Saurez-vous trouver les failles du site de test <a
href="http://www.owasp.org/index.php/Category:OWASP_WebGoat_Project" title="Webgoat" >Webgoat</a> ?</p><h4><a
name="ArtifactoryvolutionsetmodeSaaS"></a>Artifactory : évolutions et mode SaaS</h4><p><a
href="http://www.jfrog.org/products.php" title="Artifactory" >Artifactory</a> est un <em>repository</em> Maven dont la principale particularité est de s&#8217;appuyer sur <a
href="http://en.wikipedia.org/wiki/Content_repository_API_for_Java" title="Java Content Repository (JCR)" >Java Content Repository (JCR)</a> pour assurer le stockage des artefacts. Le choix de JCR plutôt qu&#8217;un simple système de fichiers n&#8217;avait pas fait l&#8217;unanimité car il rend les tâches courantes d&#8217;administration plus délicates. En effet, lorsque l&#8217;on veut supprimer, remplacer ou déplacer un ensemble d&#8217;artefacts, l&#8217;action est triviale lorsque le système de fichier est utilisé alors qu&#8217;elle devient plus complexe avec JCR, qui n&#8217;est pas aussi directement manipulable.</p><p>Conscient de ce problème <a
href="http://www.jfrog.org" title="JFrog" >JFrog</a>, l&#8217;éditeur derrière Artifactory, a peu à peu intégré un certain nombre de fonctionnalités permettant d&#8217;effectuer ces tâches courantes d&#8217;administration des artefacts directement depuis l&#8217;interface Web. Ainsi, la dernière version du projet permet même le déplacement d&#8217;artefacts entre plusieurs <em>repository</em>.</p><p>Début septembre, JFrog a également lancé <a
href="http://www.jfrog.org/art-online.php" title="ArtifactoryOnline" >ArtifactoryOnline</a>, un service d&#8217;hébergement de <em>repository</em> Maven Artifactory en mode SaaS (Software as a Service). Ce type d&#8217;offre répond clairement à un besoin puisque la présence d&#8217;un <em>repository</em> Maven est souhaitable pour de nombreux cas d&#8217;utilisation et que cette infrastructure nécessite du temps et du matériel dont ne disposent pas toujours les équipes de taille réduite.</p><p>Par ces innovations, le <em>repository</em> Maven de JFrog saura sûrement séduire les utilisateurs déçus par les solutions concurrentes que sont <a
href="http://nexus.sonatype.org/" title="Nexus" >Nexus</a> et <a
href="http://archiva.apache.org/" title="Archiva" >Archiva</a>.</p><p><em>Article mis à jour le 26/10/2009 à 21h25</em></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/10/26/revue-de-presse-xebia-131/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/</link> <comments>http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#comments</comments> <pubDate>Mon, 24 Aug 2009 16:35:23 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[ChromeDevTools]]></category> <category><![CDATA[CloudFoundry]]></category> <category><![CDATA[Ehcache]]></category> <category><![CDATA[Hadoop]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[SpringSource]]></category> <category><![CDATA[Swing]]></category> <category><![CDATA[Terracotta]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2686</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII SpringSource lance CloudFoundry SOA David Chappell et Ted Neward : SOA est un échec &#8230; mais aussi un progrès Le coin de la technique Acquisition d&#8217;Ehcache par Terracotta, nécessaire et suffisant ? ChromeDevTools Pas de Swing Application Framework dans 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/2009/08/24/revue-de-presse-xebia-123/#SpringSourcelanceCloudFoundry">SpringSource lance CloudFoundry</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#DavidChappelletTedNewardSOAest">David Chappell et Ted Neward : SOA est un échec &#8230; mais aussi un progrès</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#AcquisitiondEhcacheparTerracot">Acquisition d&#8217;Ehcache par Terracotta, nécessaire et suffisant ?</a></li><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#ChromeDevTools">ChromeDevTools</a></li><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#PasdeSwingApplicationFramework">Pas de Swing Application Framework dans le JDK 7</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#HadoopWorld">Hadoop World 2009</a></li><li><a
href="http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/#SortieleseptembredeGoogleWaveP">Sortie le 30 septembre de Google Wave Preview </a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="SpringSourcelanceCloudFoundry"></a>SpringSource lance CloudFoundry</h4><p>Rod Johnson l&#8217;annonçait jeudi dernier sur son <a
href="http://blog.springsource.com/2009/08/19/cloud-foundry/" title="blog" >blog</a>, l&#8217;éditeur fait ses premiers pas dans le monde du cloud computing. Il s&#8217;agit en effet d&#8217;une interface web qui ne manque pas de rappeller Google App Engine permettant d&#8217;installer des applications Java sur le nuage. Dans cette première version, on nous propose de déployer des applications hébergées sur le fameux Spring Tc Server, avec out of the box, la supervision Hyperic, la possibilité d&#8217;utiliser une base de données MySQL, et évidemment le support de Grail, si cher à Rod.</p><p>Au menu, bien évidemment le support et la répartition automatique de la montée en charge. Pour le moment, le tout est déployé sur Amazon EC2, mais Rod espère bien le voir déployé prochainement sur vSphere (la solution de cloud computing de VMWare). Nous souhaitons longue vie à ce nouveau produit de SpringSource qui confirme une fois encore sa montée en puissance. Notez, tout de même pour information que c&#8217;est Chris Richardson et son équipe qui s&#8217;est chargé de la réalisation de <a
href="http://www.cloudfoundry.com/" title="CloudFoundry" >CloudFoundry</a>.</p><p><a
href="http://blog.xebia.fr/2009/08/19/java-platform-as-a-service-springsource-accelere/" title="Larticle" >L&#8217;article</a> de Cyrille Le Clerc sur SpringSource et Java Platform As A Service vous permettra d&#8217;y voir un peu plus clair sur la stratégie poursuivie par SpringSource.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="DavidChappelletTedNewardSOAest"></a>David Chappell et Ted Neward : SOA est un échec &#8230; mais aussi un progrès</h4><p>David Chappell a retrouvé une <a
href="http://www.davidchappell.com/blog/2009/08/is-soa-failing-2008-interview.html" title="discussion quil a eu avec Ted Neward en 2008 sur SOA" >discussion qu&#8217;il a eu avec Ted Neward en 2008 sur SOA</a>.</p><p>Au-delà de l&#8217;évocation des liens entre Service Oriented Architecture <em>(SOA)</em>, Software as a Service <em>(SaaS)</em> et Cloud computing, nous retiendrons de cet échange : <strong>SOA a échoué à tenir sa double promesse &laquo;&nbsp;Réutilisation et agilité&nbsp;&raquo;</strong>.<br
/> L&#8217;agilité est une forme de réutilisation puisqu&#8217;elle permet de créer de nouveaux services en assemblant facilement des services existant. La <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="rutilisation des services mtiers" >réutilisation des services métiers</a> a échoué, et par effet de bord, l&#8217;agilité n&#8217;a pas été obtenue. La réutilisation des services métiers est analogue à la réutilisation des objets métiers à la fin des années 90.<br
/> La cause de cet échec, pour SOA comme pour les objets métier, n&#8217;est pas technique mais principalement humaine. Les organisations n&#8217;ont pas créé les conditions pour inciter les équipes à partager leur travail ni à réutiliser le travail des autres <em>(Cf. &laquo;&nbsp;<a
href="http://blog.xebia.fr/2008/05/16/les-10-pieges-de-la-soa-10-le-syndrome-not-invented-here/" title="Le syndrome Not Invented Here" >Le syndrome Not Invented Here</a>&nbsp;&raquo; et &laquo;&nbsp;<a
href="http://blog.xebia.fr/2008/06/24/les-10-pieges-de-la-soa-02-propriete-des-composants-et-financement-au-projet/" title="Proprit des composants et Financement au projet" >Propriété des composants et Financement au projet</a>&laquo;&nbsp;)</em>.</p><p>En revanche, la réutilisation des objets techniques a réussi, les frameworks .Net et Java EE en sont des exemples. De plus, l&#8217;orienté objet a convaincu comme paradigme de programmation. Pour SOA, la réutilisation de services techniques comme la gestion de l&#8217;identité ou la couche d&#8217;accès aux données <em>basiques</em> fonctionne.</p><p>Il s&#8217;agit donc d&#8217;un échec du SOA tel qu&#8217;on nous l&#8217;a promis mais en revanche d&#8217;un succès de l&#8217;approche par service.</p><p>Pour ce qui est des <strong>ESB</strong>, il s&#8217;agit principalement d&#8217;un <strong>coup marketing</strong> des éditeurs de solutions d&#8217;intégrations mais <strong>aussi d&#8217;une évolution des paradigmes d&#8217;intégration</strong> : l&#8217;intégration par services à succédé à l&#8217;intégration par base de données.</p><p><strong>Alors SOA est un échec ? Oui si l&#8217;on regarde les promesses initiales qui n&#8217;ont pas été tenues ; non si l&#8217;on voit les transformations orientées service qu&#8217;elle apporte.</strong></p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="AcquisitiondEhcacheparTerracot"></a>Acquisition d&#8217;Ehcache par Terracotta, nécessaire et suffisant ?</h4><p>Le teaser largement propagé via Twitter et les différents blogs des acteurs de Terracotta est tombé. Terracotta a <a
href="http://www.terracotta.org/web/display/orgsite/Terracotta+Acquires+Ehcache" title="fait l'acquisition" >fait l&#8217;acquisition</a> d&#8217;un des frameworks open-source les plus populaires du marché : Ehcache. Drôle de teasing, sous la forme d&#8217;un <a
href="http://gregluck.com/blog/archives/2009/08/ehcache_joins_w.html" title="hash md5" >hash md5</a>, pour une drôle d&#8217;annonce. Ce mariage ressemble plus à un arrangement entre amis qu&#8217;a un véritable rachat :</p><ul><li>Ehcache et Terracotta fonctionnent conjointement depuis bien longtemps.</li><li>Ehcache est porté par une seule personne : Greg Luck.</li><li>La vente de support Ehcache ne fonctionne pas vraiment, <a
href="http://www.linuxworld.com/news/2009/081809-terracotta-boosts-app-scaling-prowess-with.html?fsrc=rss-linux-news" title="dixit Greg Luck" >dixit Greg Luck</a>.</li><li>Le code source de Ehcache est très léger, et sa partie la plus complexe, le cache distribué, concurrence avec une grande simplicité Terracotta.</li></ul><p>Alors, pourquoi avoir racheté Ehcache ?</p><p>Selon certains analystes,  après le rachat de SpringSource, VMWare a la volonté d&#8217;élargir son portefeuille d&#8217;outils et de middleware Java, et Terracotta serait pressenti. C&#8217;est en tout cas l&#8217;hypothèse mise en avant par quelques gaillards de Terracotta (encore une fois, merci Twitter). Notre sentiment, trop de bruit pour que cela soit d&#8217;actualité. Par contre, il nous semble clair que Terracotta désire se faire racheter. Et pour cela, plusieurs problèmes doivent être réglés :</p><ul><li>Malgré les différentes versions, Terracotta suscite des résistances, en cause son approche bas niveau (JVM / Bytecode) qui freine bon nombre d&#8217;utilisateurs. D&#8217;ailleurs, Terracotta ne fonctionne pas avec toutes les JVM.</li><li>L&#8217;utilisation de ce framework n&#8217;est pas transparente, quoi qu&#8217;en disent les documentations. Il est facile de se tromper sur le choix des objets à partager et les poses de lock. Tout cela fait qu&#8217;à l&#8217;utilisation, la mise en place de celui-ci est tout sauf triviale.</li></ul><p>Et c&#8217;est là qu&#8217;Ehcache intervient !</p><ul><li>Mis en lumière par le cache L2 d&#8217;hibernate, Ehcache fonctionne également avec d&#8217;autres produits star comme Spring, Alfresco et Liferay. Il est devenu l&#8217;une des apis de cache les plus utilisées par les développeurs. On parle de plusieurs centaines de milliers de projets utilisant celui-ci. Avec ce rachat, Terracotta espère se rapprocher davantage de cette communauté en s&#8217;appuyant sur la bonne image d&#8217;Ehcache pour rassurer les développeurs.</li><li>D&#8217;autre part, Terracotta gonfle sa stack logiciel et propose dans son portefeuille un mécanisme de cache distribué alternatif plus haut niveau.</li></ul><p>Au final, petite annonce ? Pas si sûr ! Terracotta signe ici un joli coup de communication et se met dans les meilleures conditions en vue d&#8217;un éventuel prochain rachat.</p><h4><a
name="ChromeDevTools"></a>ChromeDevTools</h4><p>Pour ceux qui ne sont pas à l&#8217;aise avec le débogage Javascript par l&#8217;interface de <a
href="https://addons.mozilla.org/fr/firefox/addon/1843" title="Firebug" >Firebug</a> ou tout simplement ceux qui souhaitent débugger intégralement leur application dans Eclipse, y compris le Javascript client, voici un petit outil (développé par Google) qui vous le permettra : le <a
href="http://code.google.com/p/chromedevtools/" title="Google Chrome Dev Tools" >Google Chrome Dev Tools</a> (par l&#8217;<a
href="http://eclipse.dzone.com/news/debug-javascript-eclipse" title="Eclipse Zone" >Eclipse Zone</a>).</p><p>Le projet se compose du <a
href="http://code.google.com/p/chromedevtools/wiki/ChromeDevToolsSdk" title="Chrome Dev Tools SDK" >Chrome Dev Tools SDK</a>, API Java permettant à une application en mode debug de communiquer avec le navigateur Google Chrome (localhost en TCP/IP) , et de l&#8217;<a
href="http://code.google.com/p/chromedevtools/wiki/EclipseDebugger" title="Eclipse Debugger" >Eclipse Debugger</a>, le plugin Eclipse qui vous permettra de débugger votre application.</p><p>Ce dernier propose entre autres :</p><ul><li>Breackpoints</li><li>Watches</li><li>Step in / over / into</li><li>Évaluation d&#8217;une sélection de texte</li><li>Évaluation sur <code>mouse hover</code></li><li>Exceptions reportées dans la vue <code>Error Log</code></li></ul><p>Côté mise en place, il vous faudra au minimum, comme vous pouvez vous en doutez, un navigateur Google Chrome en version 3.0.189.0 (actuellement en beta) et un Eclipse 3.4.2. L&#8217;installation du plugin se fera par l&#8217;Update Site avec cette <a
href="http://chromedevtools.googlecode.com/svn/update/dev/" title="URL" >URL</a>.<br
/> Il vous faudra ensuite lancer votre Chrome avec le paramètre <code>--remote-shell-port=9222</code> (ou le port de votre choix) et définir, dans le menu <code>Debug Configurations</code> d&#8217;Eclipse, une nouvelle <code>Chromium Javascript</code> configuration avec le port spécifié pour Chrome. Et à partir de là, à vous les breakpoints et le debug de votre application dans Eclipse !</p><h4><a
name="PasdeSwingApplicationFramework"></a>Pas de Swing Application Framework dans le JDK 7</h4><p>Il y a quelques mois <a
href="http://blog.xebia.fr/2009/03/30/revue-de-presse-xebia-102/#EnfinuneroadmapdtaillepourleJD" title="nous vous parlions" >nous vous parlions</a> de la disponibilité d&#8217;une <em>roadmap</em> détaillée pour le JDK 7. Elle incluait entre autre la <a
href="http://www.jcp.org/en/jsr/detail?id=296" title="JSR-296 (Swing Application Framework)" >JSR-296 (Swing Application Framework)</a>, une spécification destinée à simplifier le développement d&#8217;applications Swing grâce à :</p><ul><li>Des annotations <code>@Action</code> pour déclarer les actions Swing plus facilement qu&#8217;en sous-classant <code>AbstractAction</code> puis en redéfinissant la méthode <code>actionPerformed()</code></li><li>Gestion de l&#8217;enregistrement de l&#8217;état des fenêtres à la fermeture de l&#8217;application</li><li>Simplification de la gestion des ressources</li><li>Gestion du cycle de vie de l&#8217;application</li></ul><p>Les apports sont intéressants car répondent bien aux réalités des projets Swing courants, mais n&#8217;y répondent que partiellement. En effet il aurait été interessant de voir se créer une synergie avec la <a
href="http://www.jcp.org/en/jsr/detail?id=330" title="JSR-330 (Dependency Injection for Java)" >JSR-330 (Dependency Injection for Java)</a> afin d&#8217;apporter l&#8217;injection de dépendance aux applications client lourds. De plus, ce <em>framework</em> ne simplifie pas la définition des interfaces en Swing, opération se révélant souvent assez laborieuse en raison d&#8217;APIs vieillissantes et probablement trop bas niveau.</p><p>Alexander Potochkin <a
href="http://weblogs.java.net/blog/alexfromsun/archive/2009/08/saf_and_jdk7.html" title="nous apprend" >nous apprend</a> maintenant que cette JSR ne sera pas prête dans les temps pour la <em>roadmap</em> prévue et qu&#8217;en conséquence son intégration au JDK 7 est annulée. Dans ces conditions, les apports du JDK 7 à Swing seront quasi nuls, ce qui constituera une réponse bien peu satisfaisante <a
href="http://blog.xebia.fr/2009/03/02/revue-de-presse-xebia-98/#LinitiativeSwingcritique" title="aux dbats ayant anim" >aux débats ayant animé</a> cette communauté il y a quelques mois.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="HadoopWorld"></a>Hadoop World 2009</h4><p>La société <a
href="http://cloudera.com/" title="Cloudera" >Cloudera</a>, spécialisée dans le support aux utilisateurs de <a
href="http://hadoop.apache.org/" title="Hadoop" >Hadoop</a>, a annoncé la première conférence mondiale consacré à Hadoop : <a
href="http://cloudera.com/hadoop-world-nyc" title="Hadoop World" >Hadoop World</a>. Cette conférence se tiendra à New-York City en octobre de cette année. Elle est soutenue par des sponsors de taille comme IBM, Intel et Yahoo.</p><p>Le nombre de candidat à la prise de parole est tellement important que l&#8217;agenda n&#8217;est pas encore fixé. Le thème sera &laquo;&nbsp;Hadoop is everywhere&nbsp;&raquo;, on aura donc droit à des sujets aussi bien sur des applications utilisant déjà Hadoop, que sur les implications coté administration de parc.</p><p>Les inscriptions sont ouvertes &#8230;</p><h4><a
name="SortieleseptembredeGoogleWaveP"></a>Sortie le 30 septembre de Google Wave Preview</h4><p>Présenté il y a quelques mois comme une évolution majeure de notre façon de communiquer en ligne, Google Wave sera bientôt disponible au public. 100 000 utilisateurs sont attendus une fois le service ouvert.</p><p>A l&#8217;heure actuelle, les développeurs qui ont pu testés ont eu de gros problèmes de disponibilité de la plateforme. Sur <a
href="http://www.infoq.com/news/2009/08/wave-preview-opens" title="InfoQ" >InfoQ</a>, on apprend que pour le 30 septembre, l&#8217;objectif du responsable technique de Wave API, Douwe Osinga, est bien sûr d&#8217;améliorer la stabilité du système mais aussi d&#8217;ajouter des fonctionnalités à l&#8217;API. Par conséquent, il ne leur restait que peu de temps pour stabiliser le bac à sable.</p><p>Dans les nouvelles fonctionnalités, l&#8217;accent a été mis sur l&#8217;API liée aux <a
href="http://code.google.com/apis/wave/extensions/robots/index.html" title="robots" >robots</a> qui est à présent ouverte.  Grâce aux robots, on peut répondre de manière applicative à des évènement sur la wave, ce qui permet d&#8217;interagir avec les autres participants, ou d&#8217;échanger des informations avec des systèmes extérieurs.</p><p>Si vous souhaitez être averti de l&#8217;ouverture du service, <a
href="https://services.google.com/fb/forms/wavesignup/" title="inscrivezvous" >inscrivez-vous</a>. Vous pouvez même écrire un message d&#8217;encouragement à l&#8217;équipe de Google Wave. Ils en auront certainement besoin pendant le moins prochain&#8230;</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/08/24/revue-de-presse-xebia-123/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>SOA : Du composant au service : La composabilité</title><link>http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/</link> <comments>http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#comments</comments> <pubDate>Tue, 11 Aug 2009 07:50:46 +0000</pubDate> <dc:creator>Christophe Heubès</dc:creator> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2623</guid> <description><![CDATA[Comme son nom le suggère, l&#8217;élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question &#171;&#160;Qu&#8217;est-ce qu&#8217;un service ?&#160;&#187;. Ce sujet débouche invariablement sur, au choix : Un blanc ; [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service-150x150.png" alt="composant-service" title="composant-service" width="150" height="150" style="margin: 1em 1em 1em 1em; float: right;" /></a><br
/> Comme son nom le suggère, l&#8217;élément clé de SOA <em>(Service Oriented Architecture)</em> est le <strong>Service</strong>. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question <em><strong>&laquo;&nbsp;Qu&#8217;est-ce qu&#8217;un service ?&nbsp;&raquo;</strong></em>. Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée <em>(ou un débat stérile)</em>.</p><p>On pourrait proposer la définition suivante : <em>&laquo;&nbsp;Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d&#8217;un domaine métier&nbsp;&raquo;</em>. Malheureusement, les définitions aussi courtes <em>(bien qu&#8217;exactes)</em> sont nécessairement incomplètes et amènent un florilège de questions.</p><p>Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service&nbsp;:</p><ul><li><a
href="http://blog.xebia.fr/2009/03/04/soa-du-composant-au-service-le-contrat-standardise/#more-1560">Contrat standardisé</a> : L&#8217;ensemble des services d&#8217;un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.</li><li><a
href="http://blog.xebia.fr/2009/03/19/soa-du-composant-au-service-le-couplage-lache/#more-1633">Couplage lâche</a> : Le contrat d&#8217;un service doit imposer un couplage lâche de ses clients.</li><li><a
href="http://blog.xebia.fr/2009/04/03/soa-du-composant-au-service-labstraction/#more-1706">Abstraction</a> : Le contrat d&#8217;un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.</li><li><a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/#more-1780">Réutilisabilité</a> : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.</li><li><a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852">Autonomie</a> : Un service doit exercer un contrôle fort sur son environnement d&#8217;exécution sous-jacent. Plus ce contrôle est fort, plus l&#8217;exécution d&#8217;un service est prédictible.</li><li><a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134">Stateless</a> <em>(sans état)</em> : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d&#8217;état quand cela est nécessaire.</li><li><a
href="http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#more-2196">Découvrabilité</a> : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.</li><li><a
href="http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#more-2623">Composabilité</a> : Un service doit être conçu de façon à participer à des compositions de services.</li></ul><p>Ces 8 aspects sont issus du livre &laquo;&nbsp;<a
href="http://www.amazon.com/Principles-Service-Prentice-Service-Oriented-Computing/dp/0132344823">SOA Principles of Service Design</a>&nbsp;&raquo; de Thomas Erl, également auteur du site <a
href="http://www.soaprinciples.com/">SOA Principles</a>.</p><p>Dans ce billet, nous nous attarderons sur la notion de <a
href="http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#more-2623">composabilité</a>.</p><p>Un service doit être composable, c&#8217;est-à-dire être conçu de façon à participer à des compositions de services.</p><p>Ce huitième et dernier aspect constitue en quelque sorte l&#8217;aboutissement des sept précédents. En effet, l&#8217;ensemble des principes présentés dans cette série vise <em>in fine</em> à la <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="rutilisation des services" >réutilisation des services</a>. Or, cette réutilisabilité n&#8217;a de sens que si les services sont effectivement réutilisés en prenant part à des compositions de services.</p><p>C&#8217;est grâce à la composabilité que sera mis en œuvre le principe de <em><strong>&laquo;&nbsp;separation of concerns&nbsp;&raquo;</strong></em> au sein d&#8217;une architecture orientée services. L&#8217;objectif est ici de <a
href="http://blog.xebia.fr/2008/05/30/les-10-pieges-de-la-soa-07-mauvaise-granularite-des-services/" title="dterminer la bonne granularit de services" >déterminer la &laquo;&nbsp;bonne&nbsp;&raquo; granularité de services</a> afin de décomposer la solution à un problème métier de haut niveau en un ensemble de &laquo;&nbsp;plus petites unités réutilisables&nbsp;&raquo; de traitement : les services.<br
/> L&#8217;idée est de pouvoir <strong>recomposer notre logique métier à l&#8217;infini</strong> au sein de processus ou de services composites de haut niveau.</p><p>La mise en œuvre de cet aspect dans une architecture de services pose donc le problème du <strong>bon niveau de granularité pour un service</strong> :</p><ul><li>Un service trop large ne pourra pas être réutilisé, car il implémente un enchainement de traitements qui n&#8217;ont, a priori, de sens que dans le contexte où le service a été écrit. Un service trop large n&#8217;est utilisable que par une seule <em>(ou quelques)</em> application<em>(s)</em>.</li><li>A l&#8217;opposé, un service trop fin ne sera pas réutilisé, car il implémente un traitement atomique qui n&#8217;apporte pas de valeur ajoutée. Un service trop fin propose un niveau de détail qui n&#8217;est pas pertinent d&#8217;un point de vue métier.</li></ul><p>D&#8217;autre part, il faut garder à l&#8217;esprit que, d&#8217;un point de vue technique <em>(runtime)</em>, un service ne sera composable que s&#8217;il est <a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852" title="autonome" >autonome</a> et <a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134" title="stateless" >stateless</a> <em>(c&#8217;est-à-dire <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/#more-1780" title="rutilisable" >réutilisable</a>)</em>.</p><p>Déterminer le niveau de granularité adéquat pour les services d&#8217;un écosystème est un exercice délicat, qui exige des connaissances <em>(en grande partie métier)</em>, de l&#8217;expertise et l&#8217;expérimentation de différentes options.<br
/> La réussite de cet exercice permettra de maximiser la composabilité du portfolio de services, pré-requis indispensable à l&#8217;atteinte d&#8217;un des objectifs phares de la mise en œuvre d&#8217;une architecture à base de services : la réutilisation des services en vue de l&#8217;<strong>agilisation du SI</strong>, indispensable à la <strong>réduction du time-to-market</strong>, principal élément de ROI des SOA.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/</link> <comments>http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#comments</comments> <pubDate>Mon, 20 Jul 2009 16:20:01 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[CEP]]></category> <category><![CDATA[Cloud Computing]]></category> <category><![CDATA[Complex Event Processing]]></category> <category><![CDATA[EDA]]></category> <category><![CDATA[Flex]]></category> <category><![CDATA[Flex Monkey]]></category> <category><![CDATA[GWT]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JavaRebel]]></category> <category><![CDATA[OpenDS]]></category> <category><![CDATA[REST]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2567</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Les standards du Cloud Computing en préparation Fin de JavaRebel, place à &#8230; RIA GWT 1.7 pour les nouveaux navigateurs ! Flex Monkey 1.0 SOA La base de données dans une Event Driven Architecture REST et les abus de langage [...]]]></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/2009/07/20/revue-de-presse-xebia-118/#LesstandardsduCloudComputingen">Les standards du Cloud Computing en préparation</a></li><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#FindeJavaRebelplace">Fin de JavaRebel, place à &#8230;</a></li></ul><p><strong>RIA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#GWTpourlesnouveauxnavigateurs">GWT 1.7 pour les nouveaux navigateurs !</a></li><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#FlexMonkey">Flex Monkey 1.0</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#LabasededonnesdansuneEventDriv">La base de données dans une <em>Event Driven Architecture</em></a></li><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#RESTetlesabusdelangage">REST et les abus de langage</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#OpenDSpasseenversion">OpenDS passe en version 2.0</a></li><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#bonnesraisonsdechercherlesucce">10 bonnes raisons de chercher le successeur de Java</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/#SoireTontonsFlexeurs">Soirée Tontons Flexeurs</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="LesstandardsduCloudComputingen"></a>Les standards du Cloud Computing en préparation</h4><p>Comme pour tout marché émergeant, le Cloud Computing s&#8217;est développé autour de technologies propriétaires mises au point par différents éditeurs et fournisseurs. Une <a
href="http://blog.xebia.fr/2009/06/15/revue-de-presse-xebia-113/#RetoursurleCloudCamp" title="session ddie aux problmatiques dintgration" >session dédiée aux problématiques d&#8217;intégration</a> lors du CloudCamp Paris avait conclu qu&#8217;aucun standard adapté n&#8217;était disponible pour permettre le transfert d&#8217;informations entre les différents fournisseurs et technologies du Cloud Computing.</p><p>Le monde du Cloud Computing montant en puissance mois après mois, la problématique de standardisation se fait de plus en plus pressante. C&#8217;est donc sans surprise qu&#8217;on a assisté à la constitution d&#8217;organismes de standardisation et de groupes de travail afin d&#8217;établir les standards à venir. Afin de donner une visibilité à l&#8217;ensemble de ces efforts, l&#8217;Open Grid Forum (OGF) annonce la création d&#8217;un site commun ou chaque organisme est invité à présenter ses travaux en cours : <a
href="http://cloud-standards.org" title="cloud-standards.org" >http://cloud-standards.org</a>. On notera particulièrement deux spécifications prometteuses :</p><ul><li><a
href="http://www.dmtf.org/" title="Open Virtualization Format (OVF)" >Open Virtualization Format (OVF)</a> : Format de <em>packaging</em> d&#8217;application permettant la distribution et le déploiement simplifié sur environnement virtualisé.</li><li><a
href="http://www.occi-wg.org/" title="Open Cloud Computing Interface (OCCI)" >Open Cloud Computing Interface (OCCI)</a> : API standardisée permettant la définition, le <em>provisioning</em> et le <em>monitoring</em> d&#8217;infrastructures exposées en tant que services sur un Cloud (IaaS).</li></ul><p>Par ailleurs, l&#8217;<a
href="http://www.opencloudconsortium.org/" title="Open Cloud Consortium (OCC)" >Open Cloud Consortium (OCC)</a> explique travailler sur des <em>frameworks</em> d&#8217;interopérabilité entre Clouds et l&#8217;<a
href="http://www.oasis-open.org" title="OASIS" >OASIS</a> expose quant à elle sa vision selon laquelle le Cloud Computing est une extension naturelle des concepts SOA, et que, par conséquent, de nombreux standards qu&#8217;elle développe actuellement intègrent cette problématique.</p><h4><a
name="FindeJavaRebelplace"></a>Fin de JavaRebel, place à &#8230;</h4><p>Zeroturnaround, l&#8217;éditeur de <a
href="http://blog.xebia.fr/2008/11/14/javarebel/" title="JavaRebel" >JavaRebel</a>, doit faire face à un joli défi : pour avoir fait une entorse à la marque déposée Java, il doit modifier le nom de son produit, sans pour autant perdre la notoriété d&#8217;ores et déjà acquise. Pour faire d&#8217;une pierre deux coups (modifier effectivement ce nom mais aussi s&#8217;offrir un joli coup de pub), l&#8217;éditeur soumet ce renommage <a
href="http://www.zeroturnaround.com/blog/renaming-javarebel/" title=" un concours" >à un concours</a>. En jeu, une licence <strike>JavaRebel</strike> à vie&#8230;</p><h3><a
name="RIA"></a>RIA</h3><h4><a
name="GWTpourlesnouveauxnavigateurs"></a>GWT 1.7 pour les nouveaux navigateurs !</h4><p>Les dernières <em>releases</em> de GWT étaient plutôt espacées dans le temps (1 an entre 1.4/1.5 et 8 mois entre 1.5/1.6) mais il n&#8217;aura fallu attendre que 3 mois pour voir débarquer la version <strike>1.6.5</strike> <a
href="http://groups.google.com/group/Google-Web-Toolkit-Contributors/browse_thread/thread/a0d35938d940d32d?pli=1" title="17 de GWT" >1.7 de GWT</a>.</p><p>Cette dernière version (définie comme mise à jour mineure / <em>bugfix release</em>) apporte un meilleur support des derniers navigateurs à savoir Internet Explorer 8, FireFox 3.5 et Safari 4 (meilleur support d&#8217;IE8 = <a
href="http://ajaxian.com/archives/the-slow-death-of-ie-6-support-youtube-and-browser-placement" title="disparition dIE6" >disparition d&#8217;IE6</a> ? <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ).</p><p>L&#8217;ajout du <code>user.agent ie8</code>, qui peut potentiellement impacter certains projets, a fait pencher la balance vers un numéro de version de type majeure (1.7) pour forcer les développeurs à être attentif sur ce point important (une version de type 1.6.5 n&#8217;aurait pas eu le même impact).</p><p>Une simple recompilation suffit pour être compatible avec ces navigateurs, aucune modification de code n&#8217;est requise. Disponible comme toujours dans la section <a
href="http://code.google.com/p/google-web-toolkit/downloads/list?can=1&#038;q=GWT+1.7.0" title="tlchargement" >téléchargement</a> du Google Code.</p><h4><a
name="FlexMonkey"></a>Flex Monkey 1.0</h4><p>Plus de 7 mois après la sortie de la version 0.5 (<a
href="http://blog.xebia.fr/2008/12/01/revue-de-presse-xebia-85/#FlexMonkey" title="précédente revue de presse" >précédente revue de presse</a>), <a
href="http://flexmonkey.gorillalogic.com/gl/stuff.flexmonkey.html" title="FlexMonkey" >FlexMonkey</a>, le framework de tests automatisés pour applications Flex et Air, se met à jour et passe ainsi en version 1.0 (par <a
href="http://www.infoq.com/news/2009/07/flex-monkey-1.0-released" title="InfoQ" >InfoQ</a>).</p><p>Au menu : réorganisation de l&#8217;interface utilisateur, support direct d&#8217;applications Air (la console FlexMonkey devenant d&#8217;ailleurs une application Air) et tests générés pour Fluint (qui pourront aussi être lancés par FlexUnit 4).</p><p>Plusieurs tutoriels/exemples sont déjà disponibles sur la toile, on retiendra plus particulièrement le <a
href="http://www.adobe.com/devnet/flex/articles/flexmonkey.html" title="Getting Started" >Getting Started</a> d&#8217;Eric Owens <em>(Gorilla Logic)</em> et l&#8217;article très complet de Stuart Stern (CEO de <em>Gorilla Logic</em> et <a
href="http://stu-stern.blogspot.com/2009/07/monkey-has-landed.html" title="créateur de FlexMonkey" >créateur de FlexMonkey</a>) sur <a
href="http://www.infoq.com/articles/flexmonkey-ui-unit-testing" title="InfoQ" >InfoQ</a>.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="LabasededonnesdansuneEventDriv"></a>La base de données dans une <em>Event Driven Architecture</em></h4><p>Sur son blog dédié aux traitements des évènements dans les systèmes d&#8217;informations, Tibco <a
href="http://tibcoblogs.com/cep/2009/07/14/exploiting-databases-in-an-event-based-infrastructure-just-got-easier/" title="a publi un billet" >a publié un billet</a> portant sur le positionnement d&#8217;une base de données dans une <em>Event Driven Architecture</em> (EDA).</p><p>Se trouvant à la base de nombreuses applications et services, elle constitue en effet une potentielle source d&#8217;évènements très intéressante. L&#8217;auteur met alors en avant la technologie <a
href="http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28424/adfns_cqn.htm" title="Continuous Query Notification (CQN)" ><em>Continuous Query Notification</em> (CQN)</a> intégrée à Oracle 11g, et qui permet aux clients d&#8217;une base de données de s&#8217;enregistrer pour recevoir des notifications lorsque les données d&#8217;une table ou le résultat d&#8217;une requête prédéfinie changent. On peut assimiler cette technologie à un mécanisme de <em>trigger</em> qui rappellerait des systèmes externes.</p><p>Cette possibilité permet ainsi d&#8217;enrichir les sources d&#8217;évènements disponibles au sein du système d&#8217;information : de par son positionnement, la base de données est capable d&#8217;offrir simplement des évènements qui seraient parfois complexes à générer au niveau applicatif. Dans une telle configuration, le <a
href="http://en.wikipedia.org/wiki/Complex_Event_Processing" title="Complex Event Processing (CEP)" ><em>Complex Event Processing</em> (CEP)</a> permettra alors de manipuler le volume important d&#8217;évènements ainsi créés afin d&#8217;en extraire des informations métiers utiles.</p><h4><a
name="RESTetlesabusdelangage"></a>REST et les abus de langage</h4><p>Ryan McDonough, contributeur au projet <a
href="http://www.jboss.org/resteasy/" title="RESTEasy" >RESTEasy</a>, <a
href="http://www.damnhandy.com/2009/07/19/you-cant-do-anything-over-rest/" title="a publi un billet" >a publié un billet</a> dans lequel il fait un parallèle entre les abus de langages liés à REST et les mauvaises pratiques qui en découlent.</p><p>Parmi les erreurs de compréhension qu&#8217;il met en avant, on retrouve l&#8217;assimilation de REST à un protocole, la définition de REST en tant que synonyme de HTTP, ou encore l&#8217;utilisation abusive du qualificatif RESTful.</p><p>Il est souvent question lorsque l&#8217;on parle de REST de définition d&#8217;URLs, de représentations multiples d&#8217;une ressource, ou, plus couramment encore, d&#8217;opposition à SOAP. Loin de ces problématiques, Ryan McDonough met ici en avant le fait que REST est dans la réalité trop souvent utilisé pour justifier à tort tout type d&#8217;utilisation douteuse de JSON ou XML sur HTTP&#8230;</p><p>A ce titre, le <a
href="http://oreilly.com/catalog/9780596529260/" title="livre RESTful WebServices" >livre RESTful WebServices</a> de Leonard Richardson et Sam Ruby permet de comprendre en détail toutes les nuances de ce modèle d&#8217;architecture qui sont parfois délicates à appréhender.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="OpenDSpasseenversion"></a>OpenDS passe en version 2.0</h4><p>La version 2.0 du projet <a
href="http://www.opends.org/" title="OpenDS" >OpenDS</a> est disponible. Il s&#8217;agit d&#8217;un serveur LDAP implémenté entièrement en Java et soutenu par Sun ; ces caractéristiques le positionne donc directement face à <a
href="http://directory.apache.org/" title="Apache Directory Server" >Apache Directory Server</a>, son équivalent développé par la fondation Apache.</p><p>Ludovic Poitou <a
href="http://blogs.sun.com/Ludo/entry/opends_2_0_is_here" title="prsente les principales nouveauts" >présente les principales nouveautés</a> de cette version :</p><ul><li>Ajout d&#8217;un <em>control panel</em> graphique, en remplacement du <em>status-panel</em> de la version précédente, permettant d&#8217;administrer le serveur et ses données</li><li>Amélioration de la réplication <em>multi-master</em><li>Support de connections sécurisées SASL</li><li>Affinement du système de contrôle d&#8217;accès</li><li>Amélioration des performances. On notera sur ce point la collaboration avec l&#8217;équipe du <em>garbage collector</em> G1 qui avait <a
href="http://blogs.sun.com/mattswift/entry/garbage_first_the_g1_garbage" title="t expose il y a 2 mois" >été exposée il y a 2 mois</a></li></ul><p>Au delà de l&#8217;ajout de fonctionnalités, la question du positionnement reste entière pour OpenDS tout comme pour son rival ApacheDS. En effet, l&#8217;annuaire est en général une ressource critique du système d&#8217;information pour laquelle on préfèrera généralement une implémentation native plus mature. Dès lors, OpenDS se destinera principalement au poste de développement, aux tests, et aux applications embarquant directement leur propre annuaire comme mécanisme de persistance.</p><h4><a
name="bonnesraisonsdechercherlesucce"></a>10 bonnes raisons de chercher le successeur de Java</h4><p>Dans la droite ligne d&#8217;un certain nombre de keynotes récentes, <a
href="http://www.theserverside.com/news/thread.tss?thread_id=55185" title="Mario Fusco expose sur TheServerSide" >Mario Fusco expose, sur TheServerSide</a>, 10 bonnes raisons de chercher un héritier à Java. Ces &#8216;manques&#8217; de Java sont souvent évoqués, parfois partiellement comblés par les futures spécifications. Il nous a semblé malgré tout intéressant de les reprendre ici, ne serait ce pour que ces limitation soient bien comprises de tous.</p><ul><li>Absence de Closures, et son corollaire, l&#8217;absence de pointeur sur les fonctions (<a
href="http://www.joelonsoftware.com/items/2006/08/01.html" title="firstclass function" ><em>first-class function</em></a>).</li><li>L&#8217;existence de types primitifs (le langage n&#8217;est pas 100 % objet), et un autoboxing pas toujours performant (sur la gestion des null par exemple).</li><li>La faiblesse des Génériques : impossible de découvrir leur type au Runtime.</li><li>L&#8217;impossibilité de supprimer certains warnings concernant les génériques.</li><li>Impossible de passer un paramètre <em>void</em> à une méthode.</li><li>Le pattern <em>proxy</em> n&#8217;est pas implémenté de manière native sur les classes concrètes.</li><li>Le switch&#8230;case est très faible</li><li>La présence des exceptions <em>Checked</em> qui obligent à de douloureux <code>try...catch</code> ou à d&#8217;illisibles <code>throws</code></li></ul><p>Mario Fusco a l&#8217;honnêteté de reconnaitre que nombre de ces défauts font partie des péchés originels de Java et qu&#8217;il est quasiment impossible de les remettre en cause sans gravement compromettre la compatibilité ascendante du language, qui en est une des pierres angulaires. C&#8217;est pour cette raison qu&#8217;il se met en quête du <em>next gen language</em></p><p>Vous ne manquerez pas de remarquer que, comme tout article qui parle de succéder à Java, ce billet est richement (parfois de manière assez virulente) commenté.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="SoireTontonsFlexeurs"></a>Soirée Tontons Flexeurs</h4><p>Demain (mardi 21 Juillet) de 18h à 20h se déroulera une nouvelle soirée des <a
href="http://groups.adobe.com/groups/193bcaff5f/summary" title="Tontons Flexeurs" >Tontons Flexeurs</a> dont le sujet est un retour d&#8217;expériences sur la mise en place d&#8217;applications Flex en entreprise dans le monde Java (tests unitaires/fonctionnels, intégration continue&#8230;).<br
/> L&#8217;événement étant déjà <a
href="http://reunion-ttfx-juillet-2009.eventbrite.com/" title="complet" >complet</a>, il ne vous reste plus qu&#8217;à bookmarker leur <a
href="http://groups.adobe.com/resources/8a214877ac/summary" title="calendrier" >calendrier</a> pour être informé des prochaines réunions <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /></p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/07/20/revue-de-presse-xebia-118/feed/</wfw:commentRss> <slash:comments>6</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/</link> <comments>http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#comments</comments> <pubDate>Mon, 13 Jul 2009 15:53:20 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[ESB]]></category> <category><![CDATA[GChart]]></category> <category><![CDATA[GWT]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JBoss]]></category> <category><![CDATA[jBPM]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Sun]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2541</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. RIA GChart 2.5 pour GWT SOA jBPM 4.0 est disponible Avez-vous besoin d&#8217;un ESB ? Le coin de la technique Making Good Software, bonnes pratiques du développement logiciel Evènements de notre communauté en France et à l&#8217;étranger Sun fait évoluer sa certification programmer RIA [...]]]></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>RIA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#GChartpourGWT">GChart 2.5 pour GWT</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#jBPMestdisponible">jBPM 4.0 est disponible</a></li><li><a
href="http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#AvezvousbesoindunESB">Avez-vous besoin d&#8217;un ESB ?</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#MakingGoodSoftwarebonnespratiq">Making Good Software, bonnes pratiques du développement logiciel</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/#Sunfaitvoluersacertificationpr">Sun fait évoluer sa certification <em>programmer</em></a></li></ul><h3><a
name="RIA"></a>RIA</h3><h4><a
name="GChartpourGWT"></a>GChart 2.5 pour GWT</h4><p>Afficher des résultats sous forme d&#8217;histogramme ou de camembert se résume pour  bon nombre de projets Java à l&#8217;import de <a
href="http://www.jfree.org/jfreechart/" title="JFreeChart" >JFreeChart</a>, la librairie de référence pour faire des diagrammes en Java (<a
href="http://www.jfree.org/jfreechart/jfreechart-1.0.13-demo.jnlp" title="dmo" >démo</a>).</p><p>Pour les projets GWT, une autre API fait beaucoup parler d&#8217;elle en ce moment (entre autres sur <a
href="http://ajaxian.com/archives/gchart-25-faster-sharper-canvas-rendered-pie-line-and-area-charts" title="Ajaxian" >Ajaxian</a> et <a
href="http://www.ongwt.com/post/2009/07/03/Client-side-GChart-25" title="onGWT" >onGWT</a>) et cette API est <a
href="http://code.google.com/p/gchart/" title="GChart 25" >GChart 2.5</a>. Son objectif est simple : réaliser rapidement de beaux graphiques.</p><p>Une <a
href="http://gchart.googlecode.com/svn/trunk/live-demo/v2_5/com.googlecode.gchart.gchartdemoapp.GChartDemoApp/GChartDemoApp.html" title="démo" >démo</a> nous montre les capacités de l&#8217;outil en termes de rapidité d&#8217;affichage. Le code source de chaque exemple est aussi disponible (<a
href="http://gchart.googlecode.com/svn/trunk/live-demo/v2_5/com.googlecode.gchart.gchartdemoapp.GChartDemoApp/GChartExample11.txt" title="source" >source</a> du graphique <em>Estimated Future Oil Prices</em>).</p><p>Pour la release note technique (plus de compatibilité GWT 1.4, navigateurs testés, objets et méthodes dépréciés, bugfix&#8230;), tout se trouve sur cette <a
href="http://gchart.googlecode.com/svn/trunk/doc/com/googlecode/gchart/client/doc-files/gchart2p5features.html" title="page" >page</a>. Il ne reste plus qu&#8217;à <a
href="http://code.google.com/p/gchart/downloads/list" title="tester" >tester</a> ! Les retours d&#8217;expériences sont bienvenus dans les commentaires.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="jBPMestdisponible"></a>jBPM 4.0 est disponible</h4><p>Tom Baeyens <a
href="http://processdevelopments.blogspot.com/2009/07/jbpm-40-is-out.html" title="annonce sur son blog" >annonce sur son blog</a> la disponibilité de la version finale de jBPM 4.0 respectant ainsi le <a
href="http://blog.xebia.fr/2009/04/06/revue-de-presse-xebia-103/#LecalendrierseconfirmepourjBPM" title="calendrier prvu" >calendrier prévu</a>.</p><p>jBPM n&#8217;avait pas connu d&#8217;évolution majeure depuis 2005, cette nouvelle version constitue donc un évènement majeur pour les utilisateurs de jBPM. Les nouveautés apportées sont importantes :</p><ul><li>Nouvelle version du plugin Eclipse (GPD) permettant la définition graphique de processus suivant la notation <a
href="http://fr.wikipedia.org/wiki/Business_Process_Modeling_Notation" title="BPMN" >BPMN</a></li><li>Introduction de <a
href="http://docs.jboss.com/jbpm/pvm/article/" title="JBoss PVM" >JBoss PVM</a> (Process Virtual Machine), un moteur de <em>workflow</em> générique utilisé par jBPM pour l&#8217;implémentation des différents langages de définition de processus qu&#8217;il propose (jPDL, BPEL et Pageflow)</li><li>Refonte des schémas de base de données utilisés pour les rendre plus évolutifs</li><li>Intégration native à Spring</li><li>Amélioration des performances</li><li>Simplification de l&#8217;installation</li></ul><p>Cette nouvelle version est d&#8217;ores et déjà disponible sur le <a
href="http://repository.jboss.com/maven2/org/jbpm/jbpm4/" title="repository Maven de JBoss" ><em>repository</em> Maven de JBoss</a>. Par ailleurs, l&#8217;ensemble des apports de jBPM 4 seront passés en revue lors du <a
href="http://www.jbossworld.com/" title="JBoss World 2009" >JBoss World 2009</a> en septembre prochain, ainsi qu&#8217;à <a
href="http://www.devoxx.com/display/DV09/jBPM4+in+Action" title="Devoxx 09" >Devoxx 09</a> en novembre.</p><h4><a
name="AvezvousbesoindunESB"></a>Avez-vous besoin d&#8217;un ESB ?</h4><p>Ross Mason, <a
href="http://www.mulesource.org/display/COMMUNITY/Home" title="fondateur de MuleSource" >fondateur de MuleSource</a> a publié sur son blog <a
href="http://blog.mulesource.org/2009/07/to-esb-or-not-to-esb" title="une liste de points à vérifier avant de mettre en place un ESB" >une liste de points à vérifier avant de mettre en place un ESB</a>. L&#8217;article, au titre plutôt racoleur (To ESB or not to ESB), à fait du bruit sur Twitter. D&#8217;ailleurs, en aparté, pour avoir nous-mêmes fait circuler ce lien, nous avons été surpris d&#8217;avoir été répondu par un certain <a
href="http://twitter.com/shakesp/status/2454701331" title="shakesp" >@shakesp</a>.</p><p>Pour en revenir au cœur du sujet, les points qui nous semblent intéressants sont simples à retenir :</p><ul><li>Commencez à penser à un ESB pour intégrer 3 applications, à plusieurs ESB si vous en avez plus que 10</li><li>Avez-vous absolument besoin de plusieurs protocoles de communications ?</li><li>Avez-vous de réels besoins d&#8217;intégration ? Découpage, routing, agrégation de messages &#8230;</li></ul><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="MakingGoodSoftwarebonnespratiq"></a>Making Good Software, bonnes pratiques du développement logiciel</h4><p>Une fois n&#8217;est pas coutume, nous vous proposons cette semaine la découverte d&#8217;un blog tout récemment ajouté dans nos RSS : <a
href="http://www.makinggoodsoftware.com" title="Making Good Software" >Making Good Software</a>. Ce blog établit des listes de bonnes (et mauvaises) pratiques du développement logiciel. Non pas que son contenu soit extraordinaire, puisque vous en connaissez probablement déjà les plus gros points, mais il a le mérite de les rappeler : toute ressemblance avec personnes existantes ou ayant existé ne suivant pas ces règles ne saurait être que fortuite <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p><p>Dans un premier article, une liste des <a
href="http://www.makinggoodsoftware.com/2009/07/07/5-top-non-technical-mistakes-made-by-programmers/" title="5 erreurs non techniques" >5 erreurs non techniques</a> les plus répandues chez les développeurs, dont nos 2 préférés qui vous feront probablement penser à quelqu&#8217;un de votre open-space:</p><ul><li>Ego surdimensionné : &nbsp;&raquo; je suis le meilleur développeur au monde, et ça me permet d&#8217;avoir toujours raison &nbsp;&raquo; (ou la fameuse conversation à sens unique)</li><li>Manque de discipline : &nbsp;&raquo; j&#8217;essaye de tout faire en même temps, mais je ne termine jamais rien &nbsp;&raquo; (définition de <em>done</em> plus que douteuse)</li></ul><p>Un autre article vous donne une liste de <a
href="http://www.makinggoodsoftware.com/2009/06/04/10-commandments-for-creating-good-code/" title="10 points  suivre pour crire du bon code" >10 points à suivre pour écrire du bon code</a> :</p><ul><li>Factorisez votre code, pour simplifier la correction d&#8217;anomalies et le refactoring</li><li>Ecrivez des méthodes les plus courtes possibles</li><li>Travaillez le nom des vos objets, variables et méthodes, il s&#8217;agit de la meilleure des documentations</li><li>Une seule responsabilité par classe,</li><li>Travaillez l&#8217;organisation de votre code, par groupes physiques de fichiers et groupes logiques de fonctions</li><li>Faites des tests unitaires, quand vous aurez fini, faites-en encore plus <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></li><li>Refactorez le plus tôt et le plus souvent possible</li><li>Auto-documentez votre code</li><li>Privilégiez le code par interface</li><li>Faites des revues de code régulières</li></ul><p>Dans un autre article l&#8217;auteur décrit une matrice permettant de <a
href="http://www.makinggoodsoftware.com/2009/06/30/types-of-code-how-to-rate-your-code-from-a-to-f/" title="noter votre code" >noter votre code</a> en fonction de sa simplicité et de son extensibilité.</p><p>Et pour finir, histoire de ne pas commenter l&#8217;ensemble des billets du blog, les <a
href="http://www.makinggoodsoftware.com/2009/06/14/7-steps-to-fix-an-error/" title="7 tapes pour corriger un bug" >7 étapes pour corriger un bug</a> : de la recherche de l&#8217;erreur, à l&#8217;analyse des dommages collatéraux.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="Sunfaitvoluersacertificationpr"></a>Sun fait évoluer sa certification <em>programmer</em></h4><p>Sun  teste  une nouvelle version de sa certification SCJP (Sun Certified Java Programmer). La grosse nouveauté de cette révision : l&#8217;examen contiendra dorénavant une partie programmation. Cette certification, que certains appellent &#8216;pensez comme un compilateur Java&#8217; évolue donc pour adopter une approche plus pragmatique.</p><ul><li>Les demandes d&#8217; <a
href="https://dct.sun.com/dct/forms/reg_us_2206_429_0.jsp" title="inscription (gratuites) aux examens <em>beta</em> sont ouvertes&nbsp;&raquo; >inscription (gratuites) aux examens <em>beta</em> sont ouvertes</a> pour cette nouvelle certification , Sun Java Programmer Plus Certification de son petit nom, la sélection des candidats aura lieu ce 22 juillet</li><li>Discussions sur Java Ranch : <a
href="http://www.coderanch.com/t/452870/Programmer-Certification-SCJP/certification/New-Sun-Java-Programmer-Plus" title="New Sun Java Programmer Plus Certification" >New Sun Java Programmer Plus Certification</a>, <a
href="http://www.coderanch.com/t/452410/Programmer-Certification-SCJP/certification/Sun-Java-Programmer-Plus-Certification" title="SCJP vs SJPPC" >SCJP vs SJPPC</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/07/13/revue-de-presse-xebia-117/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/</link> <comments>http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#comments</comments> <pubDate>Mon, 29 Jun 2009 16:32:10 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Atlassian]]></category> <category><![CDATA[CEP]]></category> <category><![CDATA[Complex Event Processing]]></category> <category><![CDATA[Eclipse]]></category> <category><![CDATA[Eclipse Galileo]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[jazoon]]></category> <category><![CDATA[JMX 2]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[SpringSource Slices]]></category> <category><![CDATA[StreamBase]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2449</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII StreamBase lie le Complex Event Processing à Twitter Atlassian Summit : le présent et l&#8217;avenir des outils Atlassian Le coin de la technique Sortie d&#8217;Eclipse Galileo Des applications Web modulaires avec SpringSource Slices Que devient JMX 2 ? Evènements de [...]]]></description> <content:encoded><![CDATA[<p><img
src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" style="margin: 1em 1em 1em 1em; float: right;" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#StreamBaselieleComplexEventPro">StreamBase lie le Complex Event Processing à Twitter</a></li><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#AtlassianSummitleprsentetlaven">Atlassian Summit : le présent et l&#8217;avenir des outils Atlassian</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#SortiedEclipseGalileo">Sortie d&#8217;Eclipse Galileo</a></li><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#DesapplicationsWebmodulairesav">Des applications Web modulaires avec SpringSource Slices</a></li><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#QuedevientJMX">Que devient JMX 2 ?</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/#RetoursurlaconfrenceJazoon">Retour sur la conférence Jazoon</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="StreamBaselieleComplexEventPro"></a>StreamBase lie le Complex Event Processing à Twitter</h4><p><a
href="http://www.streambase.com/">StreamBase</a> est un éditeur qui fournit une solution de <a
href="http://en.wikipedia.org/wiki/Complex_event_processing" title="Complex Event Processing (CEP)" ><em>Complex Event Processing</em> (CEP)</a> très populaire dans le monde de la finance. Il s&#8217;agit d&#8217;un <em>middleware</em> capable d&#8217;analyser un flux de messages en temps réel pour y reconnaître des évènements complexes.</p><p>Dans <a
href="http://www.streambase.com/9bd00b4c-a8b1-4260-9751-65d5abad13c5/press-release-detail.htm" title="un communique de presse" >un communiqué de presse</a>, l&#8217;entreprise annonce proposer un connecteur <a
href="http://www.twitter.com">Twitter</a> pour sa solution de CEP. Il devient ainsi possible pour les systèmes d&#8217;information du monde de la finance d&#8217;analyser les messages Twitter pour en extraire un sentiment global en temps réel pouvant être utilisé dans un système de <em>trading</em> ou d&#8217;analyse <em>marketing</em>.</p><p>John Davies, directeur technique d&#8217;une société américaine spécialisée dans ce type de traitements financiers, <a
href="http://www.theserverside.com/news/thread.tss?thread_id=55060" title="analyse cette annonce" >analyse cette annonce</a> et avoue qu&#8217;après avoir été sceptique quant à cette idée au premier abord, il y voit désormais une opportunité d&#8217;améliorer la réactivité des systèmes par rapport à l&#8217;utilisation de simples flux Reuteurs apportant l&#8217;information plus tardivement.</p><p>Ce type d&#8217;annonce permet surtout de réaliser le potentiel de la technologie CEP appliquée à l&#8217;exploitation de sources diverses provenant de l&#8217;intérieur comme de l&#8217;extérieur du système d&#8217;information de l&#8217;entreprise.</p><h4><a
name="AtlassianSummitleprsentetlaven"></a>Atlassian Summit : le présent et l&#8217;avenir des outils Atlassian</h4><p>Au début du mois de juin s&#8217;est déroulé l&#8217;<a
href="http://www.atlassian.com/summit/presentations/" title="Atlassian Summit" >Atlassian Summit</a> à San Fransico. Il s&#8217;agissait de la première conférence du genre pour l&#8217;éditeur et a pu profiter de l&#8217;occasion pour présenter toutes ses nouveautés à venir et revenir sur les dernières évolutions de ses produits. L&#8217;ensemble des sessions de cette conférence sont maintenant <a
href="http://www.atlassian.com/summit/presentations/keynote.jsp" title="accessibles librement en ligne" >accessibles librement en ligne</a>.</p><p>Nous nous attarderons principalement sur le <a
href="http://www.atlassian.com/summit/presentations/keynote.jsp" title="keynote de Mike CannonBrookes" >keynote de Mike Cannon-Brookes</a>, CEO et co-fondateur d&#8217;Atlassian, qui résume la majorité des éléments à retenir.</p><p><strong>Confluence</strong></p><p>La version 3.0 de <a
href="http://www.atlassian.com/software/confluence/" title="Confluence" >Confluence</a> a été finalisée il y a peu. Elle apporte principalement :</p><ul><li>Ajout d&#8217;un <em>macro browser</em> permettant de naviguer facilement parmi les macros disponibles</li><li>Apport de nombreuses extensions de nature &laquo;&nbsp;sociale&nbsp;&raquo; avec une gestion de réseaux, un <em>microblogging</em> de type Twitter, un espace personnel repensé</li><li>Gain significatif de performance lors de la navigation et de l&#8217;édition</li></ul><p><strong>Jira et GreenHopper</strong></p><p>Jira 4.0 n&#8217;est pas encore finalisé, mais est dors et déjà <a
href="http://www.atlassian.com/software/jira/beta/" title="disponible en version beta" >disponible en version beta</a>. Il apporte quelques nouveautés intéressantes&nbsp;:</p><ul><li>Refonte du <em>dashboard</em> de Jira. Il devient largement personnalisable grâce à l&#8217;ajout de <em>gadgets</em> à l&#8217;image d&#8217;<a
href="http://www.igoogle.fr" title="iGoogle" >iGoogle</a></li><li>Introduction du <em>Jira Query Language</em> (JQL) permettant de faire des recherches avancées simplement grâce à un système de complétion. Les résultats des requêtes peuvent alors être ajoutés au <em>dashboard</em></li><li>Le plugin GreenHopper, permettant d&#8217;exploiter le moteur de tâches de Jira pour gérer un projet agile (gestion d&#8217;itérations, production de <em>burndown charts</em>, &#8230;), devient un produit Atlassian. L&#8217;éditeur en ayant annoncé l&#8217;acquisition lors du Summit.</li></ul><p><strong>Open Social</strong></p><p>La généralisation de l&#8217;utilisation de l&#8217;API <a
href="http://code.google.com/intl/fr/apis/opensocial/" title="Open Social" >Open Social</a> au sein des produits Atlassian est probablement ce qui restera le plus marquant. Ainsi la plupart des produits Atlassian proposeront des gadgets Open Social pouvant être intégrés à n&#8217;importe quel conteneur Web s&#8217;appuyant sur cette technologie.</p><p>Concrètement, il est alors possible d&#8217;intégrer un gadget Jira au sein de l&#8217;interface de Gmail afin de simplifier la saisie d&#8217;une nouvelle anomalie suite à la réception d&#8217;un mail décrivant un problème. De même, le <em>dashboard</em> de Jira 4.0 devenant un conteneur Open Social, il est possible d&#8217;intégrer un gadget indiquant l&#8217;état des derniers <em>builds</em> de Bamboo conjointement aux gadgets indiquant l&#8217;état des anomalies et tâches Jira actives. Open Social devient ainsi le vecteur d&#8217;intégration des produits Atlassian.</p><p><strong>Fisheye, Crucible et Eclipse Connector</strong></p><p><a
href="http://www.atlassian.com/software/fisheye/beta/" title="Fisheye 2.0" >Fisheye 2.0</a> et <a
href="http://www.atlassian.com/software/crucible/beta/" title="Crucible 20" >Crucible 2.0</a> ne sont également pas encore finalisés mais accessibles en beta. Ils apporteront tous deux une meilleure intégration à Jira, une interface utilisateur refondue et une vue permettant de visualiser l&#8217;activité des développeurs sur les différents projets.</p><p>Atlassian a également publié fin mai <a
href="http://blogs.atlassian.com/news/2009/05/atlassian_eclip.html" title="la version finale de lEclipse Connector" >la version finale de l&#8217;Eclipse Connector</a>, un plugin permettant d&#8217;intégrer certaines fonctionnalités des produits Atlassian au sein d&#8217;Eclipse :</p><ul><li>Jira est un <em>task repository</em> pour Mylyn, la gestion de tâches s&#8217;intègre donc à tous les niveaux dans l&#8217;IDE. Il est par exemple possible avec un clic d&#8217;ajouter, en pièce jointe de l&#8217;anomalie Jira, le <em>context</em> Mylyn et, dans un autre environnement, de le restituer d&#8217;un autre clic.</li><li>Une vue est dédiée à Bamboo et permet d&#8217;observer et d&#8217;interagir avec les <em>builds</em> du serveur d&#8217;intégration continue de l&#8217;éditeur</li><li>Il devient possible d&#8217;effectuer les <em>code reviews</em> Crucible directement depuis Eclipse</li><li>Il est possible de lancer l&#8217;affichage de la page Fisheye correspondant à un fichier spécifique par simple clic droit</li></ul><p>Ces fonctionnalités étaient déjà <a
href="http://confluence.atlassian.com/display/IDEPLUGIN/Atlassian+IntelliJ+Connector" title="disponibles pour IntelliJ" >disponibles pour IntelliJ</a>, elles le sont maintenant également pour l&#8217;IDE Java le plus populaire.</p><p>Atlassian continue de se montrer très innovant en apportant un lot intéressant de nouvelles fonctionnalités sur ses produits déjà très populaires. L&#8217;acquisition de GreenHopper lui permet quant à elle de se positionner sur le créneau des applications de gestion de projets agiles que <a
href="http://studios.thoughtworks.com/" title="Thoughtworks Studios" >Thoughtworks Studios</a> commençait à investir avec <a
href="http://studios.thoughtworks.com/mingle-agile-project-management" title="Mingle" >Mingle</a>.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="SortiedEclipseGalileo"></a>Sortie d&#8217;Eclipse Galileo</h4><p>Comme <a
href="http://eclipsesource.com/blogs/2009/06/23/eclipse-osgi-galileo-and-release-trains/" title="chaque année depuis 2004" >chaque année depuis 2004</a>, fin juin sera marquée par la sortie d&#8217;une nouvelle version d&#8217;<a
href="http://www.eclipse.org/home/" title="Eclipse IDE" >Eclipse IDE</a>.</p><p>Après Callisto, Europa et Ganymède, voici venu <a
href="http://www.eclipse.org/galileo/" title="Galileo" >Galileo</a> (ou Eclipse 3.5).</p><p>Difficile de faire un résumé des <a
href="http://www.eclipse.org/org/press-release/20090624_galileo.php" title="24 millions de lignes de codes" >24 millions de lignes de codes</a> ni même de la <a
href="http://www.eclipse.org/galileo/projects.php" title="trentaine de projets" >trentaine de projets</a> qui le compose, cependant plusieurs nouvelles fonctionnalités ressortent. A signaler qu&#8217;un <a
href="http://eclipsesource.com/blogs/2009/06/24/eclipse-galileo-feature-top-10-list-number-1/" title="top 10 de ces nouveautés" >top 10 de ces nouveautés</a> a d&#8217;ailleurs été publié par <a
href="http://eclipsesource.com/blogs/author/irbull/" title="Ian Bull" >Ian Bull</a> sur le site d&#8217;<a
href="http://eclipsesource.com/blogs/" title="Eclipse Source" >Eclipse Source</a> (série de 10 billets).</p><p>On notera ainsi :</p><ul><li>Compatibilité avec Mac OS X (portage SWT vers Cocoa).</li><li>Memory Analyzer Tool (<a
href="http://eclipse.org/mat/" title="MAT" >MAT</a>), un outil d&#8217;analyse de <em>heap</em> (consommation, fuite mémoire &#8230;).</li><li>Mylyn (gestion de tâches, synchronisation&#8230;) qui n&#8217;est pas nouveau mais qui devient de plus en plus populaire avec le support entre autre de Jira.</li><li>XText qui permet la création de DSL (auto-complétion, coloration syntaxique &#8230;).</li><li>Rich Ajax Platform (<a
href="http://eclipse.org/rap/" title="RAP" >RAP</a>) qui permet de déployer son application en tant que WebApp.</li><li>SWT Browser qui gère le <a
href="http://eclipsesource.com/blogs/2009/06/16/eclipse-galileo-feature-top-10-list-number-9/" title="pont entre Java et Javascript dans les 2 sens" >pont entre Java et Javascript dans les 2 sens</a>.</li><li>Mylyn <a
href="http://wiki.eclipse.org/Mylyn/Incubator/WikiText" title="WikiText" >WikiText</a>, un éditeur de fichier wiki.</li><li>Plateforme (p2 avec update manager revu, target platform, deploy into self pour tester ses plugins &#8230;).</li></ul><p>Le téléchargement se passe par <a
href="http://www.eclipse.org/downloads/" title="ici" >ici</a> avec comme d&#8217;habitude plusieurs packages disponibles qui vont de la version <em>classique</em> à la version <em>Java</em>, <em>JEE</em> ou <em>RCP</em> sans oublier, pour les non javaistes, les versions <em>C++</em> et <em>PHP</em>. D&#8217;autres packages ciblant le <em>reporting</em> ou la <em>modélisation</em> sont aussi disponibles.</p><p>Et bien sûr, rendez-vous est pris l&#8217;année prochaine même date (par <a
href="http://eclipsesource.com/blogs/2009/06/23/eclipse-osgi-galileo-and-release-trains/" title="Chris Aniszczyk" >Chris Aniszczyk</a>) pour la <em>release</em> d&#8217;Eclipse 3.6 qui se nommera Helios !</p><h4><a
name="DesapplicationsWebmodulairesav"></a>Des applications Web modulaires avec SpringSource Slices</h4><p>Rob Harrop <a
href="http://blog.springsource.com/2009/06/22/modular-web-applications-with-springsource-slices/" title="a prsent" >a présenté</a> une ébauche d&#8217;un nouveau projet SpringSource appelé Slices.</p><p>Il s&#8217;agit d&#8217;un framework basé sur <a
href="http://www.springsource.org/dmserver" title="dm Server 20" >dm Server 2.0</a> et permettant le développement d&#8217;applications Web modulaires. Cette modularité est bien sûr offerte par OSGi, ce qui lui en apporte les caractéristiques particulières : gestion de dépendance versionnées et chargement et arrêt des modules à chaud.</p><p>Concrètement une application utilisant Slices offrira un module Web <em>host</em> et un ensemble de modules fils appelés <em>slices</em>. Chaque module apporte du code applicatif et un ensemble de ressources Web (CSS, JavaScript, JSP, images). Le framework offre alors une couche d&#8217;abstraction aux <em>slices</em> leur permettant de posséder leur propre session et <em>servlet mappings</em>. Il offre également l&#8217;infrastructure nécessaire pour rendre les ressources du module <em>host</em> visibles par tous les autres et pour permettre aux modules de se détecter les uns les autres et ainsi d&#8217;opérer des altérations visuelles et comportementales en conséquence.</p><p>Dans son état actuel, Slices n&#8217;offre qu&#8217;une infrastructure de base, la version finale devrait apporter en supplément :</p><ul><li>Un framework de composition d&#8217;UI. On imagine que celui-ci apportera des tags permettant l&#8217;affichage conditionnel en fonction de la présence ou non de certains modules. Cette fonctionnalité est actuellement gérée manuellement par des EL dans l&#8217;application d&#8217;exemple</li><li>Le support des <em>servlet filters</em></li><li>Une intégration à <a
href="http://tiles.apache.org/" title="Tiles 2" >Tiles 2</a></li><li>L&#8217;intégration à <a
href="http://www.springsource.com/products/sts" title="SpringSource Tool Suite" >SpringSource Tool Suite</a></li></ul><p>Slices apportera donc de nouvelles possibilités en apportant la modularité jusqu&#8217;à la couche Web. Ainsi, parallèlement à son offre tc Server, résolument orienté vers le marché actuel, SpringSource continue d&#8217;innover en apportant des fonctionnalités supplémentaires à son offre modulaire centrée autour de dm Server.</p><h4><a
name="QuedevientJMX"></a>Que devient JMX 2 ?</h4><p>JMX est une API standard Java permettant le <em>monitoring</em> et le <em>management</em> d&#8217;applications, elle est définie par la <a
href="http://www.jcp.org/en/jsr/detail?id=003" title="JSR-3" >JSR-3</a> et étendue par la <a
href="http://www.jcp.org/en/jsr/detail?id=160" title="JSR-160 (Remote JMX)" >JSR-160 (Remote JMX)</a>. Depuis sa création en 1998, l&#8217;API a évoluée au fil des <em>maintenance releases</em> de sa JSR, incrémentant au passage sa version depuis 1.0 jusqu&#8217;à 1.4. Au départ disponible sous forme de librairie externe, JMX a finalement été intégré au JDK 5.0 <a
href="http://marxsoftware.blogspot.com/2008/01/java-se-6-and-jmx.html" title="puis mis  jour dans le JDK 60" >puis mis à jour dans le JDK 6.0</a>, fin 2006, pour s&#8217;aligner avec sa dernière version.</p><p>La prochaine évolution majeure de JMX est la version 2.0, cette fois-ci définie dans une nouvelle JSR, la <a
href="http://www.jcp.org/en/jsr/detail?id=255" title="JSR-255 (JMX 2.0)" >JSR-255 (JMX 2.0)</a>. Actuellement en statut <em>early draft review</em>, il est dors et déjà possible de se rendre compte des chantiers prévus :</p><ul><li>Des <em>namespaces</em> permettant de préfixer les noms des MBeans afin d&#8217;offrir une meilleure scalabilité lors que de très nombreux MBeans sont manipulés.</li><li>Le <em>cascading</em> permettant de fédérer un ensemble de MBeans situés sur des serveurs différents.</li><li>Définition de MBeans standards par annotations (<code>@MBean</code>, <code>@ManagedAttribute</code> et <code>@ManagedOperation</code>) et de leur injecter des ressources telles qu&#8217;un <code>MBeanServer</code> ou un <code>ObjectName</code>. Ce principe de définition de MBeans par annotations est calqué sur ce que <a
href="http://static.springframework.org/spring/docs/2.5.x/reference/jmx.html" title="Spring permet actuellement" >Spring permet actuellement</a>.</li><li>Un nouveau langage de requête permettant d&#8217;accéder facilement à tous les MBeans dont les propriétés se conforment à certains prédicats.</li></ul><p>JMX 2.0 était initialement prévue pour être intégrée au prochain JDK, l&#8217;API avait fait son apparition au sein de la <a
href="http://download.java.net/jdk7/docs/api/javax/management/package-summary.html" title="Javadoc des previews du JDK 7" >Javadoc des previews du JDK 7</a> mais restait absent de <a
href="http://openjdk.java.net/projects/jdk7/features/" title="sa liste de features" >sa liste de features</a>. Eamonn McManus a clarifié cette situation <a
href="http://weblogs.java.net/blog/emcmanus/archive/2009/06/jsr_255_jmx_api.html" title="en annonant sur son blog" >en annonçant sur son blog</a> que JMX 2.0 ne serait pas intégré au JDK 7 tel qu&#8217;initialement prévu, qu&#8217;il n&#8217;était pas pour autant annulé mais reporté &#8230; au JDK 8. L&#8217;officialisation de ce report est une mauvaise nouvelle, car cette nouvelle mouture de JMX serait arrivée à temps pour apporter un renouveau à cette API, qui bien que très puissante, souffre parfois de lourdeurs à l&#8217;usage.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="RetoursurlaconfrenceJazoon"></a>Retour sur la conférence Jazoon</h4><p>La semaine dernière se tenait à Zürich la conférence <em>où les Javaistes se rencontrent</em>. Xebia était présent à cette conférence et en a publié des résumés quotidiens :</p><ul><li>Jour 1 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-1-jee6-et-glassfish-v3/" title="JEE6 et Glassfish v3" >JEE6 et Glassfish v3</a></li><li>Jour 1 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-1-groovy/" title="Groovy" >Groovy</a></li><li>Jour 1 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-1-developpement-mobile/" title="Dveloppement mobile" >Développement mobile</a></li><li>Jour 1 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-1-prospective/" title="Prospective" >Prospective</a></li><li>Jour 2 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-2-jdk-7/" title="JDK 7" >JDK 7</a></li><li>Jour 2 : <a
href="http://blog.xebia.fr/2009/06/24/jazoon-jour-2-ddd-et-value-objects/" title="DDD et Value Objects" >DDD et Value Objects</a></li><li>Jour 2 : <a
href="http://blog.xebia.fr/2009/06/25/jazoon-jour-2-javafx/" title="Java FX" >Java FX</a></li><li>Jour 3 : <a
href="http://blog.xebia.fr/2009/06/26/jazoon-jour-3-un-arbre-est-tombe/" title="Un arbre est tomb" >Un arbre est tombé</a></li><li>Jour 3 : <a
href="http://blog.xebia.fr/2009/06/26/jazoon-jour-3-les-secrets-des-programmeurs-rockstars/" title="Les secrets des programmeurs Rockstars" >Les secrets des programmeurs Rockstars</a></li><li>Jour 3 : <a
href="http://blog.xebia.fr/2009/06/28/jazoon-jour-3-hibernate-search/" title="Hibernate Search" >Hibernate Search</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/06/29/revue-de-presse-xebia-115/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>SOA : Du composant au service : La découvrabilité</title><link>http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/</link> <comments>http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#comments</comments> <pubDate>Fri, 12 Jun 2009 07:00:45 +0000</pubDate> <dc:creator>Christophe Heubès</dc:creator> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2196</guid> <description><![CDATA[Comme son nom le suggère, l&#8217;élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question &#171;&#160;Qu&#8217;est-ce qu&#8217;un service ?&#160;&#187;. Ce sujet débouche invariablement sur, au choix : Un blanc ; [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service-150x150.png" alt="composant-service" title="composant-service" width="150" height="150" style="margin: 1em 1em 1em 1em; float: right;" /></a><br
/> Comme son nom le suggère, l&#8217;élément clé de SOA <em>(Service Oriented Architecture)</em> est le <strong>Service</strong>. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question <em><strong>&laquo;&nbsp;Qu&#8217;est-ce qu&#8217;un service ?&nbsp;&raquo;</strong></em>. Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée <em>(ou un débat stérile)</em>.</p><p>On pourrait proposer la définition suivante : <em>&laquo;&nbsp;Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d&#8217;un domaine métier&nbsp;&raquo;</em>. Malheureusement, les définitions aussi courtes <em>(bien qu&#8217;exactes)</em> sont nécessairement incomplètes et amènent un florilège de questions.</p><p>Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service&nbsp;:</p><ul><li><a
href="http://blog.xebia.fr/2009/03/04/soa-du-composant-au-service-le-contrat-standardise/#more-1560">Contrat standardisé</a> : L&#8217;ensemble des services d&#8217;un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.</li><li><a
href="http://blog.xebia.fr/2009/03/19/soa-du-composant-au-service-le-couplage-lache/#more-1633">Couplage lâche</a> : Le contrat d&#8217;un service doit imposer un couplage lâche de ses clients.</li><li><a
href="http://blog.xebia.fr/2009/04/03/soa-du-composant-au-service-labstraction/#more-1706">Abstraction</a> : Le contrat d&#8217;un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.</li><li><a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/#more-1780">Réutilisabilité</a> : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.</li><li><a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852">Autonomie</a> : Un service doit exercer un contrôle fort sur son environnement d&#8217;exécution sous-jacent. Plus ce contrôle est fort, plus l&#8217;exécution d&#8217;un service est prédictible.</li><li><a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134">Stateless</a> <em>(sans état)</em> : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d&#8217;état quand cela est nécessaire.</li><li><a
href="http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#more-2196">Découvrabilité</a> : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.</li><li><a
href="http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#more-2623">Composabilité</a> : Un service doit être conçu de façon à participer à des compositions de services.</li></ul><p>Ces 8 aspects sont issus du livre &laquo;&nbsp;<a
href="http://www.amazon.com/Principles-Service-Prentice-Service-Oriented-Computing/dp/0132344823">SOA Principles of Service Design</a>&nbsp;&raquo; de Thomas Erl, également auteur du site <a
href="http://www.soaprinciples.com/">SOA Principles</a>.</p><p>Dans ce billet, nous nous attarderons sur la notion de &laquo;&nbsp;<a
href="http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#more-2196">découvrabilité</a>&laquo;&nbsp;.</p><p>Nous l&#8217;avons dit et répété tout au long cette série, la <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="rutilisabilit des services" >réutilisabilité des services</a> constitue une des pierres angulaires de la mise en œuvre d&#8217;une architecture orientée service. En effet, la mise en œuvre d&#8217;une SOA vise, entre autres, à <strong>éviter le gaspillage</strong> des ressources en éliminant les redondances inhérentes au modèle en silo. D&#8217;autre part, la réutilisation est une condition première de l&#8217;<strong>agilisation du SI</strong> indispensable à la <strong>réduction du time-to-market</strong>, principal élément de ROI des SOA.</p><p>Le positionnement des <strong>services comme ressources réutilisables</strong> au sein de l&#8217;entreprise passe par :</p><ul><li>La <strong>prédictibilité des services</strong> proposés <em>(ce qui implique que les services soient <a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852" title="autonomes">autonomes</a> et <a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134/" title="sans état" >sans état</a>)</em>.</li><li>La <strong>découvrabilité des services</strong> existants.</li></ul><p>Écartons tout de suite le mythe de la découvrabilité au runtime qui reste un espoir inabouti <em>(ou une promesse non tenue)</em> : Un service répondant aux besoins et contraintes d&#8217;un consommateur potentiel ne peut être identifié que par un acteur humain. Nous parlons donc bien ici de <strong>découverte des services en phase de conception</strong>.</p><p>Cette découvrabilité des services existants passe par la mise en œuvre d&#8217;un <strong>repository de services</strong> qui vient outiller l&#8217;inventaire des services disponibles. Ce repository stocke l&#8217;ensemble des métadonnées nécessaires à :</p><ul><li>La recherche des services de l&#8217;inventaire.</li><li>La récupération de l&#8217;ensemble des artefacts relatifs aux services de l&#8217;inventaire <em>(Spécifications, SLAs, Policies, Schémas XML, WSDL, Interfaces, &#8230;)</em>.</li></ul><p><em>Remarque : Attention à ne pas confondre le repository de services avec un registre de services qui a lui la responsabilité de référencer pour le runtime les endpoints (points d&#8217;accès physiques) des services déployés.</em></p><p>Ainsi, le concepteur d&#8217;un consommateur de service <em>(Service composé, application composite, orchestration, processus, &#8230;)</em> pourra s&#8217;appuyer sur ce repository de la façon suivante :</p><ul><li>Le concepteur recherche dans le repository un service possédant les fonctionnalités dont il a besoin <em>(1)</em>.</li><li>En se basant sur les métadonnées contenues dans le repository, le concepteur est capable de découvrir et d&#8217;identifier un service potentiellement capable de répondre à ces besoins <em>(2)</em>.</li><li>le concepteur peut alors accéder au <a
href="http://blog.xebia.fr/2009/03/04/soa-du-composant-au-service-le-contrat-standardise/" title="contrat du service" >contrat du service</a> : syntaxique, sémantique et de niveau de service <em>(3)</em>. il est alors capable, en se basant sur les différents artefacts constituant le contrat du service <em>(spécifications, SLAs, policies, syntaxe,&nbsp;&#8230;)</em>, de déterminer si le service découvert correspond bien à ces attentes.</li></ul><div
align="center"> <img
src="http://blog.xebia.fr/wp-content/uploads/2009/06/decouvrabilite.png" border="0" alt="" /></div><p>Afin qu&#8217;il remplisse au mieux son rôle, les fonctionnalités attendues d&#8217;un repository de service sont :</p><ul><li>Le <strong>catalogage</strong> des services, de leurs métadonnées et des artéfacts relatifs à ces services.</li><li>La <strong>validation</strong> des services et artéfacts catalogués vis-à-vis des standards de l&#8217;entreprise.</li><li>La <strong>gestion des dépendances</strong> entre les services et les artéfacts.</li><li>Le <strong>versioning</strong> des services et de leurs différents artéfacts.</li><li>La <strong>gouvernance de la publication</strong> au sein du repository.</li><li>Le support d&#8217;un large panel de type d&#8217;artéfacts.</li></ul><p>Le repository de services constitue donc un outillage indispensable à la découvrabilité de l&#8217;inventaire des services. Il permet une gestion centralisée de l&#8217;ensemble des données relatives aux services, devenant ainsi un des éléments centraux autour desquels s&#8217;articulera la gouvernance SOA.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/</link> <comments>http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#comments</comments> <pubDate>Mon, 08 Jun 2009 17:00:29 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[CEP]]></category> <category><![CDATA[Complex Event Processing]]></category> <category><![CDATA[Flash Builder]]></category> <category><![CDATA[Flash Catalyst]]></category> <category><![CDATA[G1]]></category> <category><![CDATA[Google Wave]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JavaFX]]></category> <category><![CDATA[Oracle]]></category> <category><![CDATA[Project Coin]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[Silver]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Sun]]></category> <category><![CDATA[Tibco]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2170</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Tibco dans les nuages avec Silver Oracle s&#8217;investit dans JavaFx G1 payant : une simple incompréhension RIA Sortie beta de Flash Builder 4 et de Flash Catalyst Le coin de la technique Project Coin (Com)prendre la vague Google Wave Actualité [...]]]></description> <content:encoded><![CDATA[<p><img
style="margin: 1em 1em 1em 1em; float: right;" src="http://blog.xebia.fr/wp-content/uploads/2007/06/revuedepresse.png" alt="Revue de Presse Xebia" /><br
/> <em>La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia.</em></p><p><strong>Actualité éditeurs / SSII</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#TibcodanslesnuagesavecSilver">Tibco dans les nuages avec Silver</a></li><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#OraclesinvestitdansJavaFx">Oracle s&#8217;investit dans JavaFx</a></li><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#Gpayantunesimpleincomprhension">G1 payant : une simple incompréhension</a></li></ul><p><strong>RIA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#SortiebetadeFlashBuilderetdeFl">Sortie beta de Flash Builder 4 et de Flash Catalyst</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#ProjectCoin">Project Coin</a></li><li><a
href="http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/#ComprendrelavagueGoogleWave">(Com)prendre la vague Google Wave</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="TibcodanslesnuagesavecSilver"></a>Tibco dans les nuages avec Silver</h4><p><a
title="Tibco a annonc la semaine dernire la sortie prochaine de Silver" href="http://www.tibco.com/company/news/releases/2009/press967.jsp">Tibco a annoncé la semaine dernière la sortie prochaine de Silver</a>, une plate-forme de Cloud Computing en mode PaaS <em>(Platform as a Service)</em>. Cette offre entrera en phase de beta privée d&#8217;ici la fin du mois de juin et ne sera disponible qu&#8217;en 2010.</p><p>Dans un premier temps, Tibco a fait le choix d&#8217;adosser <a
title="Silver" href="http://silver.tibco.com">Silver</a> sur <a
title="Amazon EC2 &lt;em&gt;(Elastic Compute Cloud)&lt;/em&gt;" href="http://aws.amazon.com/ec2/">Amazon EC2 <em>(Elastic Compute Cloud)</em></a> pour la partie infrastructure. L&#8217;objectif à terme est d&#8217;offrir une intégration avec un large panel des fournisseurs de plates-formes de Cloud Computing <em>(y compris des plates-formes maisons)</em> et ainsi de positionner Silver comme une plate-forme d&#8217;exécution universelle agnostique vis-à-vis de l&#8217;infrastructure qui la supporte.<br
/> Dans ses premières versions, Silver proposera des conteneurs pour l&#8217;exécution de composants Java, Spring, POJO, et Ruby et d&#8217;ici peu, Silver supportera également Python, Perl, C, C++, et .Net. Tibco adressera ainsi un panel très large de technologies de développement.</p><p>La plate-forme Silver vise à outiller cette infrastructure de Cloud Computing. Pour ce faire, Tibco capitalise sur <a
title="son offre SOA ActiveMatrix" href="http://www.tibco.com/software/soa/default.jsp">son offre SOA ActiveMatrix</a> afin de proposer :</p><ul><li>Un modèle de composition et d&#8217;orchestration de services basé sur <a
title="SCA &lt;em&gt;(Service Component Architecture)&lt;/em&gt;" href="http://blog.xebia.fr/2007/04/11/introduction-a-sca-service-component-architecture/">SCA <em>(Service Component Architecture)</em></a> : <em>Tibco ActiveMatrix BusinessWorks</em>.</li><li>Un <em>backbone</em> d&#8217;intégration, tiers d&#8217;inter-médiation supportant la communication et l&#8217;échange entre services au travers d&#8217;un large choix de protocoles de transport : <em>Tibco ActiveMatrix Service Bus</em>.</li><li>La supervision et la gestion des performances et des SLAs des services déployés : <em>Tibco ActiveMatrix Service Performance Manager</em>.</li><li>Un système de gouvernance pour la gestion du cycle de vie des services et de leurs règles d&#8217;utilisation <em>(policies)</em> : <em>Tibco ActiveMatrix Lifecycle Governance Framework</em>.</li></ul><p>D&#8217;autre part, Silver tire largement partie du savoir faire de Tibco dans le domaine du CEP <em>(Complex Event Processing)</em> : <em>Tibco BusinessEvents</em>.<br
/> La combinaison des capacités de supervision des SLAs <em>(et plus largement des performances)</em> et des capacités de CEP de la plate-forme permet d&#8217;automatiser le provisionnement de l&#8217;infrastructure de Cloud Computing.<br
/> C&#8217;est là la grande promesse de Silver : proposer une plate-forme capable d&#8217;allouer <em>(ou de désallouer)</em> automatiquement des ressources à des services ou à des applications au sein de l&#8217;infrastructure de Cloud Computing en fonction de l&#8217;utilisation qui en est faite dans le temps. Ainsi, là où sur les autres plates-formes une intervention humaine est nécessaire pour faire jouer l&#8217;élasticité de la plate-forme, Silver adapte l&#8217;utilisation qui est faite de l&#8217;infrastructure en se basant sur ses capacités de monitoring dont les résultats sont traités au travers d&#8217;un modèle Evènement / Décision / Action s&#8217;appuyant sur les règles de gestion des SLAs.</p><h4><a
name="OraclesinvestitdansJavaFx"></a>Oracle s&#8217;investit dans JavaFx</h4><p>Du moins, Larry Ellison, qui suggère de ré-écrire l&#8217;UI de OpenOffice en utilisant JavaFx.<br
/> En attendant cette hypothétique révolution, le framework de Sun a dévoilé quelques nouveautés durant JavaOne, en ajout à <a
title="la sortie de la version 12 dont nous nous faisions lcho la semaine dernire" href="http://blog.xebia.fr/2009/06/02/revue-de-presse-xebia-111/#JavaFXestarriv">la sortie de la version 1.2 dont nous nous faisions l&#8217;écho la semaine dernière</a>.</p><ul><li>Démonstration d&#8217;un outil collaboratif de développement : en plus des annonces de renforcement du développement du plugin JavaFx-Eclipse, Sun a donné une démonstration publique d&#8217;un outil de création graphique assez impressionnant : gestion de la <em>Scene</em>, drag and drop de composants, d&#8217;effets&#8230; Reste à savoir quand celui ci sera disponible&#8230;</li><li>Autre démonstration, plus attendue, celle de JavaFx for TV, avec une application réalisant des prévisualisations et des téléchargements de films à partir d&#8217;un téléviseur LG.</li></ul><h4><a
name="Gpayantunesimpleincomprhension"></a>G1 payant : une simple incompréhension</h4><p>La semaine dernière, une simple petite phrase a suffit à déclencher un tollé :<br
/> <em>Although G1 is available for use in this release, note that production use of G1 is only permitted where a Java support contract has been purchased. G1 is supported thru Sun&#8217;s Java Platform Standard Edition for Business program.</em><br
/> [...]l&#8217;utilisation en production de G1 n&#8217;est autorisée que pour les utilisateurs ayant acheté un contrat de support Java[...]<br
/> <a
title="Oracle avait il sonné le glas de JVM gratuites ?" href="http://blog.xebia.fr/2009/06/02/revue-de-presse-xebia-111/#GPayantOraclesonnetilleglasdes">Oracle avait il sonné le glas des JVM gratuites ?</a></p><p>Visiblement, tout cela ne serait qu&#8217;un choix de mots malheureux, qui ont d&#8217;ailleurs été remplacés par la phrase suivante :<br
/> <em>G1 is available as early access in this release, please try it and give us feedback. Usage in production settings without a Java SE for Business support contract is not recommended.</em><br
/> [...]l&#8217;utilisation en production [de G1] &#8230; est déconseillé en l&#8217;absence de support Java SE Business[...]</p><p>Par ailleurs, Alexis MP (Sun), en réaction à la publication de la news la semaine dernière, apporte quelques précisions dans <a
title="son commentaire sur notre blog" href="http://blog.xebia.fr/2009/06/02/revue-de-presse-xebia-111/comment-page-1/#comment-13155">son commentaire sur notre blog</a> :</p><ul><li>G1 peut être assimilée à une <em>option (donc non essentielle) payante</em>, comme cela se pratique chez MySql.</li><li>La monétisation du support Java SE Business n&#8217;est pas une nouveauté.</li><li>Sun est toujours indépendant, et ses choix et annonces ne sont pas influencés par Oracle</li></ul><p>Réel quiproquo donc, sans conséquences? Quoi qu&#8217;il en soit, la communication de Sun a été bien maladroite, en ces temps où de gros doutes planent sur l&#8217;avenir de Java.</p><h3><a
name="RIA"></a>RIA</h3><h4><a
name="SortiebetadeFlashBuilderetdeFl"></a>Sortie beta de Flash Builder 4 et de Flash Catalyst</h4><p>Adobe a annoncé les sorties de ses nouveaux produits en version beta. <a
title="Flash Builder 4" href="http://labs.adobe.com/technologies/flashbuilder4/">Flash Builder 4</a>, successeur du Flex Builder, supporte le Flex SDK 4 et propose de nouvelles fonctionnalités. Parmi elles nous noterons le support de Flex Unit, la possibilité de lier les données aux composants (ex : services Java). Une liste des nouveautés et améliorations est disponible <a
title="ici" href=" http://www.adobe.com/devnet/flex/articles/flex4builder_whatsnew.html">ici</a>.<br
/> <a
title="Flex SDK 4" href="http://labs.adobe.com/technologies/flex4sdk/">Flex SDK 4</a> (Gumbo) nous arrive avec une nouvelle architecture : Spark Component. Cette dernière permet de séparer la gestion de la customisation, mise en page et de la logique des composants. Cette séparation a été effectuée afin que les futures versions du SDK puissent évoluer, tout en gardant la rétro compatibilité avec les SDK antérieurs. De plus, cela permet également d&#8217;avoir une gestion plus fine de la customisation des composants. Néanmoins, cela a entrainé l&#8217;arrivé d&#8217;une syntaxe MXML plus enrichie (= namespace supplémentaires) :</p><pre class="brush: xml; title: ; notranslate">
xmlns:fx=&quot;http://ns.adobe.com/mxml/2009&quot;
xmlns:s=&quot;library://ns.adobe.com/flex/spark&quot;
xmlns:mx=&quot;library://ns.adobe.com/flex/halo&quot;
</pre><p>De plus, Flex 4 introduit le support de FXG : cette librairie permet de simplifier la création d&#8217;objets graphiques (rectangle, ellipse, &#8230;) ainsi que d&#8217;effets (transformations) pour la plateforme Flash. Les performances concernant la compilation ont été améliorées. Vous trouverez une liste des autres nouveautés <a
title="ici" href="http://www.adobe.com/devnet/flex/articles/flex4sdk_whatsnew.html">ici</a>.</p><p>Enfin, <a
title="Flash Catalyst" href="http://labs.adobe.com/technologies/flashcatalyst/">Flash Catalyst</a> est arrivé : ce dernier nous donne la possibilité de « transformer » des artworks Photoshop et/ou Illustrator en interface utilisateur avec la collaboration de Flash Builder 4. Voici une <a
title="vido assez impressionnante" href="http://tv.adobe.com/#vi+f1532v1001">vidéo assez impressionnante</a> sur l&#8217;utilisation de ce nouveau produit. Le but est de pouvoir dérouler un meilleur workflow entre les designers et les développeurs. En effet, avec Flash Catalyst un designer peut faire une maquette sous Photoshop, ajouter les effets de transitions et de succession de pages. Ce dernier sauvegarde le projet Flash Catalyst qui pourra être utilisé par un développeur sous Flash Builder 4.</p><p>Cependant, nous noterons des interrogations : le coup des licences : actuellement les licences Photoshop et Flex Builder 3 représentent un investissement qui n&#8217;est pas forcément négligeable. Peut être qu&#8217;Adobe proposera un package avec toute la suite ? De plus, la relation entre designer/développeur peut apporter un certain danger : toutes les sociétés n&#8217;ont pas le luxe d&#8217;avoir des ressources dédiées au design &#8230; les développeurs devront donc se mettre au design, ou alors les designers devront avoir de meilleurs connaissances au niveau développement (utilisation du Flash Builder 4).<br
/> Pour conclure, avec toutes ces nouveautés nous voyons qu&#8217;Adobe a décidé de passer à la vitesse supérieure, et veut continuer d&#8217;être un des acteurs principaux dans la guerre des technologies RIA.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="ProjectCoin"></a>Project Coin</h4><p>Voici quelques nouvelles de <a
title="Project Coin" href="http://openjdk.java.net/projects/coin/">Project Coin</a> (dont nous vous parlions il y a <a
title="quelques mois" href="http://blog.xebia.fr/2009/03/16/revue-de-presse-xebia-100/#OpenJdkProjectCoinproposezvosv">quelques mois</a>) par l&#8217;intermédiaire de <a
title="Joseph Darcy" href="http://blogs.sun.com/darcy/">Joseph Darcy</a> et de sa présentation faite à <a
title="JavaOne" href="http://java.sun.com/javaone/">JavaOne</a> suite à la <a
title="seconde slection de features retenus le 27 mai dernier" href="http://blogs.sun.com/darcy/date/20090527">seconde sélection de <em>features</em> retenus le 27 mai dernier</a>.</p><p>Pour rappel, le but du projet est de proposer de petites évolutions pour le langage Java, la communauté pouvant participer en passant par la mailing-list (avec du beau monde comme Bob Lee, Joshua Bloch, Neal Gafter&#8230;). Plusieurs comptes rendus de cette session sont déjà disponibles (chez <a
title="Alex Miller" href="http://tech.puredanger.com/2009/06/02/javaone-coin">Alex Miller</a> ou <a
title="Cay Horstmann" href="http://weblogs.java.net/blog/cayhorstmann/archive/2009/06/java_one_2009_d_1.html">Cay Horstmann</a>). On retiendra ainsi :</p><ul><li>Le <em>switch</em> avec <em>String</em> (<code>switch(str) {case "foo": return 1;  case "bar": return 2; }</code>)</li><li>Le <em>multi catch</em> (<code>try { ... } catch (Extype1 | Extype2 ex) { logger.log(ex); }</code>)</li><li>L&#8217;<em>exception handling</em> avec les opérateurs <em>?:</em>, <em>?.</em> et <em>?[]</em> (<a
title="proposition" href="http://mail.openjdk.java.net/pipermail/coin-dev/2009-March/000047.html">proposition</a>)</li><li>La <em>collection literals</em> ou création de liste avec valeur par défaut comme pour les tableaux (<code>List&lt;String&gt; list = ["a", "b"];</code>)</li><li>L&#8217;opérateur <em>diamond</em> permettant d&#8217;avoir un constructeur <em>light</em> qui ne contient pas les generics (<code>Map&lt;String, List anagrams = new HashMap&lt;&gt;();</code>)</li><li>Nombres avec underscores (<code>long creditCardNumber = 1234_5678_9012_3456L;</code>)</li></ul><p>De bien belles propositions donc qui allégeront nos classes Java, surtout ces <span
style="text-decoration: line-through;">ignobles</span> <em>if(myObject != null) {return myObject.aMethod()}</em> qui deviendrait ainsi <em>myObject?.aMethod();</em>. En espérant que tout ce petit monde arrivera vite&#8230;</p><h4><a
name="ComprendrelavagueGoogleWave"></a>(Com)prendre la vague Google Wave</h4><p>Définitivement <a
title="la star de Google IO 2009 Google Wave" href="http://blog.xebia.fr/2009/06/01/google-io-2009-annonces-et-strategie-google/#GoogleWavelagrosseannoncedelac">la star de Google I/O 2009, Google Wave</a> se dévoile peu à peu et nous laisse admirer la mécanique qui se cache derrière la future (?) référence de plate forme collaborative.<br
/> Le coeur du système repose sur le <a
title="protocole cr pour loccasion" href="http://www.waveprotocol.org/">protocole créé pour l&#8217;occasion</a>.<br
/> <a
title="InfoQ propose un zoom sur 2 sous domaines de ce protocole" href="http://www.infoq.com/news/2009/06/wave">InfoQ propose un zoom sur 2 sous domaines de ce protocole</a>, extraits du <a
title="site officiel que Google consacre  son invention" href="http://www.waveprotocol.org/">site officiel que Google consacre à son invention</a> :</p><ul><li><a
title="Operational Transform" href="http://www.waveprotocol.org/whitepapers/operational-transform">Operational Transform</a> : c&#8217;est le coeur du système, le framework de gestion de la concurrence. Toute modification est sauvée en local et envoyée en temps réel au serveur, qui se charge de traiter toutes les fusions, conservant la version référence, qui est ensuite poussée vers tous les clients graphiques consultant ce document. Dans l&#8217;attente de l&#8217;accusé de réception du serveur (le serveur a reçu la modification, l&#8217;a incorporé, et l&#8217;a propagé à tous les clients), chaque client cache toutes les modifications effectuées en local, qui seront envoyées en paquet ultérieurement.</li><li><a
title="le modle de donnes" href="http://www.waveprotocol.org/whitepapers/internal-client-server-protocol">le modèle de données</a> : une Wave contient plusieurs Wavelets, qui contiennent des participants et des documents. La concurrence d&#8217;accès est gérée au niveau Wavelet. L&#8217;état d&#8217;un Wavelet est déterminé par une séquence ordonnée de modifications appliquées / en cours d&#8217;application sur un document.</li></ul><p>A noter en outre que Google réutilise pour l&#8217;interface graphique deux de ses technologies open source, à savoir GWT (dont c&#8217;est le grand retour chez Google) et Google Gears (pour le drag &amp; drop).</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/06/08/revue-de-presse-xebia-112/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>SOA : Du composant au service : Sans état (Stateless)</title><link>http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/</link> <comments>http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#comments</comments> <pubDate>Thu, 04 Jun 2009 04:32:16 +0000</pubDate> <dc:creator>Christophe Heubès</dc:creator> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2134</guid> <description><![CDATA[Comme son nom le suggère, l&#8217;élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question &#171;&#160;Qu&#8217;est-ce qu&#8217;un service ?&#160;&#187;. Ce sujet débouche invariablement sur, au choix : Un blanc ; [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service-150x150.png" alt="composant-service" title="composant-service" width="150" height="150" style="margin: 1em 1em 1em 1em; float: right;" /></a><br
/> Comme son nom le suggère, l&#8217;élément clé de SOA <em>(Service Oriented Architecture)</em> est le <strong>Service</strong>. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question <em><strong>&laquo;&nbsp;Qu&#8217;est-ce qu&#8217;un service ?&nbsp;&raquo;</strong></em>. Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée <em>(ou un débat stérile)</em>.</p><p>On pourrait proposer la définition suivante : <em>&laquo;&nbsp;Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d&#8217;un domaine métier&nbsp;&raquo;</em>. Malheureusement, les définitions aussi courtes <em>(bien qu&#8217;exactes)</em> sont nécessairement incomplètes et amènent un florilège de questions.</p><p>Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service&nbsp;:</p><ul><li><a
href="http://blog.xebia.fr/2009/03/04/soa-du-composant-au-service-le-contrat-standardise/#more-1560">Contrat standardisé</a> : L&#8217;ensemble des services d&#8217;un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.</li><li><a
href="http://blog.xebia.fr/2009/03/19/soa-du-composant-au-service-le-couplage-lache/#more-1633">Couplage lâche</a> : Le contrat d&#8217;un service doit imposer un couplage lâche de ses clients.</li><li><a
href="http://blog.xebia.fr/2009/04/03/soa-du-composant-au-service-labstraction/#more-1706">Abstraction</a> : Le contrat d&#8217;un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.</li><li><a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/#more-1780">Réutilisabilité</a> : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.</li><li><a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852">Autonomie</a> : Un service doit exercer un contrôle fort sur son environnement d&#8217;exécution sous-jacent. Plus ce contrôle est fort, plus l&#8217;exécution d&#8217;un service est prédictible.</li><li><a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134">Stateless</a> <em>(sans état)</em> : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d&#8217;état quand cela est nécessaire.</li><li><a
href="http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#more-2196">Découvrabilité</a> : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.</li><li><a
href="http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#more-2623">Composabilité</a> : Un service doit être conçu de façon à participer à des compositions de services.</li></ul><p>Ces 8 aspects sont issus du livre &laquo;&nbsp;<a
href="http://www.amazon.com/Principles-Service-Prentice-Service-Oriented-Computing/dp/0132344823">SOA Principles of Service Design</a>&nbsp;&raquo; de Thomas Erl, également auteur du site <a
href="http://www.soaprinciples.com/">SOA Principles</a>.</p><p>Dans ce billet, nous nous attarderons sur la notion de &laquo;&nbsp;<a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134">statelessness</a>&laquo;&nbsp;.</p><p>Comme nous l&#8217;avons expliqué dans le précédent billet de cette série : Mettre l&#8217;emphase sur <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="la rutilisabilit des services" >la réutilisabilité des services</a> commence par la fourniture de services proposant une logique réutilisable, mais implique également que l&#8217;implémentation de cette logique soit effectivement réutilisable une fois déployée.<br
/> Dans une optique de <strong>sollicitation massive</strong>, il est important de concevoir l&#8217;implémentation des services en prêtant tout particulièrement attention à la <strong>concurrence d&#8217;accès</strong>. Les accès concurrents à un service ne doivent en aucun cas modifier son comportement, sa fiabilité ou ses performances. En d&#8217;autres termes, un service doit respecter son contrat <em>(et ses SLAs)</em>, quel que soit le volume de sollicitations auquel il est soumis : <strong>Un service doit être prédictible</strong>.<br
/> Afin de garantir cette prédictibilité dans le cadre d&#8217;accès concurrents, deux principes doivent être appliqués lors de l&#8217;élaboration des services :</p><ul><li>Un service doit <em>(au maximum)</em> être <strong>autonome</strong>.</li><li>Un service doit être <strong>sans état</strong>.</li></ul><p>Ces deux aspects sont fortement liés : Le principe d&#8217;<a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/" title="autonomie des services" >autonomie des services</a> implique que le comportement d&#8217;un service ne dépende pas du contexte dans lequel il est invoqué <em>(contexte fonctionnel ou contexte technique)</em>. Dans cette optique, intégrer de la gestion d&#8217;états au sein de nos services est un non sens.</p><p>D&#8217;une manière plus générale, la gestion d&#8217;états <em>(d&#8217;informations de contexte)</em> au sein d&#8217;un service pose des problèmes :</p><ul><li>De <a
href="http://blog.xebia.fr/2007/07/24/service-stateful-vs-service-stateless/#ComprehensionEtMaintenabilite" title="comprhension et de maintenabilit" >compréhension et de maintenabilité</a> :<br
/> La gestion d&#8217;états va sensiblement augmenter la complexité cyclomatique de l&#8217;implémentation et donc rendre difficile sa lecture, sa documentation, sa testabilité <em>(plus cette complexité cyclomatique est élevée, plus il est difficile d&#8217;obtenir une couverture de code acceptable)</em>, &#8230; Dans le cadre d&#8217;une composition de services, la complexité du composé étant directement liée à celle de ses composants, la complexité des services de plus haut niveau peut donc rapidement devenir ingérable.</li><li>De <a
href="http://blog.xebia.fr/2007/07/24/service-stateful-vs-service-stateless/#Reutilisation" title="rutilisation" >réutilisation</a> :<br
/> La gestion d&#8217;états au sein du service brouille la lisibilité de son contrat puisque l&#8217;adaptation de son comportement en fonction de son état ne transparaît pas dans son contrat. Or la lisibilité et la transparence des contrats de service sont des facteurs clés de la réutilisation des services.<br
/> D&#8217;autre part, l&#8217;utilisation d&#8217;états au sein d&#8217;un service présuppose souvent l&#8217;utilisation de ce service au sein d&#8217;un enchaînement d&#8217;invocations défini à l&#8217;avance. Il sera donc difficile de réutiliser le service au sein d&#8217;une autre orchestration ou composition.</li><li>De <a
href="http://blog.xebia.fr/2007/07/24/service-stateful-vs-service-stateless/#Performances" title="performances" >performances</a> : car la gestion des état est consommatrice de ressources systèmes, notamment en terme de stockage de ces états <em>(en mémoire ou sur disque)</em>.</li></ul><p><a
href="http://blog.xebia.fr/2007/07/24/service-stateful-vs-service-stateless/" title="On prfrera donc la conception et limplmentation de services stateless" >On préférera donc la conception et l&#8217;implémentation de services stateless</a>. La responsabilité de la gestion d&#8217;états sera alors déléguée aux utilisateurs <em>(consommateurs)</em> des services : compositions, orchestrations, processus, &#8230; Ce transfert de responsabilité <em>(déléguer la gestion d&#8217;états au client)</em> rejoint les principes d&#8217;une approche REST des services.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Le retour sur investissement des infrastructures informatiques</title><link>http://blog.xebia.fr/2009/05/19/le-retour-sur-investissement-des-infrastructures-informatiques/</link> <comments>http://blog.xebia.fr/2009/05/19/le-retour-sur-investissement-des-infrastructures-informatiques/#comments</comments> <pubDate>Tue, 19 May 2009 07:02:38 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2014</guid> <description><![CDATA[Ce jeudi 14 mai, Guillaume Bodet (Directeur Technique de Xebia) était l&#8217;invité de l&#8217;émission 01 Business sur BFM Radio en compagnie d’Yves Caseau (Directeur général adjoint en charge de la prospective, de la qualité, des services et de l&#8217;innovation chez Bouygues Télécom, dont il est ancien DSI) et de Michel Mariet (Responsable marketing middleware d&#8217;Oracle [...]]]></description> <content:encoded><![CDATA[<p>Ce jeudi 14 mai, Guillaume Bodet <em>(Directeur Technique de Xebia)</em> était l&#8217;invité de l&#8217;émission <a
href="http://www.radiobfm.com/podcast/podcast.php?id=7" title="01 Business sur BFM Radio" >01 Business sur BFM Radio</a> en compagnie d’<a
href="http://organisationarchitecture.blogspot.com/" title="Yves Caseau" >Yves Caseau</a> <em>(Directeur général adjoint en charge de la prospective, de la qualité, des services et de l&#8217;innovation chez Bouygues Télécom, dont il est ancien DSI)</em> et de Michel Mariet <em>(Responsable marketing middleware d&#8217;Oracle France)</em>.</p><p>Le sujet de l’émission était <em>&laquo;&nbsp;<strong>Le retour sur investissement des infrastructures informatiques</strong>&laquo;&nbsp;</em> :</p><ul><li>Comment calculer le retour sur investissement <em>(ROI)</em> des infrastructures informatiques ?</li><li>Comment aligner ces infrastructures sur la stratégie de l’entreprise ?</li><li>Quel ROI apporte la mise en œuvre des SOA <em>(Architectures Orientées Services)</em> ?</li></ul><p>Bonne écoute.</p><p><script language="JavaScript" src="http://blog.xebia.fr/wp-content/uploads/2007/08/audio-player.js"></script></p><div
align="center"> <object
type="application/x-shockwave-flash" data="http://blog.xebia.fr/wp-content/uploads/2007/08/player.swf" id="20090514_business_bfm" height="24" width="600"><param
name="movie" value="http://blog.xebia.fr/wp-content/uploads/2007/08/player.swf"><param
name="FlashVars" value="playerID=20090514_business_bfm&amp;soundFile=http://blog.xebia.fr/wp-content/uploads/2009/05/20090514_business_bfm.mp3"><param
name="quality" value="high"><param
name="menu" value="false"><param
name="wmode" value="transparent"></object></div> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/05/19/le-retour-sur-investissement-des-infrastructures-informatiques/feed/</wfw:commentRss> <slash:comments>0</slash:comments> <enclosure
url="http://blog.xebia.fr/wp-content/uploads/2009/05/20090514_business_bfm.mp3" length="22160893" type="audio/mpeg" /> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/</link> <comments>http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#comments</comments> <pubDate>Mon, 18 May 2009 16:48:34 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[Google App Engine]]></category> <category><![CDATA[Grails]]></category> <category><![CDATA[GWT]]></category> <category><![CDATA[Hudson]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Méthodes agiles]]></category> <category><![CDATA[Performances]]></category> <category><![CDATA[REST]]></category> <category><![CDATA[SCRUM]]></category> <category><![CDATA[Selenium Grid]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Spring]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=2008</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII Grails 1.1.1 supporté par Google App Engine Agilité SCRUM en vidéo en 5 minutes SOA REST : Le bon et surtout le moins bon &#8230; Le coin de la technique Utiliser Selenium Grid avec Hudson Une API Criteria pour JCR [...]]]></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/2009/05/18/revue-de-presse-xebia-109/#GrailssupportparGoogleAppEngin">Grails 1.1.1 supporté par Google App Engine</a></li></ul><p><strong>Agilité</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#SCRUMenvidoenminutes">SCRUM en vidéo en 5 minutes</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#RESTLebonetsurtoutlemoinsbon">REST : Le bon et surtout le moins bon &#8230;</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#UtiliserSeleniumGridavecHudson">Utiliser Selenium Grid avec Hudson</a></li><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#UneAPICriteriapourJCR">Une API Criteria pour JCR</a></li><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#IntgrationsimpledeGWTetSpring">Intégration simple de GWT et Spring</a></li><li><a
href="http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/#bonnespratiquespouramliorersca">8 bonnes pratiques pour améliorer scalabilité et performances</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="GrailssupportparGoogleAppEngin"></a>Grails 1.1.1 supporté par Google App Engine</h4><p>Dans une précédente <a
href="http://blog.xebia.fr/2009/04/14/revue-de-presse-xebia-104/#GoogleAppEnginepourJavaetGroov" title="nouvelle" >nouvelle</a>, nous avions annoncé la sortie de <a
href="http://appengine.google.com/" title="Google App Engine" >Google App Engine</a> pour Java et Groovy. Après Struts2, Spring MVC, le support de nombreux frameworks web continue.<br
/> Le framework web Grails, basé sur le langage Groovy et développé par l&#8217;équipe de Spring est maintenant supporté par App Engine. Des ajustements ont été apportés pour le rendre compatible, d&#8217;où la sortie de cette <a
href="http://blog.springsource.com/2009/05/14/grails-111-released-with-google-appengine-support/" title="version 1.1.1." >version 1.1.1.</a>. Celle ci apporte aussi des corrections de bugs, dont la liste est disponible <a
href="http://jira.codehaus.org/browse/GRAILS?report=com.atlassian.jira.plugin.system.project:changelog-panel" title="ici" >ici</a>.<br
/> Par ailleurs, <a
href="http://grails.org/plugin/app-engine" title="un plugin" >un plugin</a> a été développé pour faciliter l&#8217;intégration de Grails avec le SDK de App Engine, notamment au niveau du déploiement du serveur web.</p><p>L&#8217;objectif fixé par SpringSource est que Grails devienne le framework web le plus utilisé avec Google App Engine, d&#8217;où les nombreux efforts fournis. Les prochains axes de travail porteront sur l&#8217;abstraction de JPA/JDO pour faciliter l&#8217;utilisation du data store (base de données) d&#8217;App Engine.</p><h3><a
name="Agilit"></a>Agilité</h3><h4><a
name="SCRUMenvidoenminutes"></a>SCRUM en vidéo en 5 minutes</h4><p>Tout simplement géniale, cette vidéo fait le tour de la blogosphère SCRUM / Agile : Le retour de 6 mois d&#8217;expérience d&#8217;une équipe SCRUM.</p><div
align="center"> <object
width="400" height="220"><param
name="allowfullscreen" value="true" /><param
name="allowscriptaccess" value="always" /><param
name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=4587652&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1" /><embed
src="http://vimeo.com/moogaloop.swf?clip_id=4587652&#038;server=vimeo.com&#038;show_title=1&#038;show_byline=1&#038;show_portrait=0&#038;color=&#038;fullscreen=1"  type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="400" height="220"></embed></object></div><p>Tout y est :</p><ul><li>L&#8217;équipe.</li><li>Les cérémonies.</li><li>Les artefacts.</li><li>Le fun.</li></ul><p>La réalisation très soignée et la BO ne gâchent rien.</p><p>A regarder !</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="RESTLebonetsurtoutlemoinsbon"></a>REST : Le bon et surtout le moins bon &#8230;</h4><p>Dans l&#8217;article <em>&laquo;&nbsp;<a
href="http://soa.dzone.com/news/rest---good-bad-and-ugly" title="REST - The Good, The Bad and The Ugly" >REST &#8211; The Good, The Bad and The Ugly</a>&laquo;&nbsp;</em>, publié sur DZone, <a
href="http://soa.dzone.com/users/arnonrgo" title="Arnon RotemGalOz" >Arnon Rotem-Gal-Oz</a> propose un éclairage intéressant de ce qu&#8217;il y a de bon et surtout de ce qu&#8217;il peut y avoir de moins bon lors de la mise en place d&#8217;une architecture REST.<br
/> On retiendra de cette déclinaison deux travers récurrents dans la mise en œuvre de REST :</p><ul><li><strong>Limiter REST à REST over HTTP</strong> : Ce raccourci appauvrit en effet dramatiquement les possibilités que nous offre la mise en place d&#8217;une architecture REST</li><li><strong>Limiter REST à l&#8217;utilisation du GET et du POST</strong> : Ici encore, n&#8217;utiliser qu&#8217;une sémantique à 2 verbes nous prive de la richesse dont nous pourrions profiter.</li></ul><p>Comme pour beaucoup d&#8217;autres sujets <em>(les méthodes agiles, les SOA, &#8230;)</em>, la mise en place d&#8217;architectures REST nécessite un changement d&#8217;approche et de façon de penser : REST implique une <strong>approche orientée ressources</strong> qui ne nous est pas naturelle. Il est donc primordial de ne pas bruler les étapes et de faire l&#8217;effort du changement avant de pouvoir bénéficier des promesses de REST.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="UtiliserSeleniumGridavecHudson"></a>Utiliser Selenium Grid avec Hudson</h4><p>Depuis 2006, Hudson offre un <a
href="http://wiki.hudson-ci.org/display/HUDSON/Distributed+builds" title="mode <em>master</em> / <em>slave</em>&nbsp;&raquo; >mode <em>master</em> / <em>slave</em></a> permettant d&#8217;effectuer des <em>builds distribués</em>. Récemment, ce mode de fonctionnement a commencé à être exploité par des plugins, tel que le <a
href="http://wiki.hudson-ci.org/display/HUDSON/Hadoop+Plugin" title="plugin Hadoop" >plugin Hadoop</a> permettant d&#8217;utiliser son cluster Hudson pour effectuer des traitements lourds de type MapReduce.</p><p><a
href="http://selenium-grid.seleniumhq.org/" title="Selenium Grid" >Selenium Grid</a>, d&#8217;autre part, est une solution permettant de distribuer un ensemble de tests Selenium sur plusieurs machines, permettant ainsi de ramener leur temps d&#8217;exécution à un ordre de grandeur plus propice à l&#8217;intégration continue.</p><p>Kohsuke Kawaguchi, créateur du projet Hudson, <a
href="http://weblogs.java.net/blog/kohsuke/archive/2009/05/hudson_selenium.html" title="vient d'annoncer la disponibilité" >vient d&#8217;annoncer la disponibilité</a> d&#8217;un <a
href="http://wiki.hudson-ci.org/display/HUDSON/Selenium+Plugin" title="plugin Selenium Grid" >plugin Selenium Grid</a>. Outre l&#8217;intégration à Hudson, facilitant le démarrage automatisé des tests, ce plugin présente l&#8217;intérêt de simplifier la configuration, puisqu&#8217;il s&#8217;appuie sur l&#8217;infrastructure cluster d&#8217;Hudson.</p><p>Il s&#8217;agit là d&#8217;une avancée qui devrait permettre de rendre plus accessible et moins coûteuse l&#8217;exploitation quotidienne de larges quantités de tests d&#8217;intégration. Parmi les perspectives d&#8217;avenir pour la pleine utilisation d&#8217;un cluster Hudson, on notera également une très intéressante proposition sur le Jira du projet Hadoop visant à créer un <a
href="https://issues.apache.org/jira/browse/HADOOP-1257" title="distributed JUnit TestRunner" >distributed JUnit TestRunner</a>.</p><h4><a
name="UneAPICriteriapourJCR"></a>Une API Criteria pour JCR</h4><p>Magnolia est un CMS en Java qui repose sur la technologie JCR (Java Content Repository, <a
href="http://jcp.org/en/jsr/detail?id=170" title="JSR170" >JSR-170</a>) pour assurer la persistance versionnée des informations qu&#8217;il présente.</p><p>JCR, dans sa version 1.0, propose deux possibilités pour exécuter des requêtes sur son <em>repository</em> de contenu : XPath, supporté en standard, et SQL, dont le support est défini comme optionnel par la spécification JCR.</p><p>Dans ces deux cas, les requêtes se font en mode texte. Dans certains cas d&#8217;utilisation, tels que les recherches multi-critères, cela peut amener le développeur à créer une logique de construction de requêtes par concaténation. Avec Hibernate, ce genre de problématique est adressée par l&#8217;API Criteria qui rend le développement de ce type de besoin trivial.</p><p>Partant de ce constat, les développeurs de Magnolia proposent une librairie utilitaire permettant la <a
href="http://wiki.magnolia-cms.com/display/WIKI/Hibernate%27s+Criteria-like+API+for+Magnolia-JCR" title="construction de requtes JCR par programmation" >construction de requêtes JCR par programmation</a>. Cette librairie repose sur Magnolia mais pourrait être adaptée pour devenir <em>standalone</em>.</p><p>Ceci préfigure de ce que JCR 2.0 (<a
href="http://jcp.org/en/jsr/detail?id=283" title="JSR-283" >JSR-283</a>), actuellement en statut <em>proposed final draft</em>, s&#8217;apprête à offrir : les requêtes pourront être définies de manière objet grâce à l&#8217;API JCR-JQOM (JCR Java Query Object Model). <a
href="http://jackrabbit.apache.org/" title="Apache Jackrabbit" >Apache Jackrabbit</a>, l&#8217;implémentation de référence, <a
href="http://www.nabble.com/Query-Object-Model--status-(QOM)-td22369489.html" title="supporte dj partiellement JQOM" >supporte déjà partiellement JQOM</a>.</p><h4><a
name="IntgrationsimpledeGWTetSpring"></a>Intégration simple de GWT et Spring</h4><p>Et même <em>super simple</em> selon l&#8217;article de <a
href="http://devbright.com/2009/05/super-simple-gwt-spring-integration/" title="Dev Bright" >Dev Bright</a> qui dans son exemple s&#8217;appuie sur le projet <a
href="http://code.google.com/p/gwtrpc-spring/" title="gwtrpc-spring" >gwtrpc-spring</a> (qui nous permet par la même occasion de tester une autre librairie que <a
href="http://gwt-widget.sourceforge.net/" title="GWTSL" >GWT-SL</a>, la librairie référence des projets GWT actuels). L&#8217;article est d&#8217;autant plus intéressant qu&#8217;il utilise les annotations pour déclarer les services auprès de Spring.</p><p>Les services seront accessibles par une URL qui possèdera une extension spécifique qui sera mappée dans le <em>web.xml</em>. Cela évite ainsi une multitude de servlets dans le web.xml. Ici il n&#8217;y aura qu&#8217;une seule servlet mais qui mappera toutes les extensions de type <em>.rpc</em>.</p><p>Le service :</p><pre class="brush: java; title: ; notranslate">
@RemoteServiceRelativePath(&quot;myservice.rpc&quot;)
public interface MyService extends RemoteService {
   String myMethod(String arg);
}
</pre><p>Le <em>web.xml</em> :</p><pre class="brush: xml; title: ; notranslate">
&lt;web-app&gt;
   &lt;servlet&gt;
      &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
      &lt;servlet-class&gt;org.gwtrpcspring.RemoteServiceDispatcher&lt;/servlet-class&gt;
   &lt;/servlet&gt;
   &lt;servlet-mapping&gt;
      &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt;
      &lt;url-pattern&gt;*.rpc&lt;/url-pattern&gt;
   &lt;/servlet-mapping&gt;
   &lt;listener&gt;
      &lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;
   &lt;/listener&gt;
&lt;/web-app&gt;
</pre><p>Pour le fichier de configuration Spring, il suffit d&#8217;activer la configuration par annotation et de donner le package à scanner :</p><pre class="brush: xml; title: ; notranslate">
&lt;beans ...&gt;
   &lt;context:annotation-config&gt;
      &lt;context:component-scan base-package=&quot;org.gwtrpcspring.example.server&quot; /&gt;
   &lt;/context:annotation-config&gt;
&lt;/beans&gt;
</pre><p>Du coup, plus aucune configuration XML, l&#8217;annotation <em>@Service</em> finit le travail :</p><pre class="brush: java; title: ; notranslate">
@Service
public class MyServiceImpl implements MyService {
   public String myMethod(String arg) {
      // You impl...
   }
}
</pre><p>En quelques lignes et très peu de configuration, l&#8217;auteur a créé une application GWT, Spring, avec annotation et avec un web.xml bindant tous les appels RPC. L&#8217;avantage dans cette configuration est que les fichiers XML de configuration n&#8217;évolueront pas (sauf ajout de nouveaux packages).</p><p>Le projet est récupérable à cette <a
href="http://gwtrpc-spring.googlecode.com/files/SimpleGwtRpcSpringExample.zip" title="url" >url</a>.</p><h4><a
name="bonnespratiquespouramliorersca"></a>8 bonnes pratiques pour améliorer scalabilité et performances</h4><p><a
href="http://www.infoq.com/news/2009/05/8-Best-Practices-Scalability" title="Wille Faler donne 8 conseils" >Wille Faler donne 8 conseils</a> pour optimiser la scalabilité de vos applications.</p><ul><li>Déchargez la base de données : la base de données relationnelles est le plus courant des goulets d&#8217;étranglements sur nos applications.</li><li>Utilisez des caches : cacher est un moyen simple d&#8217;appliquer le point précédent.</li><li>Cachez des objets complexes : même si des objets &#8216;à maille fine&#8217; sont stockées, cacher des entités plus complexes permettra de moins solliciter les ressources lors d&#8217;une recherche dans le cache, et de ramener plus rapidement une grappe d&#8217;objets complète.</li><li>Ne sauvez pas d&#8217;état en base : ne doivent persister que les données business (pas d&#8217;informations de login, de session&#8230;)</li><li>Réfléchissez à la spacialisation : placer les données au plus près de là où elles doivent être utilisées (en utilisant un CDN par exemple)</li><li>Restreignez les accès concurrents aux ressources sensibles : il est plus performant d&#8217;adopter une attitude &#8216;un seul thread à la fois&#8217;</li><li>Abusez de l&#8217;asynchrone pour fractionner vos process : séparez vos traitements en petites unités, traitées par des workers distincts; afin d&#8217;éviter un phénomène d&#8217;engorgement généralisé.</li><li>Ne surchargez pas le réseau : sortir de votre runtime applicatif est couteux en temps, limitez donc les échanges avec les systèmes tiers.</li></ul><p>Certains diront &#8216;encore un article de bonnes pratiques performance&#8217;&#8230; Pour notre part, sorti des grands classiques (base de données, réseaux&#8230;), nous avons apprécié deux conseils plutôt originaux : le caching d&#8217;entités complexes, et la spacialisation.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/05/18/revue-de-presse-xebia-109/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/</link> <comments>http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#comments</comments> <pubDate>Mon, 11 May 2009 16:48:58 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[@Inject]]></category> <category><![CDATA[annotation]]></category> <category><![CDATA[Datagrid]]></category> <category><![CDATA[ESB]]></category> <category><![CDATA[Fuji]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[Guice]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[JavaFX]]></category> <category><![CDATA[JSon]]></category> <category><![CDATA[JSR-299]]></category> <category><![CDATA[OpenESB]]></category> <category><![CDATA[Paris JUG]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[Spring]]></category> <category><![CDATA[SpringSource]]></category> <category><![CDATA[Tapestry]]></category> <category><![CDATA[Wicket]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1985</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. SOA Fuji, le futur d&#8217;OpenESB Le coin de la technique Concevoir des APIs efficaces JavaFX : informations et controverses Sortie de Wicket 1.3.6 @Inject standardisation de l’injection de dépendances Sortie de Tapestry 5.1 Trucs et astuces Json &#8211; Restfull Evènements de notre communauté en [...]]]></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>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#FujilefuturdOpenESB">Fuji, le futur d&#8217;OpenESB</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#ConcevoirdesAPIsefficaces">Concevoir des APIs efficaces</a></li><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#JavaFXinformationsetcontrovers">JavaFX : informations et controverses</a></li><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#SortiedeWicket">Sortie de Wicket 1.3.6</a></li><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#Inject">@Inject standardisation de l’injection de dépendances</a></li><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#SortiedeTapestry">Sortie de Tapestry 5.1</a></li><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#TrucsetastucesJsonRestfull">Trucs et astuces Json &#8211; Restfull</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/#SoireDatagridauParisJug">Soirée Datagrid au Paris Jug</a></li></ul><h3><a
name="SOA"></a>SOA</h3><h4><a
name="FujilefuturdOpenESB"></a>Fuji, le futur d&#8217;OpenESB</h4><p>La prochaine version d&#8217;OpenESB, qui sera estampillée &#8216;v3&#8242;, est en cours de développement sous le nom de code &#8216;Project Fuji&#8217;. Ce projet a été récemment mis en avant par Andi Egloff, dans <a
href="http://www.java-tv.com/2009/05/07/fuji-the-next-generation-of-openesb/" title="un webcast" >un webcast</a> qui fait le tour des nombreuses nouveautés. Les principales d&#8217;entre elles sont :</p><ul><li><a
href="http://wiki.open-esb.java.net/Wiki.jsp?page=IntegrationFlowLanguageOverview" title="Integration Flow Language (IFL)" >Integration Flow Language (IFL)</a> : il s&#8217;agit d&#8217;un <a
href="http://martinfowler.com/bliki/DomainSpecificLanguage.html" title="DSL externe" >DSL externe</a> permettant de définir des flux d&#8217;intégrations. Le rôle de ce langage est donc le même que le DSL interne offert par Apache Camel.</li><li><a
href="http://wiki.open-esb.java.net/Wiki.jsp?page=FujiDJBI" title="Distributed JBI" >Distributed JBI</a> : La spécification JBI (<a
href="http://www.jcp.org/en/jsr/detail?id=208" title="JSR208" >JSR-208</a>) ne couvre pas la problématique de distribution des composants JBI sur plusieurs noeuds. Fuji apporte une extension propriétaire pour permettre cette distribution.</li><li><a
href="http://wiki.open-esb.java.net/Wiki.jsp?page=FujiRunningOJCComponentsOSGi" title="Utilisation de composants OpenJBI" >Utilisation de composants OpenJBI</a> : ces composants seront utilisables directement dans OpenESB v3. Le projet prévoit de mettre les composants dont la compatibilité aura été validée dans le <em>repository</em> Maven du projet.</li><li><a
href="http://wiki.open-esb.java.net/Wiki.jsp?page=FujiEIP" title="Enterprise Integration Patterns" >Enterprise Integration Patterns</a> : un certain nombre d&#8217;EIP sera supporté en standard et configurable via le langage IFL.</li></ul><p>La version finale d&#8217;OpenESB v3 est prévue pour le second semestre 2009, l&#8217;équipe du projet annonce une probable <em>preview</em> pour JavaOne en juin.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="ConcevoirdesAPIsefficaces"></a>Concevoir des APIs efficaces</h4><p>John De Goes vient de publier une série de deux articles (<a
href="http://jdegoes.squarespace.com/journal/2009/5/2/good-api-design-part-1.html" title="première partie" >première partie</a> et <a
href="http://jdegoes.squarespace.com/journal/2009/5/6/good-api-design-part-2.html" title="deuxime partie" >deuxième partie</a>) portant sur les bonnes pratiques de conception d&#8217;APIs. Il s&#8217;appuie sur un exemple d&#8217;API de configuration pour illustrer son propos. Les points qu&#8217;il met particulièrement en avant sont :</p><ul><li>Il est important de sélectionner le niveau d&#8217;abstraction approprié et d&#8217;assurer l&#8217;uniformité de celui-ci sur l&#8217;ensemble de l&#8217;API, ainsi que de définir et respecter une responsabilité pour chaque classe. Ceci concerne la granularité des méthodes, le type d&#8217;objets manipulés en entrée et en sortie, ainsi que la présence et le type d&#8217;exception éventuellement renvoyée.</li><li>N&#8217;offrir qu&#8217;une seule possibilité pour chaque besoin, afin d&#8217;éviter la confusion chez l&#8217;utilisateur de cette API.</li><li>S&#8217;appuyer sur les possibilités offertes par le langage pour empêcher certaines mauvaises utilisations d&#8217;une API.</li><li>L&#8217;API doit être la plus intuitive possible afin de minimiser autant que possible le besoin pour l&#8217;utilisateur d&#8217;avoir à se plonger dans une documentation.</li></ul><p>Certaines de ces idées sont déjà partagées par de nombreux développeurs, mais comme c&#8217;est souvent le cas dans l&#8217;énonciation de bonnes pratiques ou de <em>patterns</em>, tout l&#8217;intérêt réside ici dans la formalisation apportée par l&#8217;auteur.</p><p>Les lecteurs intéressés par cette problématique pourront se tourner vers le livre de Jaroslav Tulach, <a
href="http://apress.com/book/view/1430209739" title="Practical API Design" >Practical API Design</a>, qui apporte l&#8217;intéressant retour d&#8217;expérience d&#8217;un architecte de NetBeans, ou encore <a
href="http://lcsd05.cs.tamu.edu/slides/keynote.pdf" title="How to Design a Good API and Why it Matters" >How to Design a Good API and Why it Matters</a> par Joshua Bloch (auteur de <a
href="http://java.sun.com/docs/books/effective/" title="Effective Java" >Effective Java</a>).</p><h4><a
name="JavaFXinformationsetcontrovers"></a>JavaFX : informations et controverses</h4><p>Depuis plusieurs mois, nous vous rapportons les différentes <a
href="http://blog.xebia.fr/2009/02/16/revue-de-presse-xebia-96/#JavaFxsurmobile" title="informations" >informations</a> et <a
href="http://blog.xebia.fr/2009/03/09/revue-de-presse-xebia-99/#LepositionnementdeJavaFXtoujou" title="controverses" >controverses</a> à propos de JavaFX. Cette technologie RIA, développée par Sun, et introduite en décembre 2008 fait beaucoup parler d&#8217;elle car personne ne sait dire aujourd&#8217;hui ce qu&#8217;il adviendra de JavaFX dans les mois et années à venir.</p><p>Les propos particulièrement négatifs dont JavaFX a été victime à ses débuts se font moins nombreux, non pas parce que cette technologie a convaincu, mais parce qu&#8217;elle n&#8217;est plus au centre des débats. En fait, ceci est bénéfique puisque cela permet d&#8217;observer plus sereinement les différents exemples postés régulièrement par la communauté JavaFX naissante. Il ressort de ce tour d&#8217;horizon que les capacités actuelles de JavaFX ne prêtent pas à critique : les fonctionnalités de graphisme et d&#8217;animations qui sont offertes <a
href="http://java.dzone.com/articles/javafx-im-starting-believe" title="semblent satisfaire" >semblent satisfaire</a> de nombreux développeurs. Le problème porte principalement sur les manques et les promesses non tenues à ce jour :</p><ul><li>la portabilité de JavaFX sur plusieurs environnements (_desktop_, web, mobile, et TV, le fameux &#8216;<em>All the screens of your life</em>&#8216;) n&#8217;est pas assuré puisque le déploiement est impossible sur mobile, faute de <em>device</em> compatible. Le fonctionnement sur téléviseur est lui toujours prévu dans une version ultérieure.</li><li>les composants graphiques de haut niveau sont absents. Il s&#8217;agit pourtant d&#8217;un élément indispensable pour le développement d&#8217;applications RIA.</li></ul><p>Joshua Marinacci, un des meneurs de JavaFX chez Sun, a été interviewé par Scott Hanselman <a
href="http://www.hanselminutes.com/default.aspx?showID=178" title="dans un podcast" >dans un podcast</a>. Il annonce que la démonstration de JavaFX sur TV <em>pourrait</em> être faite lors de JavaOne 2009, en juin. Il reconnaît par ailleurs le marketing excessif entourant cette technologie.</p><p>Outre ces réflexions d&#8217;ordre technique, le rachat de Sun par Oracle constitue une autre source de débats. Personne ne sait quelle décision Oracle prendra quant à JavaFX : soutenir ce projet qui nécessite encore un investissement lourd pour prétendre réellement concurrencer les autres acteurs RIA ou abandonner ce marché. Les différentes opinions sur ce sujet sont présentées et argumentées dans <a
href="http://lescastcodeurs.com/2009/05/les-cast-codeurs-podcast-episode-3/" title="le dernier podcast" >le dernier podcast</a> des Cast Codeurs.</p><h4><a
name="SortiedeWicket"></a>Sortie de Wicket 1.3.6</h4><p><a
href="http://wicket.apache.org/" title="Wicket" >Wicket</a>, le framework orienté composant de la <em>Fondation Apache</em>, sort en version <a
href="http://wicket.apache.org/news.html#News-wicket1.3.6" title="1.3.6" >1.3.6</a> (1.4 toujours en <a
href="http://www.apache.org/dyn/closer.cgi/wicket/1.4-rc2" title="release candidate 2" >release candidate 2</a>).</p><p>Malgré les 7 mois d&#8217;écart avec la version précédente, il ne faut pas s&#8217;attendre à une révolution pour cette nouvelle mouture. Il s&#8217;agit en effet d&#8217;une version de stabilisation et d&#8217;amélioration. On notera donc de nombreux <a
href="http://wicket.apache.org/news.html#News-Bug" title="correctifs de bugs" >correctifs de bugs</a> et <a
href="http://wicket.apache.org/news.html#News-Improvement" title="plusieurs amliorations" >plusieurs améliorations</a>.</p><p>Cette version est téléchargeable sur le <a
href="http://www.apache.org/dyn/closer.cgi/wicket/1.3.6" title="site dApache" >site d&#8217;Apache</a> ou en changeant votre version de <em>pom.xml</em> en 1.3.6.</p><p>A noter, toujours autour de Wicket, le retour critique de <a
href="http://www.tomsquest.com" title="Tom's Quest" >Tom&#8217;s Quest</a> sur <a
href="http://www.tomsquest.com/blog/les-limites-de-wicket/" title="Wicket et ses limites" >Wicket et ses limites</a> après la présentation, chez Zenika, de Martin Dashorst, un des committers principaux de Wicket et coauteur du livre <a
href="http://wicketinaction.com/" title="Wicket In Action" >Wicket In Action</a>.</p><h4><a
name="Inject"></a>@Inject standardisation de l’injection de dépendances</h4><p>Pas mal de bruit la semaine dernière dans la blogosphère Java avec l&#8217;annonce par Google et <a
href="http://www.springsource.com/" title="SpringSource" >SpringSource</a> d&#8217;une nouvelle proposition de JSR dédiée à l&#8217;injection de dépendances : <a
href="http://code.google.com/p/atinject/" title="@Inject ("Annotations for Dependency Injection")" >@Inject (&laquo;&nbsp;Annotations for Dependency Injection&nbsp;&raquo;)</a>.<br
/> Comme le <a
href="http://google-code-updates.blogspot.com/2009/05/javaxinjectinject.html" title="souligne 'Crazy' Bob Lee" >souligne &#8216;Crazy&#8217; Bob Lee</a>, l&#8217;auteur principal de <a
href="http://code.google.com/p/google-guice/" title="Google Guice" >Google Guice</a>, la sortie de Spring 1.0, il y a déjà 5 ans, a apporté l&#8217;injection de dépendances aux masses, via un fichier de configuration propriétaire. Il y a 3 ans, Google Guice a proposé la même chose via des annotations (et SpringSource propose la même chose depuis Spring 2.5).<br
/> Si le succès de Google Guice est assez limité face au raz de marée Spring, le constat est là : il manque un standard. Comme les deux librairies ne sont pas compatibles, si vous exposez à un autre projet/équipe une librairie contenant des dépendances injectées par Google Guice, et que l&#8217;autre équipe utilise Spring, elle devra redéfinir tous les beans et leurs dépendances dans un fichier de configuration Spring (ou des annotations Spring).<br
/> @Inject propose donc de standardiser les annotations, afin de rendre portables sur différents frameworks (<a
href="http://blog.xebia.fr/2009/04/15/google-guice-les-bases-de-linjection-de-dependances/" title="Guice" >Guice</a>, Spring, <a
href="http://blog.xebia.fr/2009/04/24/commencer-linjection-de-dependances-avec-tapestry-ioc" title="Tapestry IOC" >Tapestry IOC</a>, etc.) des classes injectables.</p><p><a
href="http://blog.xebia.fr/2009/05/11/inject-standardisation-de-linjection-de-dependances" title="@Inject standardisation de l’injection de dépendances" >Lire notre article à ce sujet : @Inject standardisation de l’injection de dépendances</a>.</p><h4><a
name="SortiedeTapestry"></a>Sortie de Tapestry 5.1</h4><p>Tapestry, dont on parlait récemment dans l&#8217;article <a
href="http://blog.xebia.fr/2009/04/24/commencer-linjection-de-dependances-avec-tapestry-ioc/" title="linjection de dpendances avec Tapestry IoC" >l&#8217;injection de dépendances avec Tapestry IoC</a>, passe en version 5.1 en respectant à la lettre son nouveau planning d&#8217;une version tout les 4 à 6 mois.<br
/> Outre les améliorations de performance et les nombreux bugs corrigés, la mise à jour embarque des nouveautés sur le support JavaScript, à la traîne par rapport au prédécesseur Tapestry 4.<br
/> Le rafraîchissement de plusieurs zones d&#8217;une page en une seule requête Ajax est maintenant supporté. Tapestry embarque maintenant la console JavaScript <a
href="http://www.gscottolson.com/blackbirdjs/" title="Blackbird" >Blackbird</a>.<br
/> Du côté des améliorations sur les templates, le chargement et le rendu des pages ont été optimisés, ce qui rend T5 plus rapide que jamais.<br
/> Vous pourrez aussi apprécier l&#8217;amélioration substantielle de l&#8217;archetype quickstart qui offre désormais une jolie interface, avec un design css intégré.<br
/> L&#8217;intégration de Spring est maintenant à double sens : on peut injecter des services Tapestry dans un Bean Spring.<br
/> Pour la prochaine version, qui sortira sans doute à la rentrée 2009, l&#8217;accent sera mis sur l&#8217;intégration de Spring Web Flow, et la possibilité d&#8217;utiliser une application Tapestry en tant que Portlet.</p><ul><li><a
href="http://tapestry.apache.org/tapestry5.1/release-notes.html" title="Release note" >Release note</a></li><li><a
href="http://tapestry.apache.org/tapestry5.1/" title="Site Maven du projet" >Site Maven du projet</a></li></ul><h4><a
name="TrucsetastucesJsonRestfull"></a>Trucs et astuces Json &#8211; Restfull</h4><p><a
href="http://www.linkedin.com/in/edwink" title="Edwin Khodabakchian" >Edwin Khodabakchian</a>, fondateur de Collaxa (aujourd&#8217;hui au coeur de la stratégie SOA d&#8217;Oracle), nous donne quelques <a
href="http://blog.feedly.com/2009/05/06/best-practices-for-building-json-rest-web-services/" title="bonnes pratiques pour crire des services web REST en utilisant Json" >bonnes pratiques pour écrire des services web REST en utilisant Json</a> (un couple qui a le vent en poupe). Actuellement lancé dans l&#8217;écriture de Feedly, une extension Firefox qui agrège des tweets et des entrés Google Reader, Edwin fera régulièrement profiter ses lecteurs de son expérience. Sans entrer dans les détails de ces bonnes pratiques, nous retiendrons l&#8217;astucieux découpage en 7 phases d&#8217;implémentation :</p><ul><li>Definir un service ou une ressource <strong>simple</strong> : définir le modèle Json et les 4 opérations REST et le servlet qui les fournit.</li><li>Ecrire un client : utiliser le service avec un javascript simple. Cette possibilité est offerte par de nombreux frameworks, dont JQuery.</li><li>Ajouter une étape de validation : modifier le service pour valider les ressources Json et utiliser les codes retour HTTP.</li><li>Complexifier les ressources : modifier la hiérarchie d&#8217;Url pour servir des ressources plus riches. Tester la pérennité des ressources simples (phase 2).</li><li>Ajouter un cache : améliorer les performances et la scalabilité de votre système.</li><li>Implémenter la sécurité : utiliser une authentification web.</li><li>Publier des événements business : pour découpler les processus REST des processus back-end. Les ressources REST sont traitées, un évènement business est lancé, qui déclenche le ou les traitements back-end.</li><li>Gérer un cycle de vie pour les ressources : coupler un état de la ressource avec la phase de validation et la phase de publication des évènements.</li></ul><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="SoireDatagridauParisJug"></a>Soirée Datagrid au Paris Jug</h4><p>Le <a
href="http://blog.xebia.fr/2009/05/06/paris-jug-soiree-grid-computing-le-12-mai/" title="DataGrid au Paris Jug" >DataGrid au Paris Jug</a>, c&#8217;est demain.<br
/> <a
href="http://www.jugevents.org/jugevents/event/16041" title="Pensez  rserver" >Pensez à réserver</a> si ce n&#8217;est déjà fait.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/05/11/revue-de-presse-xebia-108/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>SOA : Du composant au service : L&#8217;autonomie</title><link>http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/</link> <comments>http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#comments</comments> <pubDate>Wed, 29 Apr 2009 07:00:13 +0000</pubDate> <dc:creator>Christophe Heubès</dc:creator> <category><![CDATA[SOA]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1852</guid> <description><![CDATA[Comme son nom le suggère, l&#8217;élément clé de SOA (Service Oriented Architecture) est le Service. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question &#171;&#160;Qu&#8217;est-ce qu&#8217;un service ?&#160;&#187;. Ce sujet débouche invariablement sur, au choix : Un blanc ; [...]]]></description> <content:encoded><![CDATA[<p><a
href="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service.png"><img
src="http://blog.xebia.fr/wp-content/uploads/2009/03/composant-service-150x150.png" alt="composant-service" title="composant-service" width="150" height="150" style="margin: 1em 1em 1em 1em; float: right;" /></a><br
/> Comme son nom le suggère, l&#8217;élément clé de SOA <em>(Service Oriented Architecture)</em> est le <strong>Service</strong>. Il est pourtant difficile de faire le consensus autour de la notion de service et il est souvent difficile de répondre à cette simple question <em><strong>&laquo;&nbsp;Qu&#8217;est-ce qu&#8217;un service ?&nbsp;&raquo;</strong></em>. Ce sujet débouche invariablement sur, au choix : Un blanc ; Une réponse alambiquée et incertaine ; Une discussion enflammée <em>(ou un débat stérile)</em>.</p><p>On pourrait proposer la définition suivante : <em>&laquo;&nbsp;Un Service est un composant logiciel distribué, exposant les fonctionnalités à forte valeur ajoutée d&#8217;un domaine métier&nbsp;&raquo;</em>. Malheureusement, les définitions aussi courtes <em>(bien qu&#8217;exactes)</em> sont nécessairement incomplètes et amènent un florilège de questions.</p><p>Pour répondre plus précisément à la question, nous vous proposons de passer en revue les huit aspects qui caractérisent un service&nbsp;:</p><ul><li><a
href="http://blog.xebia.fr/2009/03/04/soa-du-composant-au-service-le-contrat-standardise/#more-1560">Contrat standardisé</a> : L&#8217;ensemble des services d&#8217;un même Système Technique sont exposés au travers de contrats respectant les mêmes règles de standardisation.</li><li><a
href="http://blog.xebia.fr/2009/03/19/soa-du-composant-au-service-le-couplage-lache/#more-1633">Couplage lâche</a> : Le contrat d&#8217;un service doit imposer un couplage lâche de ses clients.</li><li><a
href="http://blog.xebia.fr/2009/04/03/soa-du-composant-au-service-labstraction/#more-1706">Abstraction</a> : Le contrat d&#8217;un service ne doit contenir que les informations essentielles à son invocation. Seules ces informations doivent être publiées.</li><li><a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/#more-1780">Réutilisabilité</a> : Un service exprime une logique agnostique et peut ainsi être positionné comme une ressource réutilisable.</li><li><a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852">Autonomie</a> : Un service doit exercer un contrôle fort sur son environnement d&#8217;exécution sous-jacent. Plus ce contrôle est fort, plus l&#8217;exécution d&#8217;un service est prédictible.</li><li><a
href="http://blog.xebia.fr/2009/06/04/soa-du-composant-au-service-sans-etat-stateless/#more-2134">Stateless</a> <em>(sans état)</em> : Un service doit minimiser la consommation de ressources en déléguant la gestion des informations d&#8217;état quand cela est nécessaire.</li><li><a
href="http://blog.xebia.fr/2009/06/12/soa-du-composant-au-service-la-decouvrabilite/#more-2196">Découvrabilité</a> : Un service est complété par un ensemble de métas données de communication au travers desquelles il peut être découvert et interprété de façon effective.</li><li><a
href="http://blog.xebia.fr/2009/08/11/soa-du-composant-au-service-la-composabilite/#more-2623">Composabilité</a> : Un service doit être conçu de façon à participer à des compositions de services.</li></ul><p>Ces 8 aspects sont issus du livre &laquo;&nbsp;<a
href="http://www.amazon.com/Principles-Service-Prentice-Service-Oriented-Computing/dp/0132344823">SOA Principles of Service Design</a>&nbsp;&raquo; de Thomas Erl, également auteur du site <a
href="http://www.soaprinciples.com/">SOA Principles</a>.</p><p>Dans ce billet, nous nous attarderons sur la notion d&#8217;<strong><a
href="http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/#more-1852">autonomie</a></strong>.</p><p>Comme nous l&#8217;avons vu dans le précédent billet de cette série : La <a
href="http://blog.xebia.fr/2009/04/16/soa-du-composant-au-service-la-reutilisabilite/" title="rutilisabilit des services" >réutilisabilité des services</a> constitue une des pierres angulaires de la mise en œuvre d&#8217;une architecture orientée service. En effet, la mise en œuvre d&#8217;une SOA vise, entre autres, à <strong>éviter le gaspillage</strong> des ressources en éliminant les redondances inhérentes au modèle en silo. D&#8217;autre part, la réutilisation est une condition première de l&#8217;<strong>agilisation du SI</strong> indispensable à la <strong>réduction du time-to-market</strong>, principal élément de ROI des SOA.<br
/> Mettre l&#8217;emphase sur la réutilisabilité des services commence bien sûr par la fourniture de services proposant une logique réutilisable, mais cela implique également que l&#8217;implémentation de cette logique soit effectivement réutilisable une fois déployée. La confrontation au monde réel est souvent douloureuse.<br
/> En effet, le modèle SOA pousse à maximiser les possibilités de réutilisation des services produits. Les services identifiés comme réutilisables sont ainsi mis à disposition d&#8217;un large spectre de services composites, de processus, d&#8217;applications, &#8230; Au fil du temps, de tels services ont donc vocation à prendre part à un nombre croissant de compositions, d&#8217;orchestrations, de workflow, &#8230;<br
/> Dans cette optique de <strong>sollicitation massive</strong>, il est donc important de concevoir l&#8217;implémentation des services en prêtant tout particulièrement attention à la <strong>concurrence d&#8217;accès</strong>. Les accès concurrents à un service ne doivent en aucun cas modifier son comportement, sa fiabilité ou ses performances. En d&#8217;autres termes, un service doit respecter son contrat <em>(et ses SLAs)</em>, quelque soit le volume de sollicitations auquel il est soumis : <strong>Un service doit être prédictible</strong>.</p><p>Afin de garantir cette prédictibilité dans le cadre d&#8217;accès concurrents, deux principes doivent être appliqués lors de l&#8217;élaboration des services :</p><ul><li>Un service doit <em>(au maximum)</em> être <strong>autonome</strong>.</li><li>Un service doit être <strong>sans état</strong>.</li></ul><p>Ces deux aspects sont fortement liés. En attendant le billet consacré à la notion de <em>&laquo;&nbsp;statelessness des services&nbsp;&raquo;</em>, je vous invite à relire l&#8217;article <a
href="http://blog.xebia.fr/2007/07/24/service-stateful-vs-service-stateless/" title="Service Stateful vs Service Stateless" >Service Stateful vs. Service Stateless</a>.</p><p>Afin que les services s&#8217;acquittent au mieux de leurs engagements <em>(comportement, fiabilité, performances, &#8230;)</em>, ils doivent exercer un contrôle fort sur leur environnement d&#8217;exécution et sur les ressources qui sous-tendent leur implémentation. L&#8217;autonomie d&#8217;un service traduit la mesure du degré de contrôle qu&#8217;un service exerce sur son environnement. Plus un service à de contrôle sur son environnement <em>(plus il est autonome)</em>, plus son comportement au runtime sera prévisible.<br
/> Lors de la décomposition des fonctions du SI en inventaire de services, il est souhaitable de définir les membres de ce registre comme des blocs indépendants. C&#8217;est donc un haut niveau d&#8217;autonomie individuelle des services qui est visé. Réduire l&#8217;accès partagé aux ressources d&#8217;un service et augmenter le niveau d&#8217;isolation physique des services sont deux leviers permettant d&#8217;augmenter cette capacité des services à fonctionner de façon autonome.</p><p>Tous les services d&#8217;un inventaire ne pourront évidement pas offrir un contrôle complet sur leur environnement. C&#8217;est pourquoi Thomas Erl propose de distinguer deux niveaux basiques d&#8217;autonomie :</p><ul><li>L&#8217;<strong>autonomie de niveau service</strong> : Les frontières des services entrant dans cette catégorie sont clairement définies et les services sont indépendants les uns des autres, mais il se peut que ces services partagent encore certaines ressources sur lesquelles ils s&#8217;appuient. Par exemple, un service d&#8217;encapsulation d&#8217;un système legacy, même s&#8217;il régit ce système partage cette ressource avec ses autres clients.</li><li>L&#8217;<strong>autonomie pure</strong> : La logique sous-jacente au service et les ressources qu&#8217;il utilise sont la propriété du service et sous son contrôle exclusif. C&#8217;est le niveau d&#8217;autonomie que l&#8217;on pourra atteindre lors de la création de <em>&laquo;&nbsp;nouveaux&nbsp;&raquo;</em> services quand la logique sous-jacente est construite spécifiquement pour supporter le service.</li></ul><p>La mise en œuvre d&#8217;une SOA se faisant, dans la grande majorité des cas, au sein d&#8217;un existant avec lequel il faut vivre pendant longtemps <em>(la refonte de tout ou partie du SI en mode big-bang est trop coûteuse et trop risquée)</em>, un inventaire de services offrant exclusivement des services d&#8217; un niveau d&#8217;autonomie pure reste un objectif difficilement atteignable. C&#8217;est pourtant cet objectif qu&#8217;il faut viser car un tel inventaire de service permet d&#8217;adresser nos préoccupations de monté en charge et de concurrence d&#8217;accès.</p><p>La mise en œuvre du principe d&#8217;autonomie est donc extrêmement importante car elle détermine dans quel mesure les autres principes peuvent être mis en application dans le monde réel <em>(nos environnements de production)</em> en favorisant la fiabilité et la prédictibilité des services.</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/04/29/soa-du-composant-au-service-lautonomie/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Revue de Presse Xebia</title><link>http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/</link> <comments>http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#comments</comments> <pubDate>Mon, 27 Apr 2009 16:09:31 +0000</pubDate> <dc:creator>Xebia France</dc:creator> <category><![CDATA[Revue de presse]]></category> <category><![CDATA[ActionScript]]></category> <category><![CDATA[Ajax]]></category> <category><![CDATA[Apache]]></category> <category><![CDATA[Flex]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java / JEE]]></category> <category><![CDATA[Java EE 6]]></category> <category><![CDATA[JAX-RS]]></category> <category><![CDATA[Nebula]]></category> <category><![CDATA[RIA]]></category> <category><![CDATA[SOA]]></category> <category><![CDATA[SpringOne]]></category> <category><![CDATA[TeamCity]]></category> <guid
isPermaLink="false">http://blog.xebia.fr/?p=1844</guid> <description><![CDATA[La revue de presse de l’actualité Java/J2EE hebdomadaire proposée par Xebia. Actualité éditeurs / SSII La fondation Apache et JAX-RS RIA Comparatif de framework Ajax Des conseils d&#8217;optimisations pour Flex et ActionScript 3 SOA Vers l&#8217;émergence de Rule-driven process engines ? Le coin de la technique Sortie de TeamCity 4.5 Des nouvelles du projet Nebula [...]]]></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/2009/04/27/revue-de-presse-xebia-106/#LafondationApacheetJAXRS">La fondation Apache et JAX-RS</a></li></ul><p><strong>RIA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#ComparatifdeframeworkAjax">Comparatif de framework Ajax</a></li><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#DesconseilsdoptimisationspourF">Des conseils d&#8217;optimisations pour Flex et ActionScript 3</a></li></ul><p><strong>SOA</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#VerslmergencedeRuledrivenproce">Vers l&#8217;émergence de Rule-driven process engines ?</a></li></ul><p><strong>Le coin de la technique</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#SortiedeTeamCity">Sortie de TeamCity 4.5</a></li><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#DesnouvellesduprojetNebula">Des nouvelles du projet Nebula</a></li></ul><p><strong>Evènements de notre communauté en France et à l&#8217;étranger</strong></p><ul><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#SpringOneannoncedelapremirejou">SpringOne : Annonces de la première journée</a></li><li><a
href="http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/#JavaEEnauraplusdesecretpourvou">Java EE 6 n&#8217;aura plus de secret pour vous &#8230;</a></li></ul><h3><a
name="ActualitditeursSSII"></a>Actualité éditeurs / SSII</h3><h4><a
name="LafondationApacheetJAXRS"></a>La fondation Apache et JAX-RS</h4><p>Une <em>proposal</em> pour l&#8217;intégration d&#8217;un nouveau projet dans l&#8217;Incubator de la fondation Apache <a
href="http://wiki.apache.org/incubator/WinkProposal" title="vient d'être publiée" >vient d&#8217;être publiée</a>. Le projet, dont le nom suggéré est Apache Wink, est une implémentation de JAX-RS (<a
href="http://www.jcp.org/en/jsr/detail?id=311" title="JSR311" >JSR-311</a>) dont le but est de simplifier l&#8217;implémentation de Web Services Restful. L&#8217;équipe est composée de développeurs provenant de HP et d&#8217;IBM. Quatre d&#8217;entre eux sont contributeurs au projet Axis2. Le code du projet est issu d&#8217;un <em>fork</em> de l&#8217;implémentation de JAX-RS du projet CXF.</p><p>La fondation Apache possède déjà une implémentation de JAX-RS au sein du projet CXF. Le projet Axis2, quant à lui, supporte Rest <a
href="http://marc.info/?l=incubator-general&#038;m=124043046431474&#038;w=2" title="mais pas JAXRS" >mais pas JAX-RS</a>. Dans ce contexte, une discussion s&#8217;est engagée autour de la légitimité du projet. On retiendra deux interventions notables :</p><ul><li>Daniel Kulp, du projet CXF, <a
href="http://marc.info/?l=incubator-general&#038;m=124042775326974&#038;w=2" title="intervient assez schement" >intervient assez sèchement</a>, en regrettant que l&#8217;équipe du projet Wink n&#8217;ait pas cherché à consulter l&#8217;équipe CXF sur le sujet. Il souligne par ailleurs le fait que puisque le projet est annoncé comme d&#8217;ores et déjà <em>compliant</em> avec le TCK de JAX-RS, il aura probablement du mal à trouver de nouveaux commiteurs.</li><li>Greg Truty, fondateur du projet Wink et affilié IBM, <a
href="http://marc.info/?l=incubator-general&#038;m=124043038831374&#038;w=2" title="explique" >explique</a> qu&#8217;IBM utilise Axis2 en tant qu&#8217;implémentation JAX-WS et ne peut se permettre de tirer CXF en tant que dépendance pour leur implémentation JAX-RS car il leur faut une librairie indépendante.</li></ul><p>L&#8217;approbation du projet reste incertaine, mais quel que soit le résultat final, le projet Apache Wink naîtra avec un manque certain de légitimité. Il n&#8217;aurait en effet comme seule justification que l&#8217;indépendance à CXF et devrait alors se démarquer face aux nombreuses autres implémentations de la JSR qui sont rapidement apparues et dont <a
href="https://jersey.dev.java.net/" title="Jersey" >Jersey</a> et <a
href="http://www.jboss.org/resteasy/" title="RestEasy" >RestEasy</a> sont déjà de dignes représentants.</p><h3><a
name="RIA"></a>RIA</h3><h4><a
name="ComparatifdeframeworkAjax"></a>Comparatif de framework Ajax</h4><p>Matt Raible a publié sur son blog les <a
href="http://raibledesigns.com/rd/entry/ajax_framework_analysis_results" title="résultats d'un comparatif de frameworks Ajax" >résultats d&#8217;un comparatif de frameworks Ajax</a>. La liste des frameworks est assez restreinte : <a
href="http://extjs.com/products/extjs/" title="Ext JS" >Ext JS</a>, <a
href="http://dojotoolkit.org/" title="Dojo" >Dojo</a>, <a
href="http://developer.yahoo.com/yui/" title="YUI" >YUI</a> et <a
href="http://code.google.com/intl/nl/webtoolkit/" title="GWT" >GWT</a>. On peut entre autres regretter l&#8217;absence du framework Javascript <a
href="http://jquery.com/" title="JQuery" >JQuery</a>. Les résultats de l&#8217;analyse peuvent être étendus à d&#8217;autres frameworks car la <a
href="http://raibledesigns.com/rd/entry/choosing_an_ajax_framework" title="mthode de comparaison est explicitement dfinie" >méthode de comparaison est explicitement définie</a>. Cette évaluation repose sur 20 critères : richesse des composants, qualité de la documentation, productivité de développement, etc.</p><p>Ce qui est le plus intéressant dans cette étude est la méthode, et la grille d&#8217;évaluation avec ses critères. Cette méthode peut aussi être étendue à  différents contextes de développement d&#8217;applications Web.</p><p>On remarque que tous les frameworks reçoivent une bonne note, à l&#8217;exception de Ext JS.</p><h4><a
name="DesconseilsdoptimisationspourF"></a>Des conseils d&#8217;optimisations pour Flex et ActionScript 3</h4><p>Suite à son article présentant <a
href="http://www.adobe.com/devnet/flex/articles/best_practices_pt1.html" title="les bonnes pratiques Flex" >les bonnes pratiques Flex</a>, Sean Moore présente <a
href="http://www.adobe.com/devnet/flex/articles/best_practices_pt1.html" title="ici" >ici</a> quelques conseils d&#8217;optimisation pour Flex et ActionScript 3.<br
/> Voici quelques conseils intéressants à retenir :</p><p><strong>Les optimisations pour ActionScript 3 :</strong></p><ul><li>Au niveau des tableaux (Array) :</li><ul><li>Eviter les <em>new</em> et préférer [] à la place.</li></ul></ul><ul><li>Au niveau du code :</li><ul><li>Utilisation de <em>const</em> pour les constantes,</li><li>Privilégier dans la condition du <em>if</em> l&#8217;évènement qui se produit le plus,</li><li>Utiliser des entiers dans les boucles <em>for</em>,</li><li>Privilégier la multiplication plutôt que la division.</li></ul></ul><ul><li>L&#8217;auteur nous donne également quelques conseils sur les performances du code ; nous apprenons ainsi que :</li><ul><li>il n&#8217;y a pas de différence de performance entre le <em>if</em> et le <em>switch</em></li><li>la longueur du nom d&#8217;une méthode n&#8217;a pas d&#8217;incidence sur les performances</li></ul></ul><p><strong>Les optimisations pour MXML</strong></p><ul><li>Eviter les repeaters sur des données scrollables</li><li>Eviter l&#8217;utilisation excessive voire inutile de conteneurs (tels que VBox), cela impacte les performances de l&#8217;application</li><li>Lors de l&#8217;utilisation de repeaters, mettre la propriété <em>recycleChildren</em> à true pour que les éléments enfants ne soient pas créés à nouveau s&#8217;ils existent déjà</li><li>Mettre la propriété creationPolicy à &laquo;&nbsp;queued&nbsp;&raquo; pour différer la création de conteneur dans le cas de multiples vues.</li></ul><p>Bien que certaines informations puissent être applicables à tous les langages, certains points sont spécifiques au langage AS3/MXML, et peuvent rendre une application bien plus performante. Des informations bien utiles et à mettre en pratique sur tous projets Flex.</p><h3><a
name="SOA"></a>SOA</h3><h4><a
name="VerslmergencedeRuledrivenproce"></a>Vers l&#8217;émergence de Rule-driven process engines ?</h4><p>Winston Dhanraj vient de terminer une série de deux articles (<a
href="http://community.zdnet.co.uk/blog/0,1000000567,10012337o-2000643352b,00.htm" title="partie 1" >partie 1</a> et <a
href="http://community.zdnet.co.uk/blog/0,1000000567,10012612o-2000643352b,00.htm" title="partie 2" >partie 2</a>) portant sur la convergence des technologies de BPM, en apportant une observation du marché actuel, principalement focalisée sur la séparation entre processus et règles. Il y oppose deux camps :</p><ul><li>La vision traditionnelle, représentée par les poids lourds du marché que sont IBM, Oracle, Microsoft et Tibco, qui se base sur un faible couplage entre le moteur de processus et le moteur de règles (éventuellement apporté par un éditeur tierce).</li><li>Une vision émergente, représentée par Pegasystems et sa solution <a
href="http://www.pega.com/Products/SmartBPM-5-4.asp" title="SmartBPM Suite" >SmartBPM Suite</a>, qui préconise un moteur unifié de processus et règles <em>(rule-driven process engine)</em>, rendant ainsi ces deux composants conscients l&#8217;un de l&#8217;autre.</li></ul><p>Bien que reconnaissant sa plus grande complexité, l&#8217;auteur expose clairement son intérêt pour la seconde solution en mettant en avant ses atouts par rapport aux BPMs traditionnels :</p><ul><li>La logique conditionnelle n&#8217;a plus à être intégrée au sein du processus (évitant ainsi de produire des processus surchargés) ni déléguée à un moteur de règles externe, forcément non conscient du contexte d&#8217;invocation</li><li>Les possibilités du moteur de règles peuvent être pleinement exploitées du fait de l&#8217;information contextuelle dont il dispose, évitant ainsi de le transformer en simple tableau de décision</li><li>La transition vers une nouvelle version d&#8217;un processus est simplifiée</li><li>Il n&#8217;est plus nécessaire de maintenir synchronisés les modèles métiers manipulés par le moteur de processus et de règles</li></ul><p>Ce concept de moteur unifié n&#8217;était présent jusqu&#8217;alors que dans le monde commercial, grâce à l&#8217;offre de Pegasystems. Un produit Open Source s&#8217;apprête toutefois à changer la donne : JBoss Drools 5 est attendu en version finale dans <a
href="https://jira.jboss.org/jira/browse/JBESB-2271" title="les semaines à venir" >les semaines à venir</a> (une <a
href="http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html" title="CR1 étant d'ores et déjà disponible" >CR1 étant d&#8217;ores et déjà disponible</a>). En effet, alors que Drools se limitait jusqu&#8217;alors à un moteur de règles, il évolue pour offrir maintenant un BPM unifié. On notera que la gestion de processus est apportée par un sous-projet nommé Drools Flow et non par jBPM ; Mark Proctor, <em>JBoss Drools Lead</em>, <a
href="http://lists.jboss.org/pipermail/rules-users/2008-November/007015.html" title="explique ce choix" >explique ce choix</a> par des points de vue divergents entre les équipes des deux projets, l&#8217;équipe jBPM préférant ne pas s&#8217;engager sur cette nouvelle vision qu&#8217;elle juge trop complexe.</p><p>L&#8217;arrivée d&#8217;un acteur majeur supplémentaire comme JBoss permettra sans nul doute de donner un crédit supplémentaire à cette nouvelle vision du BPM. Toutefois seule une adoption de cette évolution par les poids lourds du marché permettra de la démocratiser.</p><h3><a
name="Lecoindelatechnique"></a>Le coin de la technique</h3><h4><a
name="SortiedeTeamCity"></a>Sortie de TeamCity 4.5</h4><p><a
href="http://www.theserverside.com/news/thread.tss?thread_id=54381" title="The Server Side" >The Server Side</a> nous informe de la sortie de <a
href="http://www.jetbrains.com/teamcity/index.html" title="TeamCity" >TeamCity</a>, le serveur d&#8217;intégration continue de <a
href="http://www.jetbrains.com" title="JetBrains" >JetBrains</a>, dans sa version 4.5</p><p>Pas de révolution dans cette version mais de <a
href="http://www.jetbrains.com/teamcity/features/newfeatures.html" title="nouvelles fonctionnalités" >nouvelles fonctionnalités</a> font leur apparition (la <a
href="http://www.jetbrains.com/teamcity/features/index.html" title="liste complte" >liste complète</a> est plus que respectable). Parmi les plus intéressantes, on note:</p><ul><li>Une meilleure interface utilisateur,</li><li>Gestion de groupes d&#8217;utilisateurs,</li><li>Intégration LDAP,</li><li>Une meilleure intégration avec nos IDEs (Eclipse, Visual Studio et bien sûr IDEA),</li><li>Utilisation des résultats (format XML) de frameworks tels que JUnit, NUnit, Surefire, PMD ou FindBugs,</li><li>Support du framework MONO,</li><li>Assignation d&#8217;une responsabilité à un utilisateur,</li><li>Détection de crash JVM&#8230;</li></ul><p>À noter qu&#8217;il est possible que votre agent par défaut soit écrasé comme ça a été le cas chez <a
href="http://blog.developpez.com/java/p7527/4-edi-et-outils-java/sortie-de-teamcity-4-5/" title="Developpezcom" >Developpez.com</a> mais pas de panique au niveau des données (qui ont toutes été récupérées).</p><p>Une application à essayer d&#8217;urgence, rendez-vous est pris dans la section <a
href="http://www.jetbrains.com/teamcity/download/index.html" title="tlchargement" >téléchargement</a> !</p><h4><a
name="DesnouvellesduprojetNebula"></a>Des nouvelles du projet Nebula</h4><p><a
href="http://www.eclipse.org/projects/project_summary.php?projectid=technology.nebula" title="Nebula" >Nebula</a> est un projet <a
href="http://www.eclipse.org/" title="Eclipse" >Eclipse</a> à destination des développeurs <a
href="http://www.eclipse.org/home/categories/index.php?category=equinox" title="Eclipse RCP" >Eclipse RCP</a>. Son but est de fournir des composants SWT évolués.</p><p>En effet, les composants SWT fournis en standard <em>font le travail</em> mais restent de très bas niveau. Qui n&#8217;a jamais essayé de mettre une checkbox éditable dans une cellule de son tableau <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ? Il est bien sûr tout à fait possible de l&#8217;implémenter soi-même, mais l&#8217;idéal serait d&#8217;avoir un composant tiers qui gère nativement ce genre de fonctionnalités avancées (très appréciables !).</p><p>Actuellement tous en incubation, on trouve en <a
href="http://www.eclipse.org/nebula/downloads.php" title="tlchargement" >téléchargement</a> :</p><ul><li>la <a
href="http://www.eclipse.org/nebula/widgets/gallery/gallery.php" title="galerie" >galerie</a> (seul composant étiqueté <em>stable</em>),</li><li>le <a
href="http://www.eclipse.org/nebula/widgets/grid/grid.php" title="tableau" >tableau</a> (édition de cellule, colonnes groupées, entêtes multiples&#8230;),</li><li>le <a
href="http://www.eclipse.org/nebula/widgets/pgroup/pgroup.php" title="panel avanc" >panel avancé</a>,</li><li>l&#8217;<a
href="http://www.eclipse.org/nebula/widgets/pshelf/pshelf.php" title="accordon" >accordéon</a>,</li><li>des animations (non officielles).</li></ul><p>On note toutefois une communication sur de nouveaux composants, pas encore en téléchargement mais récupérables sur le <a
href="http://www.eclipse.org/nebula/source.php" title="CVS du projet" >CVS du projet</a> (<a
href="http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.swt.nebula/?root=Technology_Project" title="Web browser" >Web browser</a>) :</p><ul><li>un <a
href="http://www.eclipse.org/nebula/widgets/calendarcombo/calendarcombo.php" title="calendrier avanc" >calendrier avancé</a>,</li><li>un <a
href="http://www.eclipse.org/nebula/widgets/cdatetime/cdatetime.php" title="datetime" >date/time</a>,</li><li>un <a
href="http://www.eclipse.org/nebula/widgets/collapsiblebuttons/collapsiblebuttons.php" title="accordonbouton avanc" >accordéon/bouton avancé</a>,</li><li>un <a
href="http://www.eclipse.org/nebula/widgets/formattedtext/formattedtext.php" title="texte format" >texte formaté</a>,</li><li>un <a
href="http://www.eclipse.org/nebula/widgets/ganttchart/ganttchart.php" title="diagramme de Gantt" >diagramme de Gantt</a>.</li></ul><p>Et, petite surprise, même si pour l&#8217;instant aucune communication n&#8217;a été faite, le <strike>jira</strike> bugzilla du projet semble indiquer l&#8217;arrivée possible d&#8217;autres composants tels que :</p><ul><li>un <a
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=267015" title="ruban type office" >ruban type office</a>,</li><li>un <a
href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=255340" title="diteur de texte riche" >éditeur de texte riche</a>.</li></ul><p>Nebula propose toujours son <a
href="http://www.eclipse.org/downloads/download.php?file=/technology/nebula/examples/downloads/drops/latest/nebula-examples-ALL-incubation.zip" title="plugin eclipse dexemples" >plugin eclipse d&#8217;exemples</a> qui permet de faire un rapide tour d&#8217;horizon des composants.<br
/> Pour des exemples de code, ça se passe dans la section <a
href="http://www.eclipse.org/nebula/snippets.php" title="snippets" >snippets</a>.</p><h3><a
name="EvnementsdenotrecommunautenFra"></a>Evènements de notre communauté en France et à l&#8217;étranger</h3><h4><a
name="SpringOneannoncedelapremirejou"></a>SpringOne : Annonces de la première journée</h4><p>Aujourd&#8217;hui se déroulait la <a
href=" http://blog.xebia.fr/2009/04/22/springone-2009/" title="premire journe de SpringOne Europe  Amsterdam" >première journée de SpringOne Europe à Amsterdam</a>. La conférence a débuté par une <em>keynote</em> théâtrale  menée par Rod Johnson en personne. Partant d&#8217;un point de départ plutôt piquant : <em>&laquo;&nbsp;l&#8217;acquisition de Sun par Oracle !&nbsp;&raquo;</em> et d&#8217;une phrase quelque peu cinglante <em>&laquo;&nbsp;Ce n&#8217;est pas avec Oracle que nous pouvons espérer les nouveautés du monde Java&nbsp;&raquo;</em> (nous lui laissons la paternité de ce propos peu amène), Rod a annoncé les nouvelles directions stratégiques prises par SpringSource :</p><ul><li>Phase 1, s&#8217;enfuir de Java EE !</li><li>Phase 2, améliorer la productivité des développeurs Java.</li></ul><p>Différentes annonces ont donc été faites dans ce sens durant cette keynote :</p><ul><li><strong>Sortie de tcServer  en GA</strong> : SpringSource espère toucher différents publics avec ce serveur : les utilisateurs de serveurs Java EE désirant migrer vers une solution plus simple et moins onéreuse, mais aussi les utilisateurs de Tomcat en recherche de console d&#8217;administration.</li><li><strong>Sortie du futur nouveau produit &#8216;Spring ROO&#8217;</strong> (vous pouvez <a
href="http://cloud.springsource.com/vote/" title="voter" >voter</a> pour son nom) que nous avions déjà évoqué à plusieurs reprises. Ce projet, décrit comme le Grails pour code Java, vise à augmenter la productivité des développements en proposant différents mécanismes de génération de code, et une intégration aux outils de développements <em>(Maven2, Eclipse &#8230;)</em>.</li><li><strong>SpringSource Tool Suite (STS)</strong> : Brique indispensable pour tirer la meilleur partie de Spring ROO, STS sera dorénavant diffusé gratuitement. Il contiendra, outre les plugins Spring, Mylyn et autres tutoriaux que nous connaissions déjà, une intégration directe avec la console Spring ROO.</li></ul><p>Continuez à suivre Spring One Europe <a
href="http://twitter.com/ealliaume" title="via twitter" >via twitter</a>.</p><h4><a
name="JavaEEnauraplusdesecretpourvou"></a>Java EE 6 n&#8217;aura plus de secret pour vous &#8230;</h4><p><a
href="http://agoncal.wordpress.com/2009/04/26/a-book-about-java-ee-6/" title="Antonio Goncalves" >Antonio Goncalves</a> vient de terminer l&#8217;écriture de son livre : <a
href="http://apress.com/book/view/9781430219545" title="Beginning Java EE 6 Platform with GlassFish 3: From Novice to Professional" >Beginning Java EE 6 Platform with GlassFish 3: From Novice to Professional</a>. Celui-ci est en cours de publication et devrait être disponible à la vente fin mai. Antonio, que vous connaissez probablement comme l&#8217;un des leaders du <a
href="http://www.parisjug.org/xwiki/bin/view/Main/WebHome" title="ParisJug" >ParisJug</a>, est également un membre du JCP et intervient sur les <a
href="http://www.jcp.org/en/jsr/detail?id=316" title="JSR-316" >JSR-316</a> (Java EE 6), <a
href="http://www.jcp.org/en/jsr/detail?id=317" title="JSR-317" >JSR-317</a> (JPA 2.0) et <a
href="http://www.jcp.org/en/jsr/detail?id=318" title="JSR318" >JSR-318</a> (EJB 3.1).</p><p>Félicitions pour ce nouvel ouvrage, nous avons hâte de le lire. Tu vas pouvoir souffler un peu avant Java EE 7 <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p><p>Pouvons-nous espérer une reprise de ton <a
href="http://www.editions-eyrolles.com/Livre/9782212123630/java-ee-5?xd=c81b7c01cdce121d12db9b0d2b1cbffe" title="ancien livre" >ancien livre</a> <img
src='http://blog.xebia.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> ?</p> ]]></content:encoded> <wfw:commentRss>http://blog.xebia.fr/2009/04/27/revue-de-presse-xebia-106/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> </channel> </rss>
