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

<channel>
	<title>Next Presso</title>
	<atom:link href="http://www.next-presso.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.next-presso.com</link>
	<description>Java, Seam, Spring &#38; co</description>
	<lastBuildDate>Sat, 21 Apr 2012 20:55:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Please JBoss don&#8217;t let CDI become the &#8220;Betamax&#8221; of Java by destroying Seam 3</title>
		<link>http://www.next-presso.com/2011/09/please-jboss-dont-let-cdi-become-the-betamax-of-java-by-destroying-seam-3/</link>
		<comments>http://www.next-presso.com/2011/09/please-jboss-dont-let-cdi-become-the-betamax-of-java-by-destroying-seam-3/#comments</comments>
		<pubDate>Fri, 30 Sep 2011 13:42:07 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[CDI]]></category>
		<category><![CDATA[Seam]]></category>

		<guid isPermaLink="false">http://www.next-presso.com/?p=358</guid>
		<description><![CDATA[Following the <a href="http://relation.to/Bloggers/SoWhatsHappeningWithSeam" target="_blank">in.relation.to</a> blog post of last tuesday.As a tech lead on one Seam Module (Seam Social),  I wrote this open Letter to Red Hat employees in charge of Seam project and community. I find useful to share my point of view with the community on this matter.  You also might find interesting to read the <a href="http://hannelita.wordpress.com/2011/09/28/seam-3-whats-going-on/" target="_blank">blog post of Hannelita</a> on the same subject. [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://t3.gstatic.com/images?q=tbn:ANd9GcQNHkaAUCvMxaQKyp2C33sIfRo1LJ8nhQahRRg0KrMGZhqElYzI" alt="" width="195" height="127" /><br />
Following the <a href="http://relation.to/Bloggers/SoWhatsHappeningWithSeam" target="_blank">in.relation.to</a> blog post of last tuesday, as a tech lead on one Seam Module (<a href="http://seamframework.org/Seam3/SocialModule" target="_blank">Seam Social</a>),  I wrote this open Letter to Red Hat employees in charge of Seam project and community. I find useful to share my point of view with the community on this matter.  You also might find interesting to read the <a href="http://hannelita.wordpress.com/2011/09/28/seam-3-whats-going-on/" target="_blank">blog post of Hannelita</a> on the same subject.</p>
<p>Here is my letter :</p>
<p><em>This email is a tentative to gather and synthesize all my thought following the yesterday announce on in.relation.to about Seam 3 reorganization. I want it to be seen as a positive feedback. I don&#8217;t pretend to have all the answers but being someone external to Red Hat and having worked with other frameworks / technologies give me (I think) a better &#8220;big picture&#8221; view and a more objective perception of the matter.</em></p>
<h2><em>Who&#8217;s talking ?</em></h2>
<p><em>I&#8217;m not going to tell you all my life here. But it can help for my legitimacy to know that I graduated from a famous IT School in 1995 (yes I&#8217;m 40) and had been working in IT since then. I started with C / C++ and then Lotus Domino (talking about mistakes). I started looking into Java in 1997 as a hobby and more seriously for work in 2001. I worked with a lot of Java frameworks : pure servlet and JSP, Struts 1.X, iBatis, Spring, JSF, Hibernate, EJB3, Seam 2 (I started with 2 beta in 2007) to finally adopt Java EE 6.</em></p>
<p><em>I&#8217;d been  working alone for 10 years then after that as a CTO in a small Web Agency (where I learnt some web marketing) and I&#8217;ve bee working since 2009 as a consultant in an IT Consulting company specialized on Java. My Job is to audit applications, design new application as an architect and doing support to other developer on a bunch of technologies.</em></p>
<h2><em>History (knowing our &#8220;opponent&#8221;)</em></h2>
<p><em>Again, I&#8217;m not going to write a novel here but I think it&#8217;s better to put things in perspective.</em></p>
<p><em>JCP had clearly a bad start. Most of specification in J2EE before Java EE 5 were full of flaws (especially EJB 1.X and 2.X). That&#8217;s mainly the reason why Spring was created and has been so successful : it was a pragmatic and rather clean way to address Java Enterprise needs. From a lightweight solution spring grown to a heavy but quite consistent eco-system and today it has a big market share in the Java Industry. Meanwhile spring was getting bigger, the JCP somehow took notice of its past errors and worked to change things and provide nice specification for the new Java EE edition. But we had to wait for Java EE 6 to get an official standard that was able to compete with Spring (the de Facto Standard) thanks to CDI and the tremendous work that JBoss guys put in it.</em></p>
<p><em>So today we are in a paradoxical situation where the official Java EE stack is the challenger of the de facto standard : Spring. To be honest, Java EE is better than core Spring but not way better. Also Spring has a lot of popular modules that help developers in their daily work (a big eco-system). A lot of  company have invested on Spring (training, support, etc&#8230;) and they have no obvious reason to switch to Java EE 6. If we want to bring them to this switch we have to build something better and something bigger</em></p>
<h2><em>What should be Red Hat goals ?</em></h2>
<p><em>The main goal for Red Hat is to sell licenses and support. I don&#8217;t know your exact income on JBoss activity but with a real big Java EE adoption, those incomes should rise very clearly. Right now most of the JBoss EAP server I see at my customer run Spring application and most of these server could be switched to Tomcat or Jetty tomorrow without any big trouble (the same for most WAS or Weblogic).</em></p>
<p><em>A secondary goal (that interest me more) is philosophical. The Java EE 6 stack is a community creation, its blue print doesn&#8217;t belong to a single shop and tomorrow if someone want to propose something new he could contribute to this community. Ok, it&#8217;s not perfect but for me it&#8217;s far way  better than having VMWare deciding what&#8217;s good and wrong for me. I often say to Spring Fanboys that if they want to have one editor to decide for them they&#8217;d better switch to .Net : Microsoft does a better Job than VMWare  and C# is better than Java <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> . The advantage of Java eco-system is the community. So the Goal is to use the force of this community and bring open solutions to them.</em></p>
<p><em>Creating a big and good CDI eco-system will create value, bring real competition to the Java stack and create more business for Red Hat (AS license or support on main CDI components)</em></p>
<h2><em>Why CDI is so special</em></h2>
<p><em>CDI is not a spec among others. It&#8217;s the long awaited cement in Java EE stack. It could have been an extension of EJB spec but it was clever to create it as a separate spec and allow it to deal with EJBs. CDI is the first Java EE spec that contains in its DNA a natural extension mechanism. And last but not least CDI is probably the first Java EE spec to be usable in its V 1.0 (perhaps with Jax-RS).</em></p>
<p><em>A common critic to Java EE is that it has a very long cycle between each iteration and that it delivers outdated specs. Another common critic is that it provides a bunch of specs that doesn&#8217;t work well together.</em></p>
<p><em>This second critic was addressed by Seam 2. Seam was a big help to make Java EE 5 easy to use, but as you know it was proprietary.</em></p>
<p><em>CDI address both critics : it has the potential to provide the same services than Seam 2  and it is a good way to extend Java EE between two versions.</em></p>
<p><em>To sum up CDI is a central spec for Java EE (it&#8217;s its spine) :</em></p>
<ol>
<li><em>CDI is the cement between main Java EE spec</em></li>
<li><em>CDI the &#8220;melting pot&#8221; engine for adding new spec in Java EE. First in a proprietary approach and then by standardization in next EE version.</em></li>
<li><em>For extension that can&#8217;t be integrated in Java EE (like Seam social) it&#8217;s an elegant and seamless way to enhance the stack.</em></li>
</ol>
<h2><em>Past and present Errors</em></h2>
<h3>Error 1 : a bad name</h3>
<p><em>The first error in my opinion was to call it &#8220;Seam 3&#8243;. This bad choice triggered these pb :</em></p>
<ol>
<li><em>giving the impression that Seam 3 was an evolution of Seam 2. Which it is not.</em></li>
<li><em>creating the obligation to build a compatibility module from Seam 2 to Seam 3. This module is costing a lot of energy to the community and will only produce deception</em></li>
<li><em>Hiding the CDI nature of these extensions by calling them after  the name of an &#8220;old&#8221; JBoss proprietary framework</em></li>
</ol>
<div><em>What is done is done, Seam 3 is now among us, but the legacy is heavy&#8230;</em></div>
<h3>Error 2 : pretending Spring doesn&#8217;t exist</h3>
<p><em> Ignore existing market is a big mistake. Spring is well implanted and doing as if it wasn&#8217;t there is wrong. I think a better way would be to adopt the following philosophy :  &#8220;We know that you had to use this proprietary framework because there was nothing else but now we will show you something new, better, but <strong>that can use your Spring </strong>eco-system&#8221;. Yes the <strong>Spring bridge</strong> is not an option, It&#8217;s a priority. You have to help people switching by giving them a way to use their Spring components so they don&#8217;t feel lost and can use Spring module until Seam has the equivalent functionality.</em></p>
<p><em>Spring team is totally ignoring Java EE. Their ref doc is full of J2EE, EJB 2.1 and nothing about CDI or EJB 3. We have to show the Java community that we&#8217;re more open than them and care about people using Spring to come, see and perhaps adopt the standard. The idea is to behave at the opposite of the locking VMWare strategy by being opened and avoiding trolls and </em><em>misinformation like they do.</em></p>
<h3><em>Error 3  : eating our own dog food with Seam university.</em></h3>
<p><em>Don&#8217;t get me wrong : the idea of Seam University website is great. What is not so great is to use our tool to create the site. We don&#8217;t have time to build something neat, so it&#8217;ll be crappy and we&#8217;ll lost time on it.  Result : bad impression and time wasted. Other Framework don&#8217;t use themselves to create their website, they use standard tools. We should do the same for the Seam website. People are waiting for simple demo and example not a big steam machine like the Seam Wiki is today.</em></p>
<h3><em>Error 4 : mix internal functioning with façade functioning of the project</em></h3>
<p><em>Having Seam module created near their mother project (Hibernate, Resteasy&#8230;) is not a bad idea. The bad idea is to make them disappear from the Seam stack. You can have CDI-persistence (note I didn&#8217;t wrote CDI-Hibernate) driven by Hibernate project , but it should be visible in both  Seam stack and hibernate.  Because One can discover it while using Hibernate or while looking for a persistent CDI extension.</em></p>
<h3><em>Error 5 : giving the impression that those modules will have adherence to Jboss implementation</em></h3>
<p><em>Calling the module Hibernate-CDI or RestEasy-CDI is a big step back (even if you keep portability). Tomorrow developers on WAS or Glassfish won&#8217;t choose them because it doesn&#8217;t support JPA but hibernate (it&#8217;s in the name). A non sense after all the effort that Jboss has injected in working on standard.</em></p>
<p><em>It&#8217;s important that Seam appear as collection of CDI extension that allow to leverage standard Java EE. Having them under one umbrella allow Red Hat to sell optional support for them if people want to use them on WAS, Glassfish, Tomcat or Resin.</em></p>
<h3><em>What should Seam 3 be (according to me) </em></h3>
<p><em>Seam should be turned to the community. I don&#8217;t know if Red Hat would be ok to do that but the core project should be outside of JBoss and community driven. It would be the best solution to gather our effort with those of CDI Source, Codi, Caucho and others.</em></p>
<p><em>Seam 3 should run on all CDI implementation. That&#8217;s a priority (today, Solder doesn&#8217;t work on Candi, I didn&#8217;t tested on Open WebBeans but I guess there are issues).</em></p>
<p><em>Seam should provide light modules with good documentation and example. I mention that because i have he impression that Solder is becoming a kind of trash can. It&#8217;s not good. On the other way the split between persistence and transaction was a good move in my opinion</em></p>
<p><em>Seam should have a clear roadmap and timeline. We have to communicate, communicate and communicate. Don&#8217;t forget that we have to convince people using an equivalent solution. We must show why we are better and that we have a clear Goal.</em></p>
<p><em>Thanks for your time reading my long mail. I hope it&#8217;ll be useful and I&#8217;m ready to contribute to these orientation.</em></p>
<p><em>regards,</em></p>
<p><em>Antoine</em></p>
<p><strong>UPDATE : </strong>Shane Bryzak project leader on Seam 3 <a href="http://in.relation.to/Bloggers/SeamNextUpdate" target="_blank">posted an update</a> this morning, to explain there is something in preparation around Seam.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2011/09/please-jboss-dont-let-cdi-become-the-betamax-of-java-by-destroying-seam-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Synchronisation automatique de l&#8217;agenda et des contacts entre Google, le Mac et l&#8217;iPhone</title>
		<link>http://www.next-presso.com/2009/08/synchronisation-automatique-de-lagenda-et-des-contacts-entre-google-le-mac-et-liphone/</link>
		<comments>http://www.next-presso.com/2009/08/synchronisation-automatique-de-lagenda-et-des-contacts-entre-google-le-mac-et-liphone/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 03:57:38 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Non classé]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=297</guid>
		<description><![CDATA[<p>Voici un petit tutoriel sur la mise en œuvre de la synchronisation entre les applications Google Calendar et contacts, votre Mac et votre iPhone, que vous utilisiez la version standard des applis Google ou la version Google Apps. </p> Résultats et limitations <p>A l&#8217;issue de cette mise en place, vous pourrez modifier vos agendas et [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit tutoriel sur la mise en œuvre de la synchronisation entre les applications Google Calendar et contacts, votre Mac et votre iPhone, que vous utilisiez la version standard des applis Google ou la version Google Apps.<br />
<span id="more-297"></span></p>
<h3>Résultats et limitations</h3>
<p>A l&#8217;issue de cette mise en place, vous pourrez modifier vos agendas et contacts sur l&#8217;un des trois environnements et voir vos modifications appliquées automatiquement sur les deux autres.</p>
<p>La solution a malheureusement 3 limitations  qui devraient disparaître avec le temps :</p>
<ul>
<li>les listes de tâches ne peuvent pas être pris en charge par ce système</li>
<li>Pour envoyer un rendez-vous à des invités pour une réunion; vous devrez utiliser Google Calendar, les deux autres plate-forme provoqueront un bug si vous tenter de le faire</li>
<li>Vous ne pouvez pas synchroniser les groupes de contacts</li>
</ul>
<h3>Avant de commencer</h3>
<p>Ce n&#8217;est pas obligatoire mais avant de commencer, je vous conseil de désactiver la synchronisation d&#8217;iCal et du carnet d&#8217;adresse avec votre iPhone via iTunes à moins que vous n&#8217;aimiez avoir votre agenda et carnet d&#8217;adresse en double .Vous pouvez le faire en ayant connecté votre iPhone à votre Mac et en entrant dans les paramètres de synchronisation de l&#8217;iPhone.</p>
<p>Et n&#8217;oubliez pas les sauvegardes.</p>
<h3>Connexion entre iCal et Google Calendar</h3>
<p>Pour ajouter votre agenda Google dans iCal, rien de plus simple. Dans iCal allez dans les préférences sur l&#8217;onglet &#8220;compte&#8221;. Ajoutez un compte</p>
<p><img class="aligncenter size-medium wp-image-312" title="Nouveau compte iCal" src="http://www.next-presso.fr/wp-content/uploads/2009/07/Image-1-300x197.png" alt="Nouveau compte iCal" width="300" height="197" /></p>
<p>Saisissez votre login et mot de passe Google. Si votre agenda est dans Google Apps saisissez le login complet avec votre nom de domaine.</p>
<p>Dans &#8220;options du serveur&#8221;, saisissez l&#8217;url de votre calendrier Google semblable à celle-ci : &#8220;<strong>https://www.google.com/calendar/dav/<em>votrelogin</em>/user</strong>&#8220;. Si vous utilisez Google Apps n&#8217;oubliez pas de mettre le domaine également.</p>
<p>Après avoir validé vous obtenez une nouvelle entrée dans la liste des comptes :</p>
<p><img class="aligncenter size-medium wp-image-311" title="Listes de comptes" src="http://www.next-presso.fr/wp-content/uploads/2009/07/Image-5-300x248.png" alt="Listes de comptes" width="300" height="248" />Si vous avez accès à d&#8217;autres agendas à partir de ce compte Google calendar, vous pouvez utiliser l&#8217;onglet délégation pour ajouter ces agendas supplémentaire à iCal.</p>
<p>Vous pouvez désormais utiliser votre agenda aussi bien sous iCal que sous Google. Si vous disposez d&#8217;un ancien agenda sous iCal vous pouvez l&#8217;exporter au format ics (menu fichier/exporter) pour l&#8217;importer das votre nouvel agenda via iCal et le menu Fichier/Importer. Les modifications seront répliquées vers Google Calendar.</p>
<h3>Préparation de votre compte Google Apps pour l&#8217;iPhone</h3>
<p>Cette étape est nécessaire si vous utilisez un compte Google Apps (pour un compte Goggle classique vous pouvez passer au paragraphe suivant). Vous devez configurer votre compte Google Apps pour supporter le push  vers l&#8217;iPhone. Pour cela vous devez vous rendre dans le tableau de bord de votre compte Google Apps (en tant qu&#8217;administrateur Google Apps) et passer en mode &#8220;nouvelle génération&#8221; du panneau de configuration dans les paramètres du Domaine.</p>
<p><img class="aligncenter size-medium wp-image-314" title="Panneau de configuration Google Apps" src="http://www.next-presso.fr/wp-content/uploads/2009/07/Image-2-300x129.png" alt="Panneau de configuration Google Apps" width="300" height="129" />Cette action basculera votre interface d&#8217;administration en anglais (mais pas le tableau de bord et les applications de vos utilisateurs qui devrait rester en Français).</p>
<p>L&#8217;option permet d&#8217;accéder aux paramètre de configuration des mobiles. Vous pouvez désormais accéder au menu &#8220;Service Settings / Mobile&#8221;. Dans cette page cochez &#8220;Enable Google Sync&#8221; et validez pour pouvoir configurer vos iPhone afin qu&#8217;ils se synchronisent avec Calendar et Contact.</p>
<h3>Configuration de l&#8217;iPhone</h3>
<p>Les manipulations suivantes vont écraser vos données d&#8217;agenda sur votre iPhone, donc avant tout <strong>faites une sauvegarde</strong>.</p>
<p>Nous allons un créer un compte pour exploiter le service Google Sync qui se comporte du point de vue de l&#8217;iPhone comme un serveur Exchange. Bien que nous créions un compte mail iPhone, celui-ci ne pourra pas servir à récupérer vos mails Google pour le moment : le service Google Sync ne supporte pour l&#8217;instant que l&#8217;agenda et les contacts. Pour la messagerie, on devra créer un autre compte classique dans l&#8217;iPhone (soit Gmail, soit imap3 pour Google Apps).</p>
<p>Rendez-vous dans la configuration de l&#8217;iPhone dans la rubrique &#8220;Mails, Contacts, Calendrier&#8221; et ajoutez un nouveau compte en sélectionnant &#8220;Ajouter un compte&#8221;.</p>
<p><img class="aligncenter size-medium wp-image-318" title="choix de compte" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0332-200x300.PNG" alt="choix de compte" width="200" height="300" /></p>
<p>Choisissez Microsoft Exchange comme type de compte. Vous arrivez sur le formulaire suivant :</p>
<p><img class="aligncenter size-medium wp-image-319" title="Config 1" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0333-200x300.PNG" alt="Config 1" width="200" height="300" /></p>
<p>Saisissez les informations de votre compte Google. Le nom d&#8217;utilisateur doit inclure votre domaine si vous configurez votre iPhone pour Google Apps. Une fois vos paramètres saisis cliquez sur &#8220;Suivant&#8221;. L&#8217;iPhone part dans une vérification (pouvant durer plusieurs minutes) du compte &#8220;Exchange&#8221;. A l&#8217;issue de cette étape vous serez probablement invité à saisir l&#8217;adresse du serveur &#8220;Exchange&#8221;. Il s&#8217;agit de &#8220;m.google.com&#8221; pour ce qui nous concerne. Saisissez l&#8217;adresse et tapez sur &#8220;suivant&#8221;</p>
<p><img class="aligncenter size-medium wp-image-321" title="config 2" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0335-200x300.PNG" alt="config 2" width="200" height="300" /></p>
<p>Le dernier écran vous permet de choisir les éléments à synchroniser. Désactivez &#8220;Courrier&#8221; (sinon le compte ne fonctionnera pas) et contacts (pour l&#8217;instant. nous l&#8217;activerons plus tard si vous le souhaitez dans la suite du tutoriel)</p>
<p><img class="aligncenter size-medium wp-image-322" title="config 3" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0336-200x300.PNG" alt="config 3" width="200" height="300" /></p>
<p>Après avoir choisi &#8220;terminé&#8221; vous avez activé la synchronisation entre votre agenda Google et votre iPhone. Si vous disposez de plusieurs agendas dans votre compte Google, vous pouvez maintenant choisir précisément quels agenda synchroniser avec votre iPhone.</p>
<h3>Choix des Agendas délégués à synchroniser</h3>
<p>A partir de l&#8217;OS 3.0 de l&#8217;iPhone, vous pouvez synchroniser jusqu&#8217;à 25 agendas avec votre joujou. Pour choisir les agendas Google que vous souhaitez synchroniser pour un compte Google standard, rendez-vous avec votre iPhone sur http://m.google.com/sync. Si vous êtes en Français, vous allez être accueilli par une page disant que votre matériel n&#8217;est pas compatible.  Cliquez sur &#8220;changer de langue&#8221; en bas de l&#8217;écran pour passer en anglais, et magie&#8230; votre appareil est maintenant compatible. Il ne reste plus qu&#8217;à vous identifier.</p>
<p><img class="aligncenter size-medium wp-image-325" title="Google Sync" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0337-200x300.PNG" alt="Google Sync" width="200" height="300" /></p>
<p>Si vous configurez un compte Google Apps, vous devrez d&#8217;abord configurer votre domaine sur http://m.google.com ou via <a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284815942&amp;mt=8" target="_blank">l&#8217;application gratuite Google</a> pour l&#8217;iPhone, puis passer votre interface en anglais également. Votre interface s&#8217;enrichit de nouvelles icônes dont &#8220;sync&#8221; :</p>
<p><img class="aligncenter size-medium wp-image-326" title="Panneau Google Apps" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0338-200x300.PNG" alt="Panneau Google Apps" width="200" height="300" /></p>
<p>Cliquez dessus, vous arrivez sur un écran vous invitant à vous identifier (comme pour le compte Gmail standard). Après vous être identifié, vous arrivez sur la liste des appareils à synchroniser. Sélectionnez l&#8217;appareil. Il ne vous reste plus qu&#8217;à choisir les agendas que vous souhaitez synchroniser.</p>
<p><img class="aligncenter size-medium wp-image-327" title="choix des calendriers" src="http://www.next-presso.fr/wp-content/uploads/2009/07/IMG_0340-200x300.PNG" alt="choix des calendriers" width="200" height="300" /></p>
<p>Et voilà.</p>
<h3>Et les contacts</h3>
<p>La synchronisation des contacts entre Google et l&#8217;iPhone est impeccable. Il suffit de retourner dans les préférences du compte Exchange, créé précédemment sur l&#8217;iPhone et d&#8217;ajouter l&#8217;option de synchronisation des contacts. L&#8217;activation de cette option va effacer les contacts existants sur votre iPhone donc assurez vous avant de le faire que tous vos contacts sont bien dans le carnet d&#8217;adresse sur votre Mac ou dans Google contact.</p>
<p>Le point un peu délicat, c&#8217;est la synchro entre le carnet d&#8217;adresses du Mac et Google. Cette synchronisation va s&#8217;opérer avec l&#8217;application iSync de MacOS X. Donc la première étape est de lancer iSync (dans le dossier Applications) et de le configurer (via les préférences) pour afficher l&#8217;icône de synchronisation dans la barre des menus :</p>
<p><img class="aligncenter size-medium wp-image-329" title="configuration iSync" src="http://www.next-presso.fr/wp-content/uploads/2009/08/Image-1-300x222.png" alt="configuration iSync" width="300" height="222" /></p>
<p>Après cela, vous pouvez fermer iSync et entrer dans les préférences du carnet d&#8217;adresses. Sur l&#8217;onglet général vous allez cocher la synchronisation avec Google et paramétrer votre compte Gmail ou Google apps comme ci-dessous :</p>
<p><img class="aligncenter size-medium wp-image-330" title="Préférences Carnet d'adresses" src="http://www.next-presso.fr/wp-content/uploads/2009/08/Image-4-272x300.png" alt="Préférences Carnet d'adresses" width="272" height="300" />après avoir valider ces préférences, on devrait en principe pouvoir synchroniser avec iSync via la barre de menu et le choix &#8220;synchroniser&#8221;, cependant, le module de synchronisation Google est mal configuré, il est en mode &#8220;app&#8221; et ne peut pas déclencher la synchronisation d&#8217;iSync. La solution est de la passer en mode serveur.</p>
<p>Ouvrez une fenêtre Terminal et tapez la commande suivante :</p>
<pre><strong>sudo defaults write /System/Library/PrivateFrameworks/GoogleContactSync.framework/Resources/ClientDescription Type 'server'</strong></pre>
<p>Le système vous demande votre mot de passe (vous devez avoir les droits d&#8217;administrateurs sur le Mac) puis effectue la modification. Vous devez ensuite rétablir les droits que votre commande vient de modifier en tapant la commande suivante:</p>
<pre><strong>sudo chmod 644 /System/Library/PrivateFrameworks/GoogleContactSync.framework/Resources/ClientDescription.plist
</strong></pre>
<p>(Merci à <a href="http://blog.markojung.net/2009/02/sync-everything-with-google/" target="_blank">Marco Jung</a> pour cette solution plus élégante que d&#8217;activer la synchronisation Exchange)</p>
<h3>Lancement automatique d&#8217;iSync</h3>
<p>iSync ne permet pas d&#8217;automatiser la synchronisation : vous devez la lancer à la main en cliquant sur &#8220;synchroniser&#8221;. Si vous souhaitez automatiser cette tâche, il suffit de rajouter une entrée dans la crontab de votre Mac.</p>
<p>Pour ce faire, lancez un terminal puis la commande <strong>crontab -e</strong></p>
<p>Cette commande lancée, vous entrez dans le monde merveilleux de vi. Pour entrer en mode édition tapez <strong>i</strong>, la mention &#8220;INSERT&#8221; devrait apparaître en bas de la fenêtre.</p>
<p>Saisissez ensuite l&#8217;entrée suivante :</p>
<pre><strong>30 * * * * osascript -e 'tell application "iSync" to synchronize'</strong></pre>
<p>qui lancera iSync toute les heures à la demi. Pour sauvegarder appuez sur la touche escape puis saisissez <strong>:wq</strong> et validez pour ecrire  les modifications et sortir de vi.</p>
<p>Voilà, votre synchro est fin prête.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/08/synchronisation-automatique-de-lagenda-et-des-contacts-entre-google-le-mac-et-liphone/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Une semaine avec l&#8217;e-reader Sony PRS-505</title>
		<link>http://www.next-presso.com/2009/07/une-semaine-avec-le-reader-sony-prs-505/</link>
		<comments>http://www.next-presso.com/2009/07/une-semaine-avec-le-reader-sony-prs-505/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 16:49:22 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Test]]></category>
		<category><![CDATA[e-book]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=287</guid>
		<description><![CDATA[<p>Ça faisait des mois que je tournais autour de l&#8217;engin : un véritable lecteur d&#8217;e-book me permettant d&#8217;embarquer toutes les documentations techniques dont j&#8217;ai besoin, ainsi que les nombreux documents spécifique à chaque projet. Le fait de pouvoir aussi embarquer des &#8220;vrais&#8221; livres à lire pour le plaisir constituait un plus important. Mais à chaque [...]]]></description>
			<content:encoded><![CDATA[<p>Ça faisait des mois que je tournais autour de l&#8217;engin : un véritable lecteur d&#8217;e-book me permettant d&#8217;embarquer toutes les documentations techniques dont j&#8217;ai besoin, ainsi que les nombreux documents spécifique à chaque projet. Le fait de pouvoir aussi embarquer des &#8220;vrais&#8221; livres à lire pour le plaisir constituait un plus important. Mais à chaque fois, devant le prix de la bébête et le doute sur le réel besoin que je pourrais en avoir, je repoussais l&#8217;acquisition de l&#8217;engin. Jusqu&#8217;à ce que, à l&#8217;occasion d&#8217;une promo la semaine dernière, je craque sur le bidule. Voici mon court retour d&#8217;expérience sur le sujet.</p>
<p><span id="more-287"></span></p>
<h3><img class="alignright" title="PRS-505" src="http://sp.sony-europe.com/media/58/28951" alt="" width="320" height="193" />A quoi ça me sert ?</h3>
<p>J&#8217;ai un certain nombre de PDF de &#8220;chevet&#8221; pour mon travail, que ce soit de la documentation de référence comme celle de Spring, d&#8217;Hibernate ou de Seam ou du livre en version électronique acheté sur Internet (Seam in Action, Open-Source ESB in action). Bref tout ce petit monde représente quelques kilos et deux ou trois forêts abattues une fois imprimés et là avec ce petit gadget de 260 g, j&#8217;embarque tout le monde. Idem pour les documents de mes projets convertis en RTF ou PDF (on peut passer en mode paysage pour regarder des présentations). Mais ce n&#8217;est pas tout, l&#8217;engin est livré avec une carte pleine de classiques de la littérature de Balzac à Zola en passant par Conan Doyle, ce qui me permet de joindre l&#8217;agréable à l&#8217;utile.</p>
<h3>L&#8217;encre sympathique</h3>
<p>Franchement l&#8217;e-ink est un procédé vraiment bluffant. On a l&#8217;impression de lire une page de papier légèrement glacé. La vision n&#8217;est pas plus altérée que sur du papier en changeant l&#8217;angle de la &#8220;page&#8221;, aucun scintillement ni aucune fatigue oculaire ne se manifeste après plusieurs heures de lecture. En fait, l&#8217;engin est la plupart du temps passif : ce n&#8217;est que lors d&#8217;un changement de page qu&#8217;un peu d&#8217;énergie est consommée pour effacer l&#8217;ancien contenu et en afficher un nouveau (un peu dans le genre d&#8217;un Télécran pour les plus vieux d&#8217;entre vous <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Ce qui permet à l&#8217;engin d&#8217;assurer une autonomie d&#8217;environ 8000 pages avant de devoir être rechargé.</p>
<p>L&#8217;écran n&#8217;est ni rétro-éclairé, ni tactile (bien qu&#8217;il existe des readers plus chers supportant ces fonctionnalités) ce qui donne au lecteur le même niveau d&#8217;expérience visuel qu&#8217;avec un vrai livre (pas de lecture sans lumière par exemple).</p>
<h3>Capacité et formats supportés</h3>
<p>Au chapitre de la capacité pas de soucis à avoir, l&#8217;engin dispose en standard de 192 Mo auxquels peuvent s&#8217;ajouter une carte Memory Stick Pro Duo et une carte SD HC, soit plus de 32 Go possibles. A 1 ou 2 mo le livre, ça  permet d&#8217;embarquer quelques rayons de bibliothèque&#8230;</p>
<p>Sinon le lecteur supporte à peu près tous les formats e-book actuels: EPUB eBook, BBeB eBook, Adobe PDF (les 3 avec ou sans DRM) Microsoft Word, TXT, RTF. Au chapitre des PDF que j&#8217;ai pas mal testé, on dispose de deux niveaux de zoom qui permettent de lire un format A4 sans problème. On déplorera cependant une mise en page un peu éclatée lorsque l&#8217;on zoom dans ce genre de format. J&#8217;ai également pu tester le format EPUB sans DRM, la lecture est agréable et le texte reste bien mis en page avec le zoom.</p>
<p>Dans la série &#8220;trucs pas utiles&#8221; (pour moi en tout cas), le lecteur supporte les formats audio MP3 et AAC, ainsi que les formats d&#8217;image jpeg, gif, png et bmp (ce qui avec un affichage en noir et blanc est assez peu intéressant).</p>
<h3>Autour du reader</h3>
<p>Le lecteur de Sony est fourni avec le logiciel Windows e-book library qui permet de gérer sa bibliothèque, la mise à jour du firmware du lecteur et la gestion des fichiers DRM. Une version Mac du logiciel devrait voir le jour cet été comme indiqué <a href="http://www.mobileread.com/forums/showthread.php?t=50418" target="_blank">ici</a>. Sinon on pourra toujours utiliser le très bon logiciel <a href="http://calibre.kovidgoyal.net/" target="_blank">Calibre</a> qui fonctionne également sous Linux et qui vous permettra de gérer votre bibliothèque électronique bien plus efficacement.</p>
<h3>Ce qui manque</h3>
<p>On déplorera l&#8217;absence total d&#8217;un système de recherche, ce qui est dommage pour un dispositif pouvant embarquer autant de livres. Pour les personnes ayant des problèmes de vue, il aurait été intéressant de pouvoir inverser le contraste des caractères (blanc sur fond noir). Enfin, j&#8217;aurais aimé pouvoir télécharger les articles de mes blogs préférés pour pouvoir les lire tranquillement dans les transports, pour l&#8217;instant ça ne semble pas hyper simple de le faire. Tant pis, je continuerai à le faire depuis mon iPhone.</p>
<h3>Sur le front des e-books payant</h3>
<p>A part quelques exceptions plutôt du côté de la littérature technique (Manning, O&#8217;Reilly, Apress) et plutôt au format PDF qui n&#8217;est certainement pas le meilleur pour e-book, on est encore loin d&#8217;avoir une offre crédible en la matière. La Fnac qui fait la promotion des livres électroniques présente un catalogue anémique (aucune nouveauté) à des prix scandaleux. Bref encore une révolution électronique absolument pas gérée par les acteurs du marché. Comme quoi aucun enseignement n&#8217;a été tiré de la nullité des majors du disque&#8230; Espérons que les éditeurs ou les distributeurs prendront le temps d&#8217;organiser ça de façon un peu plus intelligente comme ça à l&#8217;air d&#8217;être le cas dans le monde anglophone.</p>
<h3>Sur le front des e-books gratuits</h3>
<p>En revanche là, il y de quoi faire . Pour peu que vous aimiez les grands classiques, vous pouvez vous constituer une bibliothèque de tous les grands auteurs français et anglophone pour 0 €. Evidemment, ce n&#8217;est pas là que vous allez trouver le roman de l&#8217;été ou le dernier Harry Poter (pour ma part ça ne me dérange pas trop), mais pour du Dickens (même en VF), du Jules Vernes ou du Maupassant, vous trouverez votre bonheur.</p>
<p>Conclusion : si le marché de l&#8217;e-book grand public n&#8217;est pas encore ouvert  un e-book reader est d&#8217;ors et déjà très intéressant pour embarquer de la littérature technique, de la documentation Home Made, des livres un peu parallèles ou de la littérature ayant dépassée la DLC des droits d&#8217;auteurs <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<h3>Quelques liens pour conclure</h3>
<p>Pour bien démarrer sur le sujet voici quelques liens permettant de récupérer des e-books ou des informations sur l&#8217;univers de la lecture électronique.</p>
<p>Le projet Gutenberg ( une bibliothèque bien fournie de livres gratuits en anglais et français) : <a href="http://www.gutenberg.org/wiki/Main_Page" target="_blank">http://www.gutenberg.org/wiki/Main_Page</a></p>
<div id=":6z">
<div><span></p>
<div style="overflow: hidden;">The Pragamatic Bookshelf (Livres informatique payants dans d&#8217;autre formats que PDF) : <a href="http://www.pragprog.com/" target="_blank">http://www.pragprog.com/</a></div>
<div style="overflow: hidden;">FeedBooks (de la littérature gratuite ancienne et récente mais pas &#8220;main stream&#8221;) :<a href="http://www.feedbooks.com/" target="_blank"> http://www.feedbooks.com/</a></div>
<div style="overflow: hidden;">Ubibooks (livres payants en français entre autres) :<a href="http://www.ubibooks.com/shop/toplist.aspx?top=sales" target="_blank"> http://www.ubibooks.com/shop/toplist.aspx?top=sales</a></div>
<div style="overflow: hidden;">Smashwords (livres gratuits d&#8217;auteurs indépendants anglophones) :<a href="http://www.smashwords.com/" target="_blank"> http://www.smashwords.com/</a></div>
<div style="overflow: hidden;">Le Blog mobile read pour se tenir au courant des nouveautés sur le sujet :<a href="http://www.mobileread.com/forums/showthread.php?t=3968" target="_blank"> http://mobileread.com/forums/showthread.php?t=3968</a></div>
<div style="overflow: hidden;"><span><span>Le Tiers Livre (Blog d&#8217;information en Français de haute qualité) : </span></span><a href="http://www.tierslivre.net" target="_blank">http://www.tierslivre.net</a></div>
<div style="overflow: hidden;">Le Blog Actualitté (du même tonneau): <a href="http://www.actualitte.com/" target="_blank">http://www.actualitte.com/</a></div>
<div style="overflow: hidden;">Merci à Lucas pour les liens.</div>
<div style="overflow: hidden;">Vos retours sur le sujet seront les bienvenus</div>
<p></span></div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/07/une-semaine-avec-le-reader-sony-prs-505/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>[lang_fr]WTP + M2eclipse + Seam : c&#8217;est bien Maven ![/lang_fr][lang_en]WTP + M2eclipse + Seam : Maven works ![/lang_en]</title>
		<link>http://www.next-presso.com/2009/06/wtp-m2eclipse-seam-cest-bien-maven/</link>
		<comments>http://www.next-presso.com/2009/06/wtp-m2eclipse-seam-cest-bien-maven/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 16:19:10 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Outil]]></category>
		<category><![CDATA[Tutoriel]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[m2eclipse]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Seam]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=167</guid>
		<description><![CDATA[<p>[lang_fr]</p> <p>Oui c&#8217;est bien ma veine d&#8217;avoir eu besoin qu&#8217;un de mes projets Seam fonctionne à la fois sous Maven et Eclipse WTP seulement maintenant, parce que tout ce que je vais décrire dans cet article ne fonctionnait pas ou très mal il y a encore quelques mois (si tant est que l&#8217;on puisse dire [...]]]></description>
			<content:encoded><![CDATA[<p>[lang_fr]</p>
<p>Oui c&#8217;est bien ma veine d&#8217;avoir eu besoin qu&#8217;un de mes projets Seam fonctionne à la fois sous Maven et Eclipse WTP seulement maintenant, parce que tout ce que je vais décrire dans cet article ne fonctionnait pas ou très mal il y a encore quelques mois (si tant est que l&#8217;on puisse dire que ça fonctionne bien maintenant). Cet article explique comment adapter un projet JEE5 (comprenant un EAR, un EJB et un WAR) conçu sous eclipse WTP à une hiérarchie Maven manipulable aussi bien sous Eclipse qu&#8217;en ligne de commande. Le projet dans mon exemple est un projet Seam mais les informations restent valable même pour un projet JEE n&#8217;utilisant pas cette technologie. Avant d&#8217;entrer dans le vif du sujet et parce que c&#8217;est toujours productif de rappeler de quoi l&#8217;on parle, nous reviendrons sur les différents outils évoqués dans ce tutoriel et sur les avantages de faire fonctionner un projet à la fois sous WTP et Maven.</p>
<p>[/lang_fr]<br />
[lang_en]
<p>
Lucky me ! It&#8217;s only now that I need that one of my Seam project works with Eclipse WTP and Maven. Lucky because a few months ago, that tutorial would have been impossible to write. This article will show how to adapt a JEE5 project in order to make it usable with Eclipse WTP and Maven.
</p>
<p>[/lang_en]<span id="more-167"></span>[lang_fr]</p>
<h3><span style="font-size: 12px; font-weight: normal;"></span>Les protagonistes<br /></h3>
<p></p>
<ul>
<li><strong>WTP</strong> : <a href="http://www.eclipse.org/webtools/" target="_blank">Web Tools Platform</a> est un ensemble de plugins Eclipse facilitant grandement le développement d&#8217;application JEE. L&#8217;aspect le plus pratique de WTP est de pouvoir compiler, packager et déployer dynamiquement sur un serveur JEE local un projet Eclipse. WTP gère aussi bien des projets JEE légers simples (WAR) que des projets complets (EAR incluant EJB et War). Le seul défaut de l&#8217;outil et que le projet n&#8217;est déployable qu&#8217;avec Eclipse. Sorti de l&#8217;IDE, il faudra avoir recours à un autre outil pour compiler, packager et déployer le projet vers un serveur.</li>
<li><strong>Maven</strong> : il s&#8217;agit d&#8217;un outil de &#8220;build&#8221; Java. <a href="http://maven.apache.org/" target="_blank">Maven</a> permet d&#8217;automatiser un certain nombre de tâches autour de la compilation, des tests, du packaging et du déploiement d&#8217;applications Java. Beaucoup décrié, Maven reste l&#8217;outil le plus populaire de sa catégorie car il facilite grandement la mise en place de software factory pour l&#8217;intégration continue. L&#8217;un des aspects de Maven les plus faciles à appréhender est la gestion des dépendances. Maven permet en effet de récupérer automatiquement les bibliothèques jar (ceci est valable pour les projets open sources, le jar d&#8217;un éditeur ne sera pas récupéré automatiquement) nécessaires à la compilation et ou l&#8217;exécution d&#8217;un projet via des fichiers de configuration (les fameux pom.xml). Par défaut Maven ne sait que compiler des sources Java, c&#8217;est la raison pour laquelle de nombreux plug-ins Maven existent permettant d&#8217;ajouter des fonctionnalités avancées au produit (dans notre cas build de projet EAR, EJB ou WAR). Maven diffère beaucoup des solutions de build historiques comme les makefile en C ou les scripts ANT sous Java, car il repose sur des conventions et n&#8217;est alimenté que par des fichiers de configuration là où les autres solutions disposent d&#8217;un langage de scripting. C&#8217;est certainement cette différence qui rend Maven aussi compliqué à maîtriser : la rencontre entre une hiérarchie de dossiers et de fichiers dont l&#8217;agencement est une convention, des fichiers de configurations permettant au moteur de travailler sur cette convention et la &#8220;boîte noire&#8221; que constituent le moteur de Maven ainsi et ses plugins.</li>
<li><strong>M2eclipse</strong> : est un plug-in Eclipse développé par la société Sonatype, permettant d&#8217;intégrer Maven à Eclipse. Pour faire court <a href="http://m2eclipse.codehaus.org/" target="_blank">m2eclipse</a> permet de construire des projets avec Maven sous Eclipse tout en gardant certains automatismes de l&#8217;IDE. Avec m2eclipse on bénéficie du meilleur des deux mondes. Cependant m2eclipse ne supportait qu&#8217;une partie de WTP (uniquement les projets war) jusqu&#8217;à récemment. En février/ mars 2009, m2eclipse a introduit le gestion des projets EAR et EJB.</li>
</ul>
<p></p>
<h3>Le besoin</h3>
<p>Quelle est l&#8217;utilité d&#8217;avoir un projet à la fois compatible Eclipse-WTP et Maven ? Le réponse est simple : disposer d&#8217;un projet fonctionnant aussi bien en local dans l&#8217;IDE des développeurs ou des concepteurs d&#8217;IHM que dans le cycle automatisé de l&#8217;intégration continue. Avec cette solution, je peux donc travailler avec WTP et visualiser les modifications à chaud sur mes différentes pages, voire mes composants si la technologie de mon projet le permet tout en ayant un projet prêt à être exploité dans une software factory type Continuum ou Hudson.</p>
<h3>Installation</h3>
<p>Pour réaliser les manipulations décrites ci-après, on aura besoin d&#8217;une distribution Eclipse incluant les outils de développement JEE disponible sur <a href="http://www.eclipse.org" target="_blank">le site d&#8217;eclipse</a>. Il est conseillé d&#8217;utiliser une version 3.4.2 voire 3.5 d&#8217;eclipse. On aura également besoin du plug-in m2eclipse dont l&#8217;installation est décrite <a href="http://www.google.fr/url?sa=t&amp;source=web&amp;ct=res&amp;cd=2&amp;url=http%3A%2F%2Fm2eclipse.codehaus.org%2FInstalling_Maven_2.0_plugin_for_Eclipse.html&amp;ei=XZk_Sua1Dcv5-Abxp9HODA&amp;usg=AFQjCNGhQxERkrA8FB8Wj-R1P0VEA6jJeQ&amp;sig2=HWAr1xArRAHch4ROsUAI3g" target="_blank">ici</a> (on aura recours à la version de développement de m2eclipse (version 0.9.9 à ce jour), celle-ci corrige beaucoup de petits bugs qui rendent le plug-in plus agréable à utiliser). Enfin on devra disposer d&#8217;un projet JEE sous WTP et d&#8217;un serveur JEE sur lequel déployer ce projet. Pour cet article j&#8217;utilise Eclipse 3.5 64 bits (sous MAC OS X 10.5.7) avec WTP 3.1, m2eclipse 0.9.9 et JBoss 5.0.</p>
<h3>Début du tutoriel</h3>
<p>Nous démarrons ce tutoriel avec 3 projets eclipse WTP : un EAR, un EJB et un WAR. Ces projets se présentent comme le montre l&#8217;image suivante.</p>
<p>[/lang_fr]<br />
[lang_en]<br />
<h3>Starting the tutorial</h3>
<p>We start this tutorial with 3 Eclipse projects : an EAR, an EJB and a WAR project. These projects are showed in the following picture</p>
<p>[/lang_en]</p>
<p style="text-align: center;"><img class="size-full wp-image-204" title="figure1" src="http://www.next-presso.fr/wp-content/uploads/2009/06/figure1.png" alt="figure 1 : les trois projets sous Eclipse et WTP" width="235" height="168" /></p>
<p>[lang_fr]
<p>Les trois projets sont liés entre eux grâce aux fichiers de configuration Eclipse et WTP qui permettent au système de savoir que l&#8217;EAR englobe les deux autres et l&#8217;EJB et le WAR peuvent utiliser les bibliothèques de l&#8217;EAR pour leur compilation. Les projets de mon exemple sont basés sur SEAM mais les étapes décrites dans ce tutoriel sont valable pour tout type de projet JEE. Le petit bonus de l&#8217;article pour les Seamiens sera les listes de dépendance maven propre à Seam que je vais donner.</p>
<p>Physiquement, ces trois projets sont matérialisés par 3 arborescences distinctes sur le disque toutes placées dans le dossier de l&#8217;espace de travail. Inutile de dire que tout ceci n&#8217;est pas du tout dans l&#8217;esprit Maven&#8230;</p>
<h4>Création d&#8217;un projet Maven Parent</h4>
<p>Première étape nous créons un projet Maven Parent qui va englober nos projets EAR, EJB et WAR. Ce projet permet de regrouper l&#8217;ensemble des sous projets (que l&#8217;on appelle module) et de définir des paramètres globaux pour tous les modules. Pour créer ce projet parent, cliquez sur &#8220;File/New/Project&#8230;&#8221;[/lang_fr]</p>
<p>[lang_en] </p>
<p>
The 3 projects are linked with the Eclipse configuration files which contains informations about EAR, EJB and WAR projects. In this article the projects are based on JBoss Seam, but all the tutorial could be used in any project type.
</p>
<p>On the disk, the 3 projects are 3 directories in the workspace folders. Useless to say it&#8217;s not the Maven way to organize projects.</p>
<h4>Creation of the parent Project</h4>
<p>First step, we create a Maven parent project which will contain our EAR, EJB and WAR projects (that Maven call modules). In this parent project we can define global parameters for the modules. To create this project click on &#8220;File/New/Porject&#8230;&#8221;</p>
<p>[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-212 aligncenter" title="ChooseMavenProject" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-11-300x285.png" alt="ChooseMavenProject" width="300" height="285" /></p>
<p>[lang_fr]Puis choisissez Maven Project dans la catégorie Maven et cliquez sur Next, un wizard &#8220;New Maven Project&#8221; s&#8217;ouvre :[/lang_fr]<br />
[lang_en]<br />
Choose Maven Project in the Maven category and click on Next, this opens the &#8220;New Maven Project&#8221; wizard :[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-213 aligncenter" title="New Maven Project 1" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-2-300x298.png" alt="New Maven Project 1" width="300" height="298" /></p>
<p>[lang_fr]Vous pouvez passer à l&#8217;étape suivante en vérifiant que la case &#8220;Create a simple project&#8221; est bien décochée.[/lang_fr]<br />
[lang_en]You can go to the next step after checking that &#8220;Create a simple project&#8221; is unchecked.[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-214 aligncenter" title="Choose Archetype" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-3-300x254.png" alt="Choose Archetype" width="300" height="254" /></p>
<p>[lang_fr]Dans cette boîte de dialogue, vous êtes invité à choisir un archétype (un modèle pour votre projet). Dans Catalog choisissez Nexus Indexer qui pointe vers une liste plus riche que celle proposée en interne par défaut. Puis dans la zone filtre tapez &#8220;pom&#8221; pour trouver l&#8217;archétype &#8220;pom-root&#8221;. Sélectionnez-le et cliquez sur &#8220;Next&#8221;.[/lang_fr]<br />
[lang_en]In this dialog box you have to choose an archetype (a template for your project). In Catalog choose Nexus Indexer which brings a richer list than the internal default one. In the filter field enter &#8220;pom&#8221; to reach the &#8220;pom-root&#8221; archetype&#8221;. Select it and click on &#8220;Next&#8221;.[/lang_en]</p>
<p style="text-align: center;"><img class="alignnone size-medium wp-image-217" title="Maven Project Name" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-4-300x252.png" alt="Maven Project Name" width="300" height="252" /></p>
<p>[lang_fr]Dans cette dernière boîte de dialogue vous donnez un nom à ce projet. Je ne vais pas faire un exposé sur Maven ici, mais vous pouvez donner le nom de votre client au group ID et le nom du projet avec une extension &#8220;-parent&#8221; ou &#8220;-root&#8221; pour indiquer qu&#8217;il s&#8217;agit du projet root. Cliquez ensuite sur &#8220;Finish&#8221;. Vous obtenez un nouveau projet dans votre workspace. Dans mon exemple &#8220;pfm77-parent&#8221;.</p>
<h4>Création des modules Maven sous le projet parent</h4>
<p>De la même façon que nous avons créé le projet parent, nous allons maintenant créer les projets enfants ou modules maven. Cliquez sur &#8220;File/New/Project&#8230;&#8221;[/lang_fr]</p>
<p>[lang_en]In this last dialog box you choose the project name. click on &#8220;Finish&#8221;. Now you have a new project in your workspace. In my case it&#8217;s &#8220;pfm77-parent&#8221;</p>
<h4>Creating the Maven modules</h4>
<p>In the same way we created parent project, we&#8217;re going to create the children projects or modules. click on &#8220;File/New/Project&#8230;&#8221;<br />
[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-211 aligncenter" title="Choose Maven Module" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-1-300x283.png" alt="Choose Maven Module" width="300" height="283" /></p>
<p>[lang_fr]et choisissez maintenant &#8220;Maven Module&#8221; puis cliquez sur &#8220;Next&#8221;. Un wizard assez semblable au premier s&#8217;ouvre :[/lang_fr]<br />
[lang_en]Choose &#8220;Maven Module&#8221; then click on &#8220;Next&#8221;. A new wizard opens :[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-219 aligncenter" title="create ear module" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-5-300x204.png" alt="create ear module" width="300" height="204" /></p>
<p>[lang_fr]Vous allez y indiquer le nom du module ear et le nom du projet Maven parent de ce module (en l&#8217;occurrence le projet Maven parent précédemment créé) puis cliquez sur &#8220;Next&#8221;.[/lang_fr]<br />
[lang_en]Enter the name for the EAR module and the name of the parent project then click on &#8220;Next.[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-220 aligncenter" title="Archetype EAR" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-6-300x253.png" alt="Archetype EAR" width="300" height="253" /></p>
<p>[lang_fr]En ayant bien choisi &#8220;Nexus Indexer&#8221; dans le catalogue, tapez ear dans la zone &#8220;filter&#8221;. Choisissez l&#8217;archétype &#8220;ear-jee5&#8243; puis cliquez sur &#8220;finish&#8221;</p>
<p>Pour créer les module EJB et WAR on aura recours au même wizard. On nommera les nouveaux module avec les extensions &#8220;-ejb&#8221; et &#8220;-war&#8221; en choisissant comme projet parent le même que pour l&#8217;EAR et en prenant respectivement les artefacts &#8220;ejb-jee5&#8243; puis &#8220;webapp-jee5&#8243;.</p>
<p>A l&#8217;issue de ces manipulations, on obtient 4 nouveaux projets dans le workspace :[/lang_fr]</p>
<p>[lang_en]<br />
Don&#8217;t forget to choose &#8220;Nexus Indexer&#8221; in the catalog, enter &#8220;ear&#8221; in the filter field. Choose the &#8220;ear-jee5&#8243; archetype then click on &#8220;finish&#8221;</p>
<p>To create the EJB and WAR modules, we&#8217;ll use the same wizard choosing archetypes &#8220;ejb-jee5&#8243; and &#8220;webapp-jee5&#8243;.</p>
<p>After all those wizards and clicks, we have 4 new projects in the workspace :</p>
<p>[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-221 aligncenter" title="projets maven créés" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-7-300x285.png" alt="projets maven créés" width="300" height="285" /></p>
<p />
<p>[lang_fr]La structure physique de ces projets est particulière. Sur le disque, dans le dossier workspace, la hiérarchie Maven est respectée : le dossier parent est le seul directement apparent, les autres projets sont des sous dossiers de ce dernier. C&#8217;est le premier avantage de m2eclipse : il permet de supporter dans Eclipse des projets imbriqués dans l&#8217;arborescence d&#8217;un projet existant. Mais c&#8217;est loin d&#8217;être le seul.</p>
<h4>Le travail de m2eclipse</h4>
<p>Avant de poursuivre il me paraît intéressant de mettre en lumière les principales fonctionnalités prises en charge par m2eclipse, pour bien comprendre l&#8217;intérêt du plug-in et s&#8217;épargner de longues heures de bagarre avec lui</p>
<h5>1) la gestion de projets arborescent dans Eclipse</h5>
<p>Comme on l&#8217;a vu au paragraphe précédent, m2eclipse permet à la fois de gérer une arborescence Maven classique tout en en intégrant les sous-projets (ou modules) comme des projets Eclipse classiques. Cette fonctionnalité est aussi active lors de l&#8217;import d&#8217;un projet Maven dans le workspace soit par la fonction &#8220;import Maven project&#8221; soit par l&#8217;importation depuis un serveur gestionnaire de version (SVN ou CVS). Cette fonction s&#8217;opère grâce aux fichiers pom.xml qui permettent à Maven de distinguer les différents projets ou module du projet.</p>
<h5>2) La gestion des dépendances Maven au sein d&#8217;Eclipse</h5>
<p>C&#8217;est la fonctionnalité de base de m2eclipse. Le plug-in gère les fichiers pom.xml comme le fait Maven pour récupérer les bibliothèques nécessaires à la compilation et/ou l&#8217;exécution des projets. Fini les jar embarqués dans les projets et les méga-octets de jar à commiter vers le serveur de versionning.</p>
<h5>3) Le build Maven dans Eclipse</h5>
<p>Ca va de soit mais autant le dire un projet m2eclipse dispose du builder Eclipse classique (Java builder) mais également d&#8217;un builder Maven ce qui li permet de jouer sur les deux environnements.</p>
<h5>4) Une belle interface pour gérer les fichiers pom.xml</h5>
<p>Plutôt sympa et complète, cette interface est très intéressante pour contrôler le graphe des dépendances dans un projet. Malheureusement, elle est encore un peu buguée donc nous nous contenterons d&#8217;éditer le fichier pom.xml en mode texte dans ce tutoriel.</p>
<h5>5) La gestion automatisée de la configuration Eclipse des projets</h5>
<p>C&#8217;est la fonctionnalité la moins documentée mais une des plus intéressante. Le fait d&#8217;ignorer ce point vous promet de longues heures de lutte entre la configuration Eclipse du projet et la configuration automatique de ce dernier générée par m2eclipse (c&#8217;est du vécu !). La meilleure illustration de cette fonction sont les projets que nous venons de créer. Ces projets sont issus d&#8217;archétypes Maven et n&#8217;ont rien à voir avec Eclipse, aussi, les fichiers de configuration Eclipse de ces nouveaux projets (les fichiers .classpath .project et le dossier .settings) ont été générés automatiquement par m2eclipse à l&#8217;importation de l&#8217;archétype grâce à l&#8217;analyse du fichier pom.xml de chaque projet. Si vous modifiez vos fichiers pom.xml (comme on le fera plus loin), m2eclipse mettra à jour ces fichiers de configuration Eclipse pour refléter ces changements. Ainsi, si vous regardez les &#8220;Facets&#8221; du projet EJB (clic droit sur le projet, properties/project Facets) vous verrez quelque chose comme ça :[/lang_fr]</p>
<p>[lang_en]<br />
The physical structure of these Eclipse projects are different. If you look on your disk, you&#8217;ll see a Maven hierarchy (a main project and modules in in the folder of the main project). It&#8217;s one of the m2eclipse benefits : supporting sub-projects in Eclipse. But it&#8217;s not the only advantage of the plugin.</p>
<h4>Benefits of m2eclipse</h4>
<h5>1) Managing sub-projects in Eclipse</h5>
<p>As we saw, you can have a Maven hierarchy that m2eclipse make look likes different Eclipse project in the IDE. This also works when you import existing maven project in the worskpace from the disk or versioning system.</p>
<h5>2) Managing Maven dependencies</h5>
<p>The plugin use the pom.xml files to download and add jar files in your project.</p>
<h5>3) Maven build in Eclipse</h5>
<p>The least we can wait for this plugin. A m2eclipse project has 2 builders : the standard Eclipse one and the maven one.</p>
<h5>4) A nice user interface to manage pom.xml files</h5>
<p>You can use this interface to look for dependencies or exclude a sub-dependency easily. It was rather bugy in the past but with version 0.99 of m2eclipse it starts to be very usefull.</p>
<h5>5) Automatic management of Eclipse projects configuration</h5>
<p>That&#8217;s an important benefit that is not very well documented on m2eclipse site. M2eclipse uses pom.xml information to generate and maintain Eclipse configuration files for the project. For instance the projects we just created are not Eclipse project. They were created from Maven Archetypes that have nothing to do with Eclipse. So the eclipse configuration files of these new project (.classpath, .project files and .settings folder) were generated by m2eclipse from the pom files. When pom files are modified, m2eclipse will change Eclipse configuration files automatically. For instance, let&#8217;s have a look at the Facets of the EJB project (right-click on the project, and choose properties/facets) :[/lang_en]</p>
<p style="text-align: center;"><img class="size-full wp-image-222 aligncenter" title="project facets" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-9.png" alt="project facets" width="753" height="308" /></p>
<p>[lang_fr]M2eclipse a donc automatiquement déduit du fichier pom.xml que ce projet était un projet EJB et a donc automatiquement ajouté cette &#8220;facets&#8221; au projet. Si jamais vous modifiiez ce paramètre dans Eclipse, m2eclipse écraserait vos modifications au prochain rafraîchissement de la configuration d&#8217;où la bagarre évoquée ci-dessus. Cette configuration automatique découle de la détection de la présence du packaging ejb et du plug-in ejb de Maven dans le fichier pom.xml. M2eclipse analyse le paramétrage du plug-in (Maven pas Eclipse) dans le fichier et en déduit la configuration Eclipse correspondante. Le traitement est identique pour les plug-in Maven Ear et War. Alors, ne doit-on donc plus toucher aux propriétés Eclipse des projets concernés ? Pas si simple ! M2eclipse ne peut pas tout générer à partir des fichiers pom.xml. Par exemple, le serveur de déploiement WTP ne sera jamais configuré via m2eclipse : cela n&#8217;a pas de sens pour Maven donc pas d&#8217;information de ce type dans le fichier pom.xml. Il faut donc examiner attentivement les paramètres générés par m2eclipse pour savoir lesquels vous pouvez ou devez gérer. La bonne nouvelle, c&#8217;est que m2eclipse n&#8217;écrase pas les fichiers de configuration lors du rafraîchissement mais les met à jour, aussi vos paramètres seront ignorés par le plug-in sans être effacés (sauf s&#8217;il s&#8217;agit de paramètres gérés par m2eclipse <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ). Le plus simple est de ce référer à cette <a href="http://docs.codehaus.org/display/M2ECLIPSE/Integration+with+WTP" target="_blank">page de la doc m2eclipse</a> pour savoir quels sont les paramètres des différents plugins pris en compte par m2eclipse pour générer la configuration Eclipse du projet. Les paramètres avec une coche verte sont exploités à l&#8217;inverse de ceux avec une croix rouge.</p>
<p>Pour conclure sur ce point crucial, il convient également de rester extrêmement vigilant à la mise sous subversion ou cvs d&#8217;un tel projet. En effet, on aura intérêt à écarter le versionning de tous les fichiers de configuration éclipse en sachant que des configurations locales seront à recréer sur chaque poste (serveur de déploiement, configuration Seam ou Spring, etc&#8230;).</p>
<h4>Transvasement</h4>
<p>
Mais revenons à notre migration WTP vers Maven/WTP. L&#8217;étape suivante consiste à copier l&#8217;ensemble des fichiers sources, page web et autre fichier de configuration de l&#8217;ancienne structure de projet à l&#8217;autre. En gros on copiera tout sauf les jar inclus dans la vieille version WTP. Le plus simple est de faire ce transvasement du système de fichier vers Eclipse par drag &amp; drop en se plaçant dans la perspective &#8220;resources&#8221; qui ne cache pas certains dossiers comme la perspective Java. Pour se faciliter la vie on respectera de préférence <a href="http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html" target="_blank">la disposition des répertoires par défaut de Maven</a>, cela évitera d&#8217;avoir à alourdir les fichiers pom.xml</p>
<ul>
<li style="list-style: none"></li>
<li>Pour le module EAR on déplacera le contenu du META-INF dans src/main/application/META-INF qui contiendra les fichiers de configuration du projet. Le reste du projet se construira avec le fichier pom.xml</li>
<li>Pour le module EJB, l&#8217;ensemble des classes devra être mis dans src/main/java, les fichiers de ressource devant figurer dans le classpath (fichiers properties, dossier META-INF) dans src/main/resources</li>
<li>Pour le module WAR, on prendra les mêmes dossiers pour les sources et les ressources. Le fichiers du site devront être placé sous src/main/webapp (attention de ne pas rapatrier le dossier lib dans WEB-INF)</li>
</ul>
<p>
Attention à ne pas ramener les fichiers Manifest dans nos nouveaux projets. Ceux-ci peuvent contenir des classpath qui vont perturber notre travail.</p>
<p>Passons maintenant à nos fameux pom.xml</p>
<h4>Pom pom pom pom</h4>
<p>
Sans être un travail symphonique (désolé pour ce moment de détente à mi-chemin de l&#8217;article), l&#8217;ajustement nos 4 fichiers pom va nécessiter un peu de doigté et de patience (c&#8217;est le côté feng-shui de Maven : on tâtonne et on ajuste puis on fini par trouver sans trop savoir comment on y est arrivé <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  ), mas promis, on va y arriver commençons par le commencement</p>
<h4>Le Projet Parent</h4>
<p>
Je ne vais pas détailler la rédaction de mes fichiers : ce serait un peu fastidieux. Je vous propose plutôt de passer en revue le résultat en commençant par les rubriques du fichier :</p>
<ul>
<li style="list-style: none"></li>
<li>Introduction : c&#8217;est ici que je défini que c&#8217;est un projet de type &#8220;pom&#8221; qui pilote donc la construction de plusieurs modules</li>
<li>modules : ici je donne les modules à traiter à ne pas confondre avec les projets que je vais déclarer dans l&#8217;EAR</li>
<li>properties : ici je définis des variables qui me permettront de garder une cohérence dans les version de Jar présentent dans plusieurs modules</li>
<li>repositories : j&#8217;ajoute dans cette section les repositories JBoss me permettant de faire référence à Seam et le repository de java.net me permettant de référencer l&#8217;artefact jee5</li>
<li>dependencyManagement : cette rubrique me permet de déclarer des dépendances présentes dans des sous-modules. En les déclarant ici, je peux fixer leur version une fois pour toute. Pour information la bibliothèque org.ostermiller.utils est un ensemble d&#8217;outils assez sympa pour générer et lire des fichiers CSV et qui supporte les particularités du CSV Excel. Plus d&#8217;infos sur cette bibliothèque <a href="http://ostermiller.org/utils/" target="_blank">ici</a>.</li>
<li>build : dans cette section finale, je déclare le plugin de compilation Maven, ce qui me permet de fixer une fois pour toute la version du compilateur Java à employer.</li>
</ul>
<p>[/lang_fr]<br />
[lang_en]</p>
<p>M2eclipse have added this EJB3 facets by analyzing the pom.xml file. So if you change Eclipse configuration on the project there can be some chance that you touch a configuration driven by m2eclipse. So take care of your modification. To be sure you won&#8217;t go battle wth m2eclipse in the configuration you should check the <a href="http://docs.codehaus.org/display/M2ECLIPSE/Integration+with+WTP" target="_blank">m2eclipse documentation</a>. This page show all the Maven parameters (with green checkboxes) that are used by m2eclipse to build and maintain Eclipse WTP configuration files.</p>
<p>To finish with this point, you&#8217;ll have to be extremely carrefull when you put those project under versioning system. The best solution is to ignore Eclipse configuration files and let m2eclipse do the job on the other systems (you&#8217;ll have to create local configuration on each IDE to configure information that are not in Maven files like deploying servers for instance).</p>
<h4>Copying Files</h4>
<p>Let&#8217;s go back to our tutorial : moving WTP projects to maven/WTP projects. The next step consist to copy files from our old WTP project to the newly created Maven/WTP projects. You can do this by dragging files from file system (Explorer, Finder, or whatever you use) to Eclipse using the &#8220;resources&#8221; perspective which is the more close to filesystem perspective. To keep it simple try to stick with the <a href="http://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html" target="_blank">default Maven layout</a>, It will make pom files lighter.</p>
<ul>
<li style="list-style: none"></li>
<li>For the EAR module you&#8217;ll put  the content of META-INF in src/main/application/META-INF all the other files in te project will be  build from pom.xml</li>
<li>For the EJB module, all your classes should be put in src/main/java, resources files like properties or META-INF folder should be in src/main/resources.</li>
<li>For the WAR module you&#8217;ll use the same folders as EJB for classes and resources. The site files will be copied in src/main/webapp folder (be carefull and don&#8217;t take the WEB-INF/lib folder)</li>
</ul>
<p>
You should ignore Manifest files in all the project because they can cause runtime errors.</p>
<p>Now we have to deal with our pom files</p>
<h4>Pom pom pom pom</h4>
<p>It&#8217;s not a symphony but almost (sorry for that). The setting of our 4 pom.xml files will ask some patience (it&#8217;s the Maven feng-shui side) but we will get trough.</p>
<h4>Parent project</h4>
<p>I won&#8217;t detail all my pom.xml files content : I want to keep my readers till the end. Instead I&#8217;ll show you the result and comment the main part of each file</p>
<ul>
<li style="list-style: none"></li>
<li>Introduction : here I tell Maven that it is a pom project that drive construction of sub-projects (modules).</li>
<li>modules : here are the modules contained by this parent project.</li>
<li>properties : here I define variables that will be used in configuration of all the modules (libraries version for instance)</li>
<li>repositories : in this section I add Maven repositories used by my project. For me it&#8217;s JBoss repositories for Seam and java.net to get all Jee5 dependencies</li>
<li>dependencyManagement : In this part, I declare all the dependencies used by my modules. Declaring them here, I can set their version once for all.</li>
<li>build : in this final section I can set up compilation configuration once for all.</li>
</ul>
<p> </p>
<p>[/lang_en]</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;groupId&gt;cos&lt;/groupId&gt;
  &lt;artifactId&gt;pfm77-parent&lt;/artifactId&gt;
  &lt;packaging&gt;pom&lt;/packaging&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;pfm77-parent Multi Project&lt;/name&gt;
  &lt;url&gt;http://maven.apache.org&lt;/url&gt;
  &lt;modules&gt;
    &lt;module&gt;pfm77-ear&lt;/module&gt;
    &lt;module&gt;pfm77-ejb&lt;/module&gt;
    &lt;module&gt;pfm77-war&lt;/module&gt;
  &lt;/modules&gt;

  &lt;properties&gt;
    &lt;seam.version&gt;2.0.3.CR1&lt;/seam.version&gt;
    &lt;jsf.version&gt;1.2_10&lt;/jsf.version&gt;
    &lt;richfaces.version&gt;3.2.1.GA&lt;/richfaces.version&gt;
  &lt;/properties&gt;

  &lt;repositories&gt;
    &lt;repository&gt;
      &lt;id&gt;jboss&lt;/id&gt;
      &lt;name&gt;JBoss Repository&lt;/name&gt;
      &lt;url&gt;http://repository.jboss.org/maven2&lt;/url&gt;
      &lt;snapshots&gt;
        &lt;enabled&gt;false&lt;/enabled&gt;
      &lt;/snapshots&gt;
    &lt;/repository&gt;
    &lt;repository&gt;
      &lt;id&gt;jboss-snapshots&lt;/id&gt;
      &lt;name&gt;JBoss Snapshot Repository&lt;/name&gt;
      &lt;url&gt;http://snapshots.jboss.org/maven2&lt;/url&gt;
      &lt;releases&gt;
        &lt;enabled&gt;false&lt;/enabled&gt;
      &lt;/releases&gt;
      &lt;snapshots&gt;
        &lt;enabled&gt;true&lt;/enabled&gt;
      &lt;/snapshots&gt;
    &lt;/repository&gt;
    &lt;repository&gt;
          &lt;id&gt;java.net1&lt;/id&gt;
          &lt;name&gt;Java.Net Maven1 Repository, hosts the javaee-api dependency&lt;/name&gt;
          &lt;url&gt;http://download.java.net/maven/1&lt;/url&gt;
          &lt;layout&gt;legacy&lt;/layout&gt;
      &lt;/repository&gt;
  &lt;/repositories&gt;

 &lt;dependencyManagement&gt;
 &lt;dependencies&gt;

  &lt;dependency&gt;
      &lt;groupId&gt;commons-beanutils&lt;/groupId&gt;
      &lt;artifactId&gt;commons-beanutils&lt;/artifactId&gt;
      &lt;version&gt;1.8.0&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
       &lt;/dependency&gt;
        &lt;dependency&gt;
      &lt;groupId&gt;org.ostermiller&lt;/groupId&gt;
      &lt;artifactId&gt;utils&lt;/artifactId&gt;
      &lt;version&gt;1.07.00&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;/dependencies&gt;
 &lt;/dependencyManagement&gt;

  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
        &lt;configuration&gt;
          &lt;source&gt;1.5&lt;/source&gt;
          &lt;target&gt;1.5&lt;/target&gt;
        &lt;/configuration&gt;
      &lt;/plugin&gt;

    &lt;/plugins&gt;
  &lt;/build&gt;

&lt;/project&gt;
</pre>
<p>
[lang_fr]<br />
<h4>Le projet EAR</h4>
<p>Dans ce fichier, on peut se débarrasser du plug-in de compilation puisque définit dans le projet Parent. En revanche, on va devoir ajouter toutes les jar du projet et leur version. Les outils de complétion de m2eclipse deviennent indispensable sur ce coup. Faites un clic droit sur le projet, choisissez Maven et &#8220;add Maven dependency&#8221;. La boîte de dialogue suivante s&#8217;ouvre.[/lang_fr]</p>
<p>[lang_en]<br />
<h4>EAR project</h4>
<p>In the pom file, we can get rid of compilation plug-in because we configured it in the parent project. But we&#8217;ll have to add all the depending jars and their version. The m2eclipse auto-completion tools are very usefull for this. Right-click on the project and choose &#8220;Maven/add Maven dependency&#8221;. The following dialog box opens<br />
[/lang_en]</p>
<p style="text-align: center;"><img class="alignnone size-medium wp-image-252" title="Image 10" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-10-300x263.png" alt="Image 10" width="300" height="263" /></p>
<p>[lang_fr]Elle vous permet de rechercher dans les repositories Maven pour vous proposer la bibliothèque correspondant à votre recherche et vous permettre de l&#8217;ajouter au fichier pom. Au fur et à mesure que vous ajoutez des dépendances, des jar indésirables peuvent s&#8217;ajouter à votre projet (des dépendance de dépendance). Vous pouvez les exclure en rajoutant une rubrique exclusion dans le pom ou en utilisant la vue &#8220;Dependency Graph&#8221; du fichier pom. Cette vue propose un graphe de ce genre :[/lang_fr]<br />
[lang_en]<br />
With this box you can search in Maven repositories the right jar and version for your project and add it the pom.xml file. With time some sub-depencies can appear in the project. You can exclude them by using the &#8220;Dependency graph&#8221; in pom editor. This view show a graph like this one :<br />
[/lang_en]</p>
<p style="text-align: center;"><img class="size-full wp-image-253 aligncenter" title="dependency graph" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-111.png" alt="dependency graph" width="858" height="248" /></p>
<p>[lang_fr]Si vous souhaitez exclure une bibliothèque, vous pouvez le faire via le menu contextuel de celle-ci en choisissant &#8220;Exclude Maven Artefact&#8230;&#8221;. Attention cette fonctionnalité est buguée dans les version antérieures à 0.9.9. Elle semble à présent donner le traitement attendu. C&#8217;est vraiment utile si comme moi, vous n&#8217;êtes pas fana de l&#8217;édition XML. Pour en revenir au fichier POM de l&#8217;EAR voici ses rubriques puis son contenu</p>
<ul>
<li>En-tête : je précise qu&#8217;il s&#8217;agit bien d&#8217;un module EAR et je n&#8217;oublie pas de pointer sur le projet Maven parent</li>
<li>Dans les dependencies je n&#8217;oublie pas de placer les modules EJB et WAR de mon projet</li>
<li>Dans la section build j&#8217;ajoute le plug-in EAR de Maven dans lequel j&#8217;indique le répertoire où stocker les jar du projet et demande au système de générer le fichier application.xml</li>
<li>Dans la section modules du plugin j&#8217;ajoute les modules de mon projet EAR que j&#8217;ai défini au début du fichier comme dependencies</li>
</ul>
<p>
[/lang_fr]<br />
[lang_en]<br />
If yo want to exclude a jar you can do it via the context menu and choosing &#8220;Exclude Maven Artefact&#8230;&#8221; (wasn&#8217;t working in version 0.98 of m2eclipse). Now, back to our pom file of EAR module here are its content</p>
<ul>
<li>header : I specify that it&#8217;s an EAR module and I don&#8217;t forget to point to the Parent project</li>
<li>In the dependencies I don&#8217;t forget EJB and War modules</li>
<li>In the build section I add the Maven EAR plugin. In the configuration of the plugin I give the directory where to put the lib and ask Maven to generate my application.xml file</li>
<li>In the modules section of the plugin, I add my EJB and WAR modules that I defined at the beginning of the file as dependencies</li>
</ul>
<p>
[/lang_en]</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;parent&gt;
    &lt;artifactId&gt;pfm77-parent&lt;/artifactId&gt;
    &lt;groupId&gt;cos&lt;/groupId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;/parent&gt;
  &lt;groupId&gt;cos&lt;/groupId&gt;
  &lt;artifactId&gt;pfm77-ear&lt;/artifactId&gt;
  &lt;packaging&gt;ear&lt;/packaging&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;pfm77-ear JEE5 Assembly&lt;/name&gt;
  &lt;url&gt;http://maven.apache.org&lt;/url&gt;

  &lt;dependencies&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;cos&lt;/groupId&gt;
      &lt;artifactId&gt;pfm77-ejb&lt;/artifactId&gt;
      &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
      &lt;type&gt;ejb&lt;/type&gt;
      &lt;scope&gt;compile&lt;/scope&gt;

    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;cos&lt;/groupId&gt;
      &lt;artifactId&gt;pfm77-war&lt;/artifactId&gt;
      &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
      &lt;type&gt;war&lt;/type&gt;
      &lt;scope&gt;compile&lt;/scope&gt;

    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
      &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
      &lt;version&gt;${seam.version}&lt;/version&gt;
      &lt;type&gt;ejb&lt;/type&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;javax.el&lt;/groupId&gt;
          &lt;artifactId&gt;el-api&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;artifactId&gt;javassist&lt;/artifactId&gt;
          &lt;groupId&gt;javassist&lt;/groupId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;artifactId&gt;dom4j&lt;/artifactId&gt;
          &lt;groupId&gt;dom4j&lt;/groupId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.ostermiller&lt;/groupId&gt;
      &lt;artifactId&gt;utils&lt;/artifactId&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.richfaces.framework&lt;/groupId&gt;
      &lt;artifactId&gt;richfaces-api&lt;/artifactId&gt;
      &lt;version&gt;${richfaces.version}&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;artifactId&gt;commons-collections&lt;/artifactId&gt;
          &lt;groupId&gt;commons-collections&lt;/groupId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;artifactId&gt;commons-logging&lt;/artifactId&gt;
          &lt;groupId&gt;commons-logging&lt;/groupId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

  &lt;/dependencies&gt;

  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-ear-plugin&lt;/artifactId&gt;
        &lt;version&gt;2.3.2&lt;/version&gt;
        &lt;configuration&gt;
          &lt;version&gt;5&lt;/version&gt;
          &lt;defaultLibBundleDir&gt;lib&lt;/defaultLibBundleDir&gt;
          &lt;generateApplicationXml&gt;true&lt;/generateApplicationXml&gt;

          &lt;modules&gt;
            &lt;ejbModule&gt;
              &lt;groupId&gt;cos&lt;/groupId&gt;
              &lt;artifactId&gt;pfm77-ejb&lt;/artifactId&gt;
            &lt;/ejbModule&gt;
            &lt;ejbModule&gt;
              &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
              &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
            &lt;/ejbModule&gt;
            &lt;webModule&gt;
              &lt;groupId&gt;cos&lt;/groupId&gt;
              &lt;artifactId&gt;pfm77-war&lt;/artifactId&gt;
              &lt;contextRoot&gt;PFM77&lt;/contextRoot&gt;
            &lt;/webModule&gt;
          &lt;/modules&gt;

        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
    &lt;finalName&gt;pfm77-ear&lt;/finalName&gt;
  &lt;/build&gt;

&lt;/project&gt;
</pre>
<p></p>
<p>[lang_fr]<br />
<h4>Le projet EJB</h4>
<p>On continue avec le POM du projet EJB. Pas grand chose à dire excepté sur le plugin EJB de maven qui nous permet de définir la version des EJB employée (la version 2.1 c&#8217;est la version du plug-in de Maven).</p>
<p>[/lang_fr]<br />
[lang_en]</p>
<h4>EJB project</h4>
<p>Next step the EJB pom file. Not a lot of things to say about it except concerning the Maven EJB plugin which is used to set the EJB version.<br />
[/lang_en]
</p>
<p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;parent&gt;
    &lt;artifactId&gt;pfm77-parent&lt;/artifactId&gt;
    &lt;groupId&gt;cos&lt;/groupId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;/parent&gt;
  &lt;groupId&gt;cos&lt;/groupId&gt;
  &lt;artifactId&gt;pfm77-ejb&lt;/artifactId&gt;
  &lt;packaging&gt;ejb&lt;/packaging&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;pfm77-ejb JEE5 EJB&lt;/name&gt;
  &lt;url&gt;http://maven.apache.org&lt;/url&gt;
  &lt;dependencies&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;javaee&lt;/groupId&gt;
      &lt;artifactId&gt;javaee-api&lt;/artifactId&gt;
      &lt;version&gt;5&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;junit&lt;/groupId&gt;
      &lt;artifactId&gt;junit&lt;/artifactId&gt;
      &lt;version&gt;3.8.1&lt;/version&gt;
      &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
      &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
      &lt;version&gt;${seam.version}&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;

    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.hibernate&lt;/groupId&gt;
      &lt;artifactId&gt;hibernate-annotations&lt;/artifactId&gt;
      &lt;version&gt;3.2.0.ga&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;commons-beanutils&lt;/groupId&gt;
      &lt;artifactId&gt;commons-beanutils&lt;/artifactId&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
      &lt;groupId&gt;org.ostermiller&lt;/groupId&gt;
      &lt;artifactId&gt;utils&lt;/artifactId&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
    &lt;dependency&gt;
    	&lt;groupId&gt;mysql&lt;/groupId&gt;
    	&lt;artifactId&gt;mysql-connector-java&lt;/artifactId&gt;
    	&lt;version&gt;5.1.6&lt;/version&gt;
    	&lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;
  &lt;/dependencies&gt;

  &lt;build&gt;
    &lt;plugins&gt;
      &lt;plugin&gt;
        &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
        &lt;artifactId&gt;maven-ejb-plugin&lt;/artifactId&gt;
        &lt;version&gt;2.1&lt;/version&gt;
        &lt;configuration&gt;
          &lt;ejbVersion&gt;3.0&lt;/ejbVersion&gt;

        &lt;/configuration&gt;
      &lt;/plugin&gt;
    &lt;/plugins&gt;
    &lt;finalName&gt;pfm77-ejb&lt;/finalName&gt;
  &lt;/build&gt;
&lt;/project&gt;
</pre>
<p></p>
<p>[lang_fr]<br />
<h4>Le projet WAR</h4>
<p>Et pour finir le pom d projet WAR. Notons que pour ce projet nous n&#8217;avons pas recours au plugin WAR de Maven, les valeurs par défaut du packaging war nous suffisent. Le plugin permettrait de préciser certains éléments de configuration.</p>
<p>[/lang_fr]</p>
<p>[lang_en]<br />
<h4>WAR project</h4>
<p>Last but not least the WAR pom file. Notice that we&#8217;re not using Maven war plugin in this pom file, the default values of War packaging are enough.</p>
<p>[/lang_en]<br />
</p>
<p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
  xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
  &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
  &lt;parent&gt;
    &lt;artifactId&gt;pfm77-parent&lt;/artifactId&gt;
    &lt;groupId&gt;cos&lt;/groupId&gt;
    &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;/parent&gt;
  &lt;groupId&gt;cos&lt;/groupId&gt;
  &lt;artifactId&gt;pfm77-war&lt;/artifactId&gt;
  &lt;packaging&gt;war&lt;/packaging&gt;
  &lt;version&gt;0.0.1-SNAPSHOT&lt;/version&gt;
  &lt;name&gt;pfm77-war JEE5 Webapp&lt;/name&gt;
  &lt;url&gt;http://maven.apache.org&lt;/url&gt;
  &lt;dependencies&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
      &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
      &lt;version&gt;2.5&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;javax.servlet.jsp&lt;/groupId&gt;
      &lt;artifactId&gt;jsp-api&lt;/artifactId&gt;
      &lt;version&gt;2.1&lt;/version&gt;
      &lt;scope&gt;provided&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;junit&lt;/groupId&gt;
      &lt;artifactId&gt;junit&lt;/artifactId&gt;
      &lt;version&gt;3.8.1&lt;/version&gt;
      &lt;scope&gt;test&lt;/scope&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
      &lt;artifactId&gt;jboss-seam-ui&lt;/artifactId&gt;
      &lt;version&gt;${seam.version}&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
          &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
      &lt;artifactId&gt;jboss-seam-debug&lt;/artifactId&gt;
      &lt;version&gt;${seam.version}&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
          &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
      &lt;artifactId&gt;jboss-seam-pdf&lt;/artifactId&gt;
      &lt;version&gt;${seam.version}&lt;/version&gt;
      &lt;scope&gt;compile&lt;/scope&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;org.jboss.seam&lt;/groupId&gt;
          &lt;artifactId&gt;jboss-seam&lt;/artifactId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.richfaces.ui&lt;/groupId&gt;
      &lt;artifactId&gt;richfaces-ui&lt;/artifactId&gt;
      &lt;version&gt;${richfaces.version}&lt;/version&gt;
    &lt;/dependency&gt;

    &lt;dependency&gt;
      &lt;groupId&gt;org.richfaces.framework&lt;/groupId&gt;
      &lt;artifactId&gt;richfaces-impl&lt;/artifactId&gt;
      &lt;version&gt;${richfaces.version}&lt;/version&gt;
      &lt;exclusions&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;commons-logging&lt;/groupId&gt;
          &lt;artifactId&gt;commons-logging&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;junit&lt;/groupId&gt;
          &lt;artifactId&gt;junit&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;javax.faces&lt;/groupId&gt;
          &lt;artifactId&gt;jsf-api&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;org.richfaces.framework&lt;/groupId&gt;
          &lt;artifactId&gt;richfaces-api&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
          &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
        &lt;/exclusion&gt;
        &lt;exclusion&gt;
          &lt;groupId&gt;javax.faces&lt;/groupId&gt;
          &lt;artifactId&gt;jsf-impl&lt;/artifactId&gt;
        &lt;/exclusion&gt;
      &lt;/exclusions&gt;
    &lt;/dependency&gt;

  &lt;/dependencies&gt;
  &lt;build&gt;

    &lt;finalName&gt;pfm77-war&lt;/finalName&gt;
  &lt;/build&gt;
&lt;/project&gt;
</pre>
<p></p>
<p>[lang_fr]<br />
<h4>Génération de la configuration Eclipse</h4>
<p>
Après avoir créé tous nos fichiers pom, nous allons demander à m2eclipse de générer les fichiers de configuration Eclipse. Pour ce faire, sur chaque projet on accède au menu contextuel puis on choisit &#8220;Maven/Update Projet Configuration&#8221; et tous les petits fichiers .claspath, .projects et le dossier .settings de nos projets sont mis à jour.</p>
<h4>Premier build Maven et déjà quelques réglages</h4>
<p>
Nous sommes prêt à lancer notre premier build Maven. Dans le menu contextuel du projet parent (pas l&#8217;EAR). On choisit &#8220;Run as&#8230;/Maven install&#8221; ou &#8220;Maven package&#8221;. Maven se lance et le build échoue&#8230; Pas de panique ce problème est dû à un conflit causé par la présence de la résolution Maven dans le workspace. On désactive cette option sur le projet parent (et lui seul) dans le menu contextuel en choisissant &#8220;Maven/Disable Workspace Resolution&#8221; (je sais, ça se mérite ! La preuve, vous êtes toujours en train de lire). On relance le build et miracle, notre construction Maven aboutit à la génération d&#8217;un fichier EAR dans le répertoire target du projet EAR. En ligne de commande, on se placera dans le dossier du projet parent et on tapera &#8220;mvn package&#8221; pour obtenir le même effet.</p>
<h4>Et WTP ?</h4>
<p>
N&#8217;oublions pas qu&#8217;on a fait tout ça pour fonctionner sous WTP et Maven en même temps. Nous y sommes presque. Seul petit souci, le fichier aplication.xml de notre EAR WTP ne sait pas demander à Maven de le générer à la volée. Il faudra donc le recopier du dossier target vers le dossier &#8220;src/main/application/META-INF&#8221; et le refaire à chaque fois que les modules de l&#8217;EAR changent (a priori ce n&#8217;est pas tous les jours). Et maintenant ? Hé bien, croyez le ou non mais c&#8217;est fini et ça marche. Dans la vue serveur d&#8217;Eclipse choisissez votre serveur (si vous n&#8217;en n&#8217;avez pas vous pouvez créer un déploiement local en ajoutant un serveur &#8220;local deployer&#8221;). Dans le menu contextuel du serveur choisissez &#8220;Add remove..&#8221; et ajoutez votre projet.[/lang_fr]</p>
<p>[lang_en]</p>
<h4>Generating Eclipse configuration</h4>
<p>Now that we have our pom files, we&#8217;ll ask m2eclipse to refresh eclipse config files by accessing the &#8220;Maven/update configuration file&#8221; in the context menu of each project. Doing this refresh .classpath, .project files and .settings folder of our projects.</p>
<h4>First Maven build and first fix</h4>
<p>From the context menu of the parent project (not the EAR), choose &#8220;Run as&#8230;/Maven install&#8221; or &#8220;Maven package&#8221;. Maven is launched but the build fails. Don&#8217;t panic this issue is caused by a conflict in Maven resolution and Workspace resolution. Disable Worksapce resolution in the parent project by choosing  &#8220;Maven/Disable Workspace Resolution&#8221; in contextual menu of the parent project. Launch the build again and &#8220;voila&#8221;. You get an ear file in the target directory of the EAR project. In command line you&#8217;ll have to launch &#8220;mvn install&#8221; from parent project folder to have the same result.</p>
<h4>What about WTP ?</h4>
<p>Before using WTP to deploy your project you&#8217;ll have to copy the application.xml file from the target folder (of the EAR project) to the &#8220;src/main/application/META-INF&#8221; folder and do it again each time EAR modules change (which is not so often). And now ? Beleive it or not but it&#8217;s over and it works. In the server view choose your server (if you don&#8217;t have one you can create a &#8220;local deployer&#8221;). In the contextual menu choose &#8220;Add remove&#8230;&#8221; and add your project.<br />
[/lang_en]</p>
<p style="text-align: center;"><img class="size-medium wp-image-254 aligncenter" title="Deployment" src="http://www.next-presso.fr/wp-content/uploads/2009/06/Image-12-293x300.png" alt="Deployment" width="293" height="300" /></p>
<p>[lang_fr]Cliquez ensuite sur &#8220;publish&#8221; et tadaaa, votre projet est déployé via WTP (enfin normalement, sinon recommencez le tuto du début :- ) ). Seule ombre au tableau, le déploiement génère un répertoire WEB-INF dans la racine de l&#8217;EAR reprenant le dossier lib du module war. Le module war comprend bien son lib, c&#8217;est juste une duplication dû à <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=247090" target="_blank">un bug eclipse</a>. A priori rien de gênant pour une exécution en local</p>
<h4>Conclusion</h4>
<p>Comme on l&#8217;a vu m2eclipse demande pas mal de connaissances pour être utilisé dans un contexte WTP. Cela dit, il reste un outil très puissant hors de ce besoin d&#8217;intégration si particulier mais tellement pratique. Concernant Seam et Maven, JBoss travail activement à simplifier la tâche des développeurs. En effet JBoss tools 3.1 devrait inclure des extensions permettant de <a href="https://jira.jboss.org/jira/browse/JBIDE-3874" target="_blank">travailler avec m2eclipse depuis un projet Seam</a> et Seam 3.0 devrait être beaucoup facile à <a href="http://sfwk.org/Download/SeamDownloads#H-BuildingSeam3" target="_blank">utiliser à travers Maven</a>.</p>
<p>A suivre donc&#8230;[/lang_fr]<br />
[lang_en]<br />
Then click on &#8220;publih&#8221; and tadaaa, your project is deployed with WTP (if it&#8217;s not, you just have to restart all this tutorial over <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ). The only issue is a WEB-INF directory in the root of the EAR which contains a copy of the lib directory of the good WEB-INF directory of the war module. This problem should be harmless for a local deployment and is caused by this <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=247090" target="_blank">Eclipse bug</a>.</p>
<h4>Conclusion</h4>
<p>So m2eclipse is not working out of the box with WTP project. However it&#8217;s a powerfull tool even without this need. About Seam and Maven, JBoss is working on making developer life more simple. JBoss tools 3.1 should include extensions to <a href="https://jira.jboss.org/jira/browse/JBIDE-3874" target="_blank">ease the work with m2eclipse and Seam</a> and Seam 3.0 should be totally mavenized, so easier to be <a href="http://sfwk.org/Download/SeamDownloads#H-BuildingSeam3" target="_blank">build with Maven</a>.</p>
<p>We&#8217;ll keep an eye on it&#8230;<br />
[/lang_en]</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/06/wtp-m2eclipse-seam-cest-bien-maven/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Ma todo list du deuxième semestre</title>
		<link>http://www.next-presso.com/2009/06/ma-todo-list-du-deuxieme-semestre/</link>
		<comments>http://www.next-presso.com/2009/06/ma-todo-list-du-deuxieme-semestre/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 20:25:18 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Scrum]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=181</guid>
		<description><![CDATA[<p>Depuis le début de l&#8217;année et le démarrage de mon nouveau job, j&#8217;ai vu passer beaucoup de nouveautés et n&#8217;ai pas vraiment eu le temps de m&#8217;y attarder.</p> <p>Voici les outils ou technologies que j&#8217;aimerai au moins explorer, au mieux expérimenter pendant cette fin d&#8217;année :</p> Le développement d&#8217;application iPhone : là c&#8217;est sûr, un [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis le début de l&#8217;année et le démarrage de mon nouveau job, j&#8217;ai vu passer beaucoup de nouveautés et n&#8217;ai pas vraiment eu le temps de m&#8217;y attarder.</p>
<p>Voici les outils ou technologies que j&#8217;aimerai au moins explorer, au mieux expérimenter pendant cette fin d&#8217;année :</p>
<ul>
<li>Le développement d&#8217;application iPhone : là c&#8217;est sûr, un beau projet iPhone vient de me tomber dessus. J&#8217;essaierai de vous tenir informés de mon avancée sur le sujet</li>
<li>Le développement pour Androïd : c&#8217;est pas fait, mais le comparatif avec l&#8217;iPhone m&#8217;intéresse <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Mener mon premier projet full agile : ça vient aussi</li>
<li>Mettre en oeuvre Seam 2.2 la première version vraiment JEE (voir mon <a href="https://jira.jboss.org/jira/browse/JBSEAM-3119" target="_blank">ticket JIRA</a> préféré sur le sujet)</li>
<li>Utiliser Asap Eclipse 3.5 et JBoss tools 3.0 : ça devrait commencer la semaine prochaine</li>
<li>Faire des tests avec Google Application Engine</li>
<li>Lancer le projet Open Source que je dois lancer depuis une éternité.</li>
</ul>
<p>Beaucoup de sujets sur le feu. Bon mettons que je n&#8217;en fasse que a moitié ce serait déjà pas mal. J&#8217;essaierai aussi de produire un peu plus de contenu sur mon blog.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/06/ma-todo-list-du-deuxieme-semestre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Lifting et accès mobile pour Next Presso</title>
		<link>http://www.next-presso.com/2009/06/lifting-et-acces-mobile-pour-next-presso/</link>
		<comments>http://www.next-presso.com/2009/06/lifting-et-acces-mobile-pour-next-presso/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 07:29:49 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=169</guid>
		<description><![CDATA[<p>Je viens de changer le thème du blog pour quelque chose de plus aéré et évolutif.</p> <p>Par ailleurs, grâce au plugin wptouch next presso est maintenant optimisé pour la plupart des terminaux mobiles (iPhone/iPod Touch, Android, Blackberry&#8230;).</p> <p>Vos retours sur le sujet sont bienvenus.</p> ]]></description>
			<content:encoded><![CDATA[<p>Je viens de changer le thème du blog pour quelque chose de plus aéré et évolutif.</p>
<p>Par ailleurs, grâce au plugin <a href="http://www.bravenewcode.com/wptouch/" target="_blank">wptouch</a> next presso est maintenant optimisé pour la plupart des terminaux mobiles (iPhone/iPod Touch, Android, Blackberry&#8230;).</p>
<p>Vos retours sur le sujet sont bienvenus.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/06/lifting-et-acces-mobile-pour-next-presso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Les castcodeurs : une initiative vraiment sympa</title>
		<link>http://www.next-presso.com/2009/06/les-castcodeurs/</link>
		<comments>http://www.next-presso.com/2009/06/les-castcodeurs/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 18:48:39 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=162</guid>
		<description><![CDATA[<p>Un peu de pub pour les Castcodeurs : un podcast de spécialistes du monde du développement Java. Réservé à un public un peu geek et branché Java, mais c&#8217;est vraiment sympa. </p> ]]></description>
			<content:encoded><![CDATA[<p>Un peu de pub pour les Castcodeurs : un podcast de spécialistes du monde du développement Java. Réservé à un public un peu geek et branché Java, mais c&#8217;est vraiment sympa.<br />
<a href="http://lescastcodeurs.com"><img src="http://lescastcodeurs.com/img/jecoute_les_castcodeurs_200px.png" border="0" alt="J'ecoute les Cast Codeurs" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/06/les-castcodeurs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>La guerre des RIA aura-t&#8217;elle lieu ?</title>
		<link>http://www.next-presso.com/2009/06/la-guerre-des-ria-aura-telle-lieu/</link>
		<comments>http://www.next-presso.com/2009/06/la-guerre-des-ria-aura-telle-lieu/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 15:51:51 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Flex]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[GWT]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[JavaFx]]></category>
		<category><![CDATA[SaaS]]></category>
		<category><![CDATA[Wave]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=144</guid>
		<description><![CDATA[<p>Depuis deux ou trois ans, on nous prédit une guerre sans merci entre les différents acteurs des technologies Internet Riches. L&#8217;arrivée de Microsoft avec Silverlight semble avoir mis le feu au poudre, dans la foulée Adobe a commencé à communiquer de plus en plus sur Flex et à sortir Air (qui est plus une technologie [...]]]></description>
			<content:encoded><![CDATA[<p>Depuis deux ou trois ans, on nous prédit une guerre sans merci entre les différents acteurs des technologies Internet Riches. L&#8217;arrivée de Microsoft avec <a href="http://www.microsoft.com/silverlight/" target="_blank">Silverlight</a> semble avoir mis le feu au poudre, dans la foulée Adobe a commencé à communiquer de plus en plus sur <a href="http://www.adobe.com/fr/products/flex/" target="_parent">Flex</a> et à sortir <a href="http://www.adobe.com/fr/products/air/" target="_parent">Air</a> (qui est plus une technologie &#8220;desktop&#8221;) , enfin Sun est sorti du bois (un peu tard) pour prendre la place d&#8217;outsider avec <a href="http://www.javafx.com/" target="_blank">JavaFx</a>. Aujourd&#8217;hui, de nombreux décideurs s&#8217;interrogent sur ces technologies et quelques projets sont lancés en s&#8217;appuyant sur elles (pour JavaFx, il va falloir encore attendre), mais cette guerre annoncée risque d&#8217;être remportée par un acteur déjà en place et qui dispose d&#8217;un contrôle incontestable sur le web : Google.</p>
<p><span id="more-144"></span></p>
<h3>Le concept, les principes et les acteurs</h3>
<p>Avant tout, juste un petit point sur le concept des RIA. Je discutais du sujet il y a quelque jours avec un décideur qui m&#8217;expliquait qu&#8217;il faisait des RIA il y a déjà 10 ans avec Delphi. A ce compte, moi aussi il ya dix ans je faisais des RIA avec Lotus Notes. Cette anecdote illustre combien le concept n&#8217;est pas forcément clair.</p>
<p>L&#8217;idée générale des RIA est d&#8217;amener une expérience riche au sein d&#8217;une navigation Web. Plus prosaïquement : donner à l&#8217;utilisateur l&#8217;impression qu&#8217;il utilise un client lourd (une application &#8220;installée&#8221; sur son ordinateur) sans l&#8217;obliger à quitter son navigateur. Rien de révolutionnaire en soit, mais la facilité de mise en oeuvre de ce logiciel client riche pour l&#8217;utilisateur lève les principaux freins à son adoption. Les RIA permettent donc de déployer un applicatif client serveur sans aucune intervention de l&#8217;utilisateur (quand la configuration de son ordinateur est correcte).Pour une définition plus fouillée des RIA, faites un tout sur <a href="http://blog.aysoon.com/Que-sont-les-applications-riches-RIA-Partie-1-Definition-et-usages-195" target="_blank">cet excellent article</a> sur le sujet qui aborde aussi le concept de RDA (Rich Desktop Application).</p>
<p>Aujourd&#8217;hui deux principes prévalent pour la mise en oeuvre des RIA. Le premier repose sur l&#8217;idée que le navigateur ne propose pas d&#8217;outils suffisamment sophistiqués pour concevoir une interface riche. La technologie s&#8217;appuie donc sur un plugin qui vient enrichir le navigateur, c&#8217;est le cas des solutions d&#8217;Adobe, Microsoft ou Sun.</p>
<p>L&#8217;autre principe s&#8217;appuie sur les outils standard du navigateur à savoir le HTML et le language javascript. Ce mélange mis en oeuvre par Microsoft dans Internet Explorer 5 en 1999 grace au contrôle ActiveX &#8220;XMLHTTP&#8221; a été baptisé Ajax (Asynchronous Javascript And Xml) en 2005 puis standardisé par le W3C en 2006. Aujourd&#8217;hui beaucoup d&#8217;acteurs gravitent autour d&#8217;Ajax et s&#8217;appuient sur ses concepts simples et les fonctionnalités évoluées de HTML pour proposer des bibliothèque de composants Ajax permettant de concevoir des applications riches dans le navigateur. Parmi les pus populaires on peut citer <a href="http://jquery.com/" target="_blank">JQuery</a>, <a href="http://www.dojotoolkit.org/" target="_blank">Dojo</a>, <a href="http://developer.yahoo.com/yui/" target="_blank">YUI</a> (Yahoo) et <a href="http://code.google.com/intl/fr/webtoolkit/" target="_blank">GWT</a> (Google). Dans l&#8217;univers Java, des technologies comme <a href="http://wicket.apache.org/" target="_blank">Wicket</a> ou <a href="http://java.sun.com/javaee/javaserverfaces/" target="_blank">JSF</a> permettent d&#8217;embarquer de l&#8217;Ajax sans avoir à produire le Javascript et le HTML nécessaire pour le mettre en oeuvre. Côté JSF on peut citer des acteurs comme <a href="http://www.jboss.org/jbossrichfaces/" target="_blank">RichFaces</a> ou <a href="http://www.icefaces.org" target="_blank">IceFaces</a>.</p>
<p>Quoiqu&#8217;il en soit, l&#8217;acteur qui a popularisé le plus Ajax et en a fourni une &#8220;proof of concept&#8221; est certainement Google qui dès 2004 avec Gmail puis en 2005 avec Google maps a fait la démonstration qu&#8217;Ajax était viable et pouvait être utilisé pour concevoir des applications très sollicités  et hautement interactives. Google a ainsi été le pionnier du Web 2.0 où d&#8217;autres acteurs l&#8217;ont suivi rapidement comme Facebook ou Netvibes.</p>
<p>En schématisant on peut donc dire que l&#8217;univers RIA compte 4 acteurs majeurs :</p>
<ul>
<li>Adobe avec Flex ;</li>
<li>Microsoft avec Silverlight ;</li>
<li>Sun / Oracle avec JavaFx (Ok, celui là est franchement discutable) ;</li>
<li>Google avec GWT en tant que tête de pont de la mise en oeuvre d&#8217;Ajax.</li>
</ul>
<h3>En route vers le Web 3.0</h3>
<p>Cette semaine s&#8217;est tenu le Google I/O, la conférence développeur de Google à San Francisco. <a href="http://code.google.com/intl/fr/events/io/" target="_blank">Les annonces</a> faites lors de cet événement sont peut être les prémices d&#8217;une nouvelle &#8220;révolution&#8221; du Web. Ces annonces ont tourné autour de deux points :</p>
<ul>
<li>HTML 5 : la plupart des nouvelles versions des navigateurs supportent en avant première les nouveauté d&#8217;HTML 5 (annoncé pour 2010). Tim O&#8217;Reilly, brillant analyste <a href="http://radar.oreilly.com/2009/05/google-bets-big-on-html-5.html" target="_blank">résume assez bien cette conférence</a> sur son blog. Pour faire court, HTML 5 enrichit son ancêtre en intégrant nativement les technologies suivantes :
<ul>
<li>Canvas : qui permet de générer dynamiquement du contenu graphique sur la page web en cours ;</li>
<li>L&#8217;intégration de la vidéo : aujourd&#8217;hui une telle intégration nécessite un plugin. HTML 5 supportera nativement la vidéo permettant ainsi de créer des applications de manipulation d&#8217;images comme du montage vidéo ;</li>
<li>La Géolocalisation déjà présente sur la plupart des terminaux mobiles comme l&#8217;iPhone ou Androïd ;</li>
<li>AppCache et Database qui permettent de répliquer une application Web pour la mettre en mode offline</li>
<li>Web workers qui permet de paralléliser des traitements serveurs et clients et d&#8217;augmenter significativement la performance d&#8217;une application web</li>
</ul>
</li>
<li>Google Wave : le nouvel outil hyper-communiquant de Google qui sortira cette année. <a href="ditorial/502822/google-wave-le-futur-couteau-suisse-de-la-communication/" target="_blank">Cet article de 01</a> résume assez bien cet outil. Plus qu&#8217;un bureau communiquant, Wave sera apparemment une plate-forme SaaS dans laquelle les développeurs pourront enrichir l&#8217;écosystème applicatif à l&#8217;instar de Salesforce ou de l&#8217;appsotre d&#8217;Apple. Bref, un croisement fonctionnel entre la messagerie, le forum de discusssion, la messagerie instantanée, le réseau social et le travail collaboratif, le tout en opensource et librement extensible. Wave va probablement révolutionner notre façon de communiquer sur Internet. Et quoi qu&#8217;il en soit, il constitue la Killer App (tout comme Maps le fut en 2005) pour pousser HTML 5 et Google Web Toolkit.</li>
</ul>
<h3>Conclusion</h3>
<p>Google semble mettre toutes ses forces sur HTML 5 et les évolutions d&#8217;Ajax qui en découleront, et sur le papier (ou l&#8217;écran) ça à l&#8217;air très très prometteur. Face à ces évolutions alléchantes qui seront partie intégrantes de tous les navigateurs modernes sur toutes les plate-formes, les investissements colossaux des acteurs qui parient sur des technologies propriétaires avec des plug-in à adapter à chaque plate-forme et chaque navigateur semblent un peu plus hasardeux.</p>
<p>Mais, personne ne dispose d&#8217;une boule de cristal et les prophètes sur le sujet se sont maintes fois trompés par le passé. La seule certitude que l&#8217;on puisse avoir c&#8217;est que la conception d&#8217;applications en ligne et l&#8217;ergonomie de ces applications d&#8217;ici 5 ans n&#8217;aura pas grand chose à voir avec celle d&#8217;aujourd&#8217;hui.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/06/la-guerre-des-ria-aura-telle-lieu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Salesforce : la tête dans les nuages, les pieds trop sur terre</title>
		<link>http://www.next-presso.com/2009/04/salesforce-la-tete-dans-les-nuages-les-pieds-trop-sur-terre/</link>
		<comments>http://www.next-presso.com/2009/04/salesforce-la-tete-dans-les-nuages-les-pieds-trop-sur-terre/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 03:44:55 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Général]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Salesforce]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=98</guid>
		<description><![CDATA[<p></p> <p>Deux événements important ont eu lieu la semaine dernière dans l&#8217;univers encore brumeux du cloud computing.</p> Le lancement par Google de la bêta public de Google App engine for Java ; L&#8217;évenement CloudForce organisé par Salesforce à Londres ; <p>Si le premier est plus exposé médiatiquement, il n&#8217;en reste pas moins que l&#8217;actualité autour [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-104 alignleft" style="border: 1px solid black; margin: 2px;" title="Nuage" src="http://www.next-presso.fr/wp-content/uploads/2009/04/images.jpg" alt="nuage" width="135" height="102" /></p>
<p>Deux événements important ont eu lieu la semaine dernière dans l&#8217;univers encore brumeux du cloud computing.</p>
<ul>
<li>Le lancement par Google de la bêta public de <a href="http://googleappengine.blogspot.com/2009/04/seriously-this-time-new-language-on-app.html" target="_blank">Google App engine for Java</a> ;</li>
<li>L&#8217;évenement <a href="http://www.salesforce.com/eu/cloudforce/09-london/" target="_blank">CloudForce</a> organisé par Salesforce à Londres ;</li>
</ul>
<p>Si le premier est plus exposé médiatiquement, il n&#8217;en reste pas moins que l&#8217;actualité autour de Salesforce est à suivre de très prêt, car il y a fort à parier que cette société très innovante aujourd&#8217;hui partenaire de Google se rapproche un peu plus du géant dans un proche avenir. Mais ne brulons pas les étapes, comme je m&#8217;intéresse depuis quelques temps au cloud computing, j&#8217;ai pensé utile de faire un point sur les notions et acteurs de ce secteur.</p>
<p><span id="more-98"></span></p>
<h3>Un peu de vocabulaire</h3>
<p>Comme bien souvent en informatique on habille des vieux concepts avec de nouveaux noms. Ainsi, le &#8220;cloud computing&#8221; n&#8217;est pas vraiment une idée neuve. Au siècle dernier au parlait déjà d&#8217;applications en mode ASP (Application Service Provider) ou d&#8217;applications &#8220;on-demand&#8221;. Toutefois, le cloud computing introduit 3 concepts qu&#8217;il est intéressant de distinguer :</p>
<ul>
<li>IaaS (Infrastructure as a Service) : mise à disposition d&#8217;hébergement évolutif, comme le propose aujourd&#8217;hui <a href="http://fr.gandi.net/hebergement/" target="_blank">Gandi</a> ou <a href="http://aws.amazon.com/" target="_blank">Amazon</a> (ces derniers offrant aussi des sevices PaaS) ;</li>
<li>PaaS (Plateform as a Service) : un hébergement et une plate-forme de développement dotée de services spécifiques (base de données, paiement en ligne) permettant de développer sur la plate-forme en question.</li>
<li>SaaS (Software as a Service) : environnement applicatif complet dans le nuage. Analogue à ce qu&#8217;on pouvait appeler mode &#8220;ASP&#8221; dans une vie antérieur (mas ça fait moins sexy). L&#8217;environnement peut englober un service PaaS ou non. L&#8217;usage de l&#8217;application nécessite de payer un abonnement dont le montant peut être fonction du niveau de consommation que l&#8217;on a de l&#8217;application ou plus classiquement, d&#8217;un niveau fonctionnel.</li>
</ul>
<h3>Les acteurs</h3>
<p>Le monde du SaaS regroupe aujourd&#8217;hui beaucoup d&#8217;acteurs. En France on peu citer des gens comme Trace One ou RunMyProcess. Dans les poids lourds on retrouve les gands éditeurs d&#8217;ERP comme Sap, Oracle ou Cegid. Mais les acteurs les plus intéressants, à mon sens, sont ceux capables de jouer sur les deux niveaux : SaaS + PaaS. Là, les trois grands acteurs sont aujourd&#8217;hui Google avec ses Google apps pour le SaaS et Google App Engine pour le PaaS, Microsoft avec son offre Azure et bien sûr SalesForce.</p>
<p>Je ne m&#8217;étendrais pas sur Microsoft dans ces colonnes, des gens bien plus intéressés et bien plus spécialistes le font très bien ailleurs. Concernant Google, leur approche originale basée jusqu&#8217;à présent sur le langage python pour le PaaS et sur Google Apps pour le SaaS prend de l&#8217;envergure en supportant désormais Java. Comme le Touilleur Express relate extrêmement bien la soirée de lancement de Google Apps Engine <a href="http://www.touilleur-express.fr/2009/04/09/google-appengine-retour-de-soiree/" target="_blank">ici</a>, je vais m&#8217;épargner quelques paragraphes. Il me reste à vous entretenir de Saleforce.</p>
<h3>Salesforce : une offre innovante mais un plan tarifaire des années 90</h3>
<p>Salesforce s&#8217;est imposé ces dernières années comme un acteur majeur du CRM en mode SaaS. L&#8217;évolution récente de sa plate-forme mérite vraiment que l&#8217;on s&#8217;y arrête. En effet, Salesforce est probablement le seul acteur avec une offre métier aussi forte ayant franchi le pas du SaaS pour aller vers le PaaS. Aujourd&#8217;hui Salesforce propose une réelle plateforme de développement basée sur un langage propriétaire dont la syntaxe est calquée sur Java : apex et d&#8217;un IDE basé sur Eclipse. Cette plateforme permet à des partenaires de développer des extensions au CRM et de les proposer dans un écosystème comparable  à l&#8217;Appstore d&#8217;Apple : l&#8217;Appexchange. Elle permet également de développer des applications indépendantes du CRM mais qui bénéficie de l&#8217;infrastructure de Salesforce pour s&#8217;exécuter. Bref, Salesforce joue une place à part dans l&#8217;univers des SaaS et empiète sur le territoire d&#8217;acteurs comme Google ou Amazon ayant une très forte expertise métier comme colonne vertébrale de son offre de service.</p>
<p>Ces innovations assez audacieuses rendent d&#8217;autant plus surprenant un système tarifaire des plus classiques qui rappel celui des logiciels vendus sur support physiques et donc figé  (dans la veine : &#8220;édition personnelle&#8221;, &#8220;édition PME&#8221;, &#8220;édtion Pro&#8221;).  Je passe sur les prix en euros plus chers qu&#8217;en dollars (3000 $ deviennent 3240 €) qui sont à mon sens plus propices à dégrader l&#8217;image et la confiance dans la marque qu&#8217;autre chose pour m&#8217;interroger sur l&#8217;impossibilité qu&#8217;une société comme celle-ci puisse imaginer des formules d&#8217;abonnements plus astucieuses et surtout plus souples, plus &#8220;on-demand&#8221;. Bref, une réelle sensation d&#8217;enfumage commercial et un boulevard pour la concurrence : ça tombe bien Microsoft fourbit ses armes.</p>
<p>Google et Salesforce ayant déjà opérés un certain nombre de partenariats, je ne pense pas prendre beaucoup de risque en pariant sur un futur rachat de l&#8217;un par l&#8217;autre (devinez dans quel sens) et la prochaine constitution d&#8217;une offre très attractive sur une plateforme SaaS et PaaS proposant CRM, bureautique et plus si affinité. On parie ?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/04/salesforce-la-tete-dans-les-nuages-les-pieds-trop-sur-terre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>De retour</title>
		<link>http://www.next-presso.com/2009/04/de-retour/</link>
		<comments>http://www.next-presso.com/2009/04/de-retour/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 15:00:55 +0000</pubDate>
		<dc:creator>Antoine Sabot-Durand</dc:creator>
				<category><![CDATA[Général]]></category>

		<guid isPermaLink="false">http://www.next-presso.fr/?p=95</guid>
		<description><![CDATA[<p>Après quelques péripéties personnelles et profesionnelles, me voici de retour sur mon bog. Je viens de voir que mon dernier post s&#8217;intitulait &#8220;pourquoi je blogue&#8221;, plutôt comique avant de faire une pause de 6 mois .</p> <p>Allez c&#8217;est reparti sur Du Seam, du Spring et un peu de nuages&#8230;</p> ]]></description>
			<content:encoded><![CDATA[<p>Après quelques péripéties personnelles et profesionnelles, me voici de retour sur mon bog. Je viens de voir que mon dernier post s&#8217;intitulait &#8220;pourquoi je blogue&#8221;, plutôt comique avant de faire une pause de 6 mois <img src='http://www.next-presso.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> .</p>
<p>Allez c&#8217;est reparti sur Du Seam, du Spring et un peu de nuages&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.next-presso.com/2009/04/de-retour/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

