<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://intelligents-ia.com/index.php/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Intelligents-ia</title>
  <link>http://intelligents-ia.com/index.php/</link>
  <atom:link href="http://intelligents-ia.com/iia/index.php/feed/rss2" rel="self" type="application/rss+xml"/>
  <description></description>
  <language>fr</language>
  <pubDate>Sat, 14 Jan 2012 11:41:09 +0100</pubDate>
  <copyright>Intelligents-ia</copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Lambda-calcul, type et modèles</title>
    <link>http://intelligents-ia.com/index.php/post/2011/11/11/Lambda-calcul%2C-type-et-mod%C3%A8les</link>
    <guid isPermaLink="false">urn:md5:2d739ebf2b3ef0c3ad68158e578ec0c1</guid>
    <pubDate>Fri, 11 Nov 2011 17:46:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>science</category>
            
    <description>&lt;p&gt;De J.L Krivine aux éditions Masson.&lt;/p&gt;
&lt;p&gt;Un auteur qui fait rêver,  professeur à l'université Paris-VII, &lt;a href=&quot;http://www.pps.jussieu.fr/~krivine/&quot; rel=&quot;external&quot;&gt;~krivine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Krivine est le père du nouveau point de vue sur la théorie, notamment sur les correspondances entre informatique et mathématique.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/book/.lambda_s.jpg&quot; alt=&quot;lambda.JPG&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/p&gt;
&lt;p&gt;De J.L Krivine aux éditions Masson.&lt;/p&gt;
&lt;p&gt;Un auteur qui fait rêver,  professeur à l'université Paris-VII, &lt;a href=&quot;http://www.pps.jussieu.fr/~krivine/&quot; rel=&quot;external&quot;&gt;~krivine&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Krivine est le père du nouveau point de vue sur la théorie, notamment sur les correspondances entre informatique et mathématique.&lt;/p&gt;
&lt;p&gt;Un très bon ouvrage, très complet mais qui n'explique pas assez les conséquences ses travaux à mon goûts, notamment la possible interprétation en psychologie ou en physiologie.&lt;/p&gt;
&lt;p&gt;Un livre qui mériterait une réédition avec un appendix dénotant les conséquences philosophiques des recherches de Krivine.&lt;/p&gt;
&lt;p&gt;Une mise à jour de ce livre est gratuitement disponible (en anglais) :&amp;nbsp;&lt;a href=&quot;http://www.pps.jussieu.fr/~krivine/articles/Lambda.pdf&quot; rel=&quot;external&quot;&gt;&lt;em&gt;Lambda-calculus, types and models&lt;/em&gt;&lt;/a&gt;&amp;nbsp;Ellis Horwood (1993) (mise à jour 3 novembre 2011)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/11/11/Lambda-calcul%2C-type-et-mod%C3%A8les#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/11/11/Lambda-calcul%2C-type-et-mod%C3%A8les#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/40</wfw:commentRss>
      </item>
    
  <item>
    <title>Spécifications algébriques, algorithmique et programmation</title>
    <link>http://intelligents-ia.com/index.php/post/2011/02/24/Sp%C3%A9cifications-alg%C3%A9briques%2C-algorithmique-et-programmation</link>
    <guid isPermaLink="false">urn:md5:7bdab42cb2b0d07c0cc9b80f8f68b252</guid>
    <pubDate>Fri, 11 Nov 2011 17:24:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>science</category>
        <category>algorithmique</category><category>Lecture</category>    
    <description>&lt;p&gt;De Jean-François Dufourd, Dominique Bechmann et Yves Bertrand.&lt;/p&gt;
&lt;p&gt;Paru en 12/1997&lt;/p&gt;
&lt;p&gt;Il a été mon livre de chevet pendant le temps de mes études à la faculté de Dijon, une aide essentiel pour qui veut construire et comprendre l'essence des types
et des algorithmes qui jouent avec.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/book/.specificationsalgebriques_s.jpg&quot; alt=&quot;specificationsalgebriques.jpg&quot; style=&quot;float: left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Spécification algébrique, algorithmique et programmation de Jean-François Dufourd, Dominique Bechmann et Yves Bertrand.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Paru en 12/1997&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il a été mon livre de chevet pendant le temps de mes études à la faculté de Dijon, une aide essentiel pour qui veut construire et comprendre l'essence des types
et des algorithmes qui jouent avec.&lt;/p&gt;
&lt;p&gt;Jean-François Dufourd est professeur d'informatique à l'université Louis-Pasteur de Strasbourg.&lt;br /&gt;
Dominique Bechmann et Yves Bertrand y sont respectivement maître de conférences et chargé de recherches CNRS. &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Extrait de la quatrième de couverture, car franchement je peux pas dire mieux:&lt;/p&gt;
&lt;p&gt;
L'ambition de cet ouvrage est de couvrir tout le processus allant de la spécification abstraite d'un problème à sa programmation en proposant des méthodes et outils réalistes et éprouvés.
&lt;/p&gt;
&lt;p&gt;
Il aborde ainsi la spécification des données et opérations, fondée sur les techniques algébriques, fournit des méthodes de transformation rigoureuses, conduisant à des algorithmes sûrs et bien documentés, et montre comment effectuer leur transcription en langage C.
&lt;/p&gt;
&lt;p&gt;
Il étudie en outre de manière systématique, avec des spécifications algébriques, les structures de données de base pour ranger, rechercher, trier des données et gérer un espace mémoire,
et introduit les notions liées à la complexité des algorithmes.&lt;br /&gt;
De nombreux sujets d'exercices, problèmes et projets complètent la présentation.
&lt;/p&gt;
&lt;p&gt;
L'ouvrage est destiné aux étudiants de licence maîtrise d'informatique, de MIAGE, des IUP d'informatique et des écoles d'ingénieurs.&lt;br /&gt;
Il sera aussi utile aux étudiants de DESS et aux développeurs de logiciel.
&lt;/p&gt;
&lt;h3&gt;Sommaire&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Construction de programmes&lt;/li&gt;
&lt;li&gt;Spécifications algébriques : le cas équationnel pur&lt;/li&gt;
&lt;li&gt;Spécifications algébriques : le cas général&lt;/li&gt;
&lt;li&gt;Implantation et programmation&lt;/li&gt;
&lt;li&gt;Spécifications étendues&lt;/li&gt;
&lt;li&gt;Piles, files et listes linéaires&lt;/li&gt;
&lt;li&gt;Suppression de la récursivité&lt;/li&gt;
&lt;li&gt;Complexité et optimalité&lt;/li&gt;
&lt;li&gt;Tables&lt;/li&gt;
&lt;li&gt;Graphes : spécification et implantation&lt;/li&gt;
&lt;li&gt;Graphes : algorithmes classiques&lt;/li&gt;
&lt;li&gt;Arbres et forêts : spécification et implantation&lt;/li&gt;
&lt;li&gt;Arbres et forêts : algorithmes et variétés d'arbres&lt;/li&gt;
&lt;li&gt;tris internes&lt;/li&gt;
&lt;li&gt;Fichiers&lt;/li&gt;
&lt;li&gt;Tris externes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Quand je vous disais que c'était la base... Lisez Le !!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/02/24/Sp%C3%A9cifications-alg%C3%A9briques%2C-algorithmique-et-programmation#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/02/24/Sp%C3%A9cifications-alg%C3%A9briques%2C-algorithmique-et-programmation#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/13</wfw:commentRss>
      </item>
    
  <item>
    <title>Keystone 1.4 est sortie !</title>
    <link>http://intelligents-ia.com/index.php/post/2011/11/11/Keystone-1.4-est-sortie-%21</link>
    <guid isPermaLink="false">urn:md5:acaf7e5515adf458b3b25ca7cf04ce9c</guid>
    <pubDate>Fri, 11 Nov 2011 15:56:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>keystone</category>
        <category>keystone</category><category>maven</category>    
    <description>&lt;p&gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
la version 1.4 de keystone viens de sortir!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
Pour rappel, ce projet est un bootstrap qui embarque votre application et ses dépendances en une seule archive.&lt;br /&gt;
Accompagné de son plugin maven, son utilisation est des plus simple!
&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/keystone/.card-keystone_s.jpg&quot; alt=&quot;keystone&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bonjour,&lt;br /&gt;
&lt;br /&gt;
la version 1.4 de keystone viens de sortir!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
Pour rappel, ce projet est un bootstrap qui embarque votre application et ses dépendances en une seule archive.&lt;br /&gt;
Accompagné de son plugin maven, son utilisation est des plus simple!
&lt;/p&gt;
&lt;p&gt;Cette nouvelle version 1.4 inclus :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;des corrections du plugin maven:
&lt;ul&gt;
&lt;li&gt;Le plugin ajoute un nouvel artifact au projet. Son Identifiant devient celui de votre projet suffixé par &quot;-boot&quot;&lt;/li&gt;
&lt;li&gt;les dépendances de scope compile et runtime sont désormais incluses&lt;/li&gt;
&lt;li&gt;les dépendances transitives sont désormais gérées (bug corrigé depuis la version 1.3)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;des correctifs du bootstrap:
&lt;ul&gt;
&lt;li&gt;les paramètres passé en lignes de commande sont désormais correctement redonner à la classe cible&lt;/li&gt;
&lt;li&gt;si le dossier d'extraction des archives n'a pas les droits d'écriture, les archives java seront extraites dans un dossier temporaires géré par la jvm &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;des évolutions autour des artifacts du projets:
&lt;ul&gt;
&lt;li&gt;ajout d'un artifact contenant les sources au projet &quot;org.intelligentsia.keystone:boot&quot; de façon à faciliter son utilisation avancée&lt;/li&gt;
&lt;li&gt;ajout d'un artifact contenant la javadoc&lt;/li&gt;
&lt;li&gt;les artifacts en &quot;release&quot; sont désormais signés&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Intégration du plugin à votre POM&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ajouter le repository du plugins&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;pluginRepositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepository&amp;gt;
&amp;lt;/pluginRepositories&amp;gt;
&amp;lt;repositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Et configurer le build de votre projet avec le plugin &quot;keystone-plugin&quot; (indiquer votre classe de démarrage) :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.intelligentsia.keystone&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.4&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;votre.class.Main&amp;lt;/mainClass&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;custom&amp;lt;/goal&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Récupération des sources&lt;/h3&gt;
&lt;p&gt;Les sources du projets ont été déplacées pour cette occasion.&lt;/p&gt;
&lt;p&gt;Pour récupérer le code source et construire le projet (client svn et maven obligatoire) :&lt;/p&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;
svn checkout https://intelligents-ia.googlecode.com/svn/trunk/keystone keystone --username yoursUserName
cd keystone
mvn clean package
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/11/11/Keystone-1.4-est-sortie-%21#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/11/11/Keystone-1.4-est-sortie-%21#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/39</wfw:commentRss>
      </item>
    
  <item>
    <title>Intéressé par la robotique ?</title>
    <link>http://intelligents-ia.com/index.php/post/2011/05/27/Int%C3%A9ress%C3%A9-par-la-robotique</link>
    <guid isPermaLink="false">urn:md5:ab9c9c910d4c6f7d224769f87fe09594</guid>
    <pubDate>Fri, 27 May 2011 12:53:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Java</category><category>Méthodologie</category><category>Robotique</category>    
    <description>&lt;p&gt;Vous vous dites que “flasher la rom du pic” c’est comme de la tarte au chocolat fourée à la moutarde&amp;nbsp;?
Bonne nouvelle, vous pouvez utiliser Android comme base de votre futur Robot&amp;nbsp;!&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/ioio-logo.png&quot; title=&quot;IOIO&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/ioio-logo-small.jpg&quot; alt=&quot;IOIO&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; title=&quot;IOIO&quot; /&gt;&lt;/a&gt;Vous vous dites que “flasher la rom du pic” c’est comme de la tarte au chocolat fourée à la moutarde&amp;nbsp;? &lt;br /&gt;
Bonne nouvelle, vous pouvez utiliser Android comme base de votre futur Robot !&lt;br /&gt;
&lt;br /&gt;
Il y a &lt;a href=&quot;http://ytai-mer.blogspot.com/&quot; rel=&quot;external&quot;&gt;IOIO&lt;/a&gt; (prononcé yo-yo) un projet qui vous permet de connecter votre téléphone sous android à vos périphériques favoris.&lt;br /&gt;
&lt;br /&gt;
De cette manière vous bénéficié de l’environnement Java pour vos création :-)&lt;br /&gt;
&lt;br /&gt;
Vous n’aurez plus aucune excuse pour ne pas transpirez des neurones.&lt;br /&gt;
&lt;br /&gt;
Et si vous voulez aller un peu plus loin, aller donc faire un tour sur ce projet &lt;a href=&quot;http://www.ros.org/wiki/&quot; rel=&quot;external&quot;&gt;ROS&lt;/a&gt; (projet sous &lt;a href=&quot;http://code.google.com/p/rosjava/&quot; rel=&quot;external&quot;&gt;google code&lt;/a&gt;)&lt;br /&gt;
&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/05/27/Int%C3%A9ress%C3%A9-par-la-robotique#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/05/27/Int%C3%A9ress%C3%A9-par-la-robotique#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/37</wfw:commentRss>
      </item>
    
  <item>
    <title>Gestion des transactions Spring JPA</title>
    <link>http://intelligents-ia.com/index.php/post/2011/05/27/gestion-des-transaction-Spring-JPA</link>
    <guid isPermaLink="false">urn:md5:0b75daaa7f60757e89561e2ecbe085c4</guid>
    <pubDate>Fri, 27 May 2011 11:03:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Hibernate</category><category>Java</category><category>JPA</category><category>Spring</category><category>Transaction</category>    
    <description>&lt;p&gt;Comment gérer les transactions quand on utilise Spring et JPA ?&lt;/p&gt;
&lt;p&gt;Ce n'est pas bien compliqué.... ou presque.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/logo/dao-small.png&quot; alt=&quot;dao-small.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Comment gérer les transactions quand on utilise Spring et JPA ?&lt;/p&gt;
&lt;p&gt;Ce n'est pas bien compliqué.... ou presque.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Il nous faut tout d'abord un projet avec des objets persités en base de données, quelques dao et les services d'interrogation ad hoc. Pour cela je vous propose de repartir du projet java de ce billet : &quot;&lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/04/28/How-to-%3A-JPA%2C-Hibernate-Co&quot;&gt;How to : JPA, Hibernate &amp;amp; Co&lt;/a&gt;&quot;.&lt;/p&gt;
&lt;p&gt;Si vous avez déjà lu ce billet, vous pouvez passer directement au chapitre suivant.
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Presentation du projet&lt;/h2&gt;
&lt;p&gt;Voici le modèle de données de ce projet&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/jpa-utility/sample-model.jpg&quot; title=&quot;sample-model.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/jpa-utility/sample-model.jpg&quot; alt=&quot;sample-model.jpg&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block; &quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;1. Créations des entitées et attributs&lt;/h3&gt;
&lt;p&gt;Pour l'entité site&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;/**
* Our Site entity.
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jérôme Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
@Entity
@Table(name = &quot;SITE&quot;)
@NamedQueries({
@NamedQuery(name = &quot;selectAllSite&quot;, query = &quot;SELECT s FROM Site s&quot;)
})
public class Site implements Serializable, TimeStamped {
/**
* serialVersionUID
*/
private static final long serialVersionUID = -1823543375371695270L;
/**
* Automatic version number
*/
@Version
protected Long version;
/**
* Identity with an automatic sequence
*/
@Id
@GeneratedValue(generator = &quot;SEQ_SITE_ID&quot;)
@SequenceGenerator(name = &quot;SEQ_SITE_ID&quot;, sequenceName = &quot;SEQ_SITE_ID&quot;)
@Column(name = &quot;SITE_ID&quot;)
private Long id;
/**
* Name of site with an index
*/
@Column(name = &quot;NAME&quot;, length = 48, nullable = true)
@Index(name = &quot;SITE_NAME_INDEX&quot;, columnNames = {
&quot;NAME&quot;
})
private String name;
...
/**
*  all pages
*/
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = &quot;SITE_ID&quot;)
private List&amp;lt;page&amp;gt; pages = new ArrayList&amp;lt;page&amp;gt;();
/**
* Time stamp data embedded in this entity
*/
@Embedded
private TimeStamp timeStamp = new TimeStamp();
...
}
&lt;/pre&gt;
&lt;p&gt;Pour l'entité &lt;strong&gt;Page&lt;/strong&gt;&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;/**
* a page included in our site entity
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jérôme Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
@Entity
@Table(name = &quot;PAGE&quot;)
public class Page implements  Serializable, TimeStamped{
private static final long serialVersionUID = -773904423928687747L;
/**
* Automatic version number
*/
@Version
protected Long version;
/**
* Identity with an automatic sequence
*/
@Id
@GeneratedValue(generator = &quot;SEQ_PAGE_ID&quot;)
@SequenceGenerator(name = &quot;SEQ_PAGE_ID&quot;, sequenceName = &quot;SEQ_PAGE_ID&quot;)
@Column(name = &quot;PAGE_ID&quot;)
private Long id;
/**
* Name of  page
*/
@Column(name = &quot;NAME&quot;, length = 48, nullable = false)
private String name;
/**
* Time stamp data embedded in this entity
*/
@Embedded
private TimeStamp timeStamp = new TimeStamp();
/**
* An example of many to many association
*/
@ManyToMany(cascade = {
CascadeType.PERSIST, CascadeType.MERGE
}, mappedBy = &quot;pages&quot;, targetEntity = org.intelligentsia.utility.jpa.model.Tag.class)
private List&amp;lt;tag&amp;gt; tags = new ArrayList&amp;lt;tag&amp;gt;();
...
}
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;2. Configuration du fichier &quot;my-persistence.xml&quot;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;persistence version=&quot;1.0&quot; xmlns=&quot;http://java.sun.com/xml/ns/persistence&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd&quot;&amp;gt;
&amp;lt;persistence-unit name=&quot;my-model&quot; transaction-type=&quot;RESOURCE_LOCAL&quot;&amp;gt;
&amp;lt;description&amp;gt;
Unite du projet
&amp;lt;/description&amp;gt;
&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Page&amp;lt;/class&amp;gt;
&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Site&amp;lt;/class&amp;gt;
&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Tag&amp;lt;/class&amp;gt;
&amp;lt;exclude-unlisted-classes /&amp;gt;
&amp;lt;/persistence-unit&amp;gt;
&amp;lt;/persistence&amp;gt;
&lt;/pre&gt;
&lt;h3&gt;3. Configuration Spring &lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La localisation du fichier de propriétées&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:jee=&quot;http://www.springframework.org/schema/jee&quot; xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot; xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd&quot;&amp;gt;
// Here we specify where to find our property file
&amp;lt;context:property-placeholder location=&quot;classpath:META-INF/model.properties&quot; /&amp;gt;
&amp;lt;context:annotation-config /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Instanciation des objets du package &quot;org.intelligentsia.utility.jpa&quot;  (et ses sous-package)&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;	// Where are your service and your class model ?
&amp;lt;context:component-scan base-package=&quot;org.intelligentsia.utility.jpa&quot; /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Déclaration de l'entity manager...&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;bean class=&quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor&quot; /&amp;gt;
&amp;lt;bean class=&quot;org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor&quot; /&amp;gt;
&amp;lt;!-- ENTITY MANAGER --&amp;gt;
&amp;lt;bean id=&quot;modelEntityManagerFactory&quot; class=&quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&quot;&amp;gt;
&amp;lt;property name=&quot;persistenceUnitName&quot; value=&quot;my-model&quot; /&amp;gt;
&amp;lt;property name=&quot;persistenceXmlLocation&quot; value=&quot;classpath:META-INF/my-persistence.xml&quot; /&amp;gt;
&amp;lt;property name=&quot;dataSource&quot; ref=&quot;model-dataSource&quot; /&amp;gt;
&amp;lt;property name=&quot;jpaVendorAdapter&quot;&amp;gt;
&amp;lt;bean class=&quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&quot;&amp;gt;
&amp;lt;property name=&quot;databasePlatform&quot; value=&quot;${model.hibernate.dialect}&quot; /&amp;gt;
&amp;lt;property name=&quot;showSql&quot; value=&quot;${model.hibernate.showsql}&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;property name=&quot;jpaPropertyMap&quot;&amp;gt;
&amp;lt;map&amp;gt;
&amp;lt;entry key=&quot;hibernate.dialect&quot; value=&quot;${model.hibernate.dialect}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;${model.hibernate.hbm2ddl.auto}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.format_sql&quot; value=&quot;${model.hibernate.format_sql}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.cache.use_second_level_cache&quot; value=&quot;${model.hibernate.cache.use_second_level_cache}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.cache.provider_class&quot; value=&quot;${model.hibernate.cache.provider_class}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.cache.use_query_cache&quot; value=&quot;${model.hibernate.cache.use_query_cache}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.cache.use_second_level_cache&quot; value=&quot;${model.hibernate.cache.use_second_level_cache}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.cache.use_structured_cache&quot; value=&quot;${model.hibernate.cache.use_structured_cache}&quot; /&amp;gt;
&amp;lt;entry key=&quot;hibernate.ejb.naming_strategy&quot; value=&quot;${model.hibernate.namingStrategy}&quot; /&amp;gt;
&amp;lt;/map&amp;gt;
&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;!--  TRANSACTION MANAGEMENT  --&amp;gt;
&amp;lt;bean id=&quot;modelTransactionManager&quot; class=&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;&amp;gt;
&amp;lt;property name=&quot;entityManagerFactory&quot; ref=&quot;modelEntityManagerFactory&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;tx:annotation-driven transaction-manager=&quot;modelTransactionManager&quot; /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Instanciation de nos Dao, et definission de la connection à la base de données.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;!-- DAO DECLARATION --&amp;gt;
&amp;lt;bean id=&quot;pageDao&quot; class=&quot;org.intelligentsia.utility.jpa.GenericJpaDao&quot;&amp;gt;
&amp;lt;constructor-arg value=&quot;org.intelligentsia.utility.jpa.model.Page&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;tagDao&quot; class=&quot;org.intelligentsia.utility.jpa.GenericJpaDao&quot;&amp;gt;
&amp;lt;constructor-arg value=&quot;org.intelligentsia.utility.jpa.model.Tag&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;model-dataSource&quot; class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&amp;gt;
&amp;lt;property name=&quot;driverClassName&quot; value=&quot;org.h2.Driver&quot; /&amp;gt;
&amp;lt;property name=&quot;url&quot; value=&quot;jdbc:h2:~/test&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;4. Le fichier de propriétés&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;model.hibernate.dialect=org.hibernate.dialect.H2Dialect
model.hibernate.showsql=true
# validate | update | create | create-drop
model.hibernate.hbm2ddl.auto=update
model.hibernate.format_sql=true
model.hibernate.cache.use_second_level_cache=true
model.hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
model.hibernate.cache.use_query_cache=true
model.hibernate.cache.use_second_level_cache=true
model.hibernate.cache.use_structured_cache=true
#org.hibernate.cfg.DefaultNamingStrategy| org.intelligentsia.utility.jpa.DevTableNamingStrategy
model.hibernate.namingStrategy=org.intelligentsia.utility.jpa.DevTableNamingStrategy
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Gestion des transactions&lt;/h2&gt;
&lt;h3&gt;Transaction Manager&lt;/h3&gt;
&lt;p&gt;
Apres avoir déclarée notre &quot;entity manager factory&quot;, nous avons besoin d'un gestionnaire de transaction. Cela ce déclare comme suit :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;!--  TRANSACTION MANAGEMENT  --&amp;gt;
&amp;lt;bean id=&quot;modelTransactionManager&quot; class=&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;&amp;gt;
&amp;lt;property name=&quot;entityManagerFactory&quot; ref=&quot;modelEntityManagerFactory&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;tx:annotation-driven transaction-manager=&quot;modelTransactionManager&quot; /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Nous spécifions à Spring que nous allons configurer les transaction via des annotations.&lt;/p&gt;
&lt;h3&gt;Déclaration des services transactionels&lt;/h3&gt;
&lt;p&gt;La classe &quot;GenericJpaDao&quot; mère de nos autres DAO, ne déclare pas d'attribut de transaction. Ceci vous oblige à spécifier où et comment une transactions doit commencer.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ma méthode est la suivante&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajout du support des transactions (en lecture seulement) au service&lt;/li&gt;
&lt;li&gt;Ajout du support des transactions en écriture pour les méthodes qui en ont besoin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Concrétement pour impleménter le service :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;public interface BlogService {
public void createBlog(final String name);
public Iterable&amp;lt;Site&amp;gt; findAllSite();
}
&lt;/pre&gt;
&lt;p&gt;Cela donne :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;@Service(&quot;blogService&quot;)
@Scope(BeanDefinition.SCOPE_SINGLETON)
@Transactional(readOnly = true, propagation = Propagation.REQUIRED)
public class BlogServiceImpl implements BlogService {
@Autowired
private SiteDao siteDao;
@Autowired
private GenericJpaDao&amp;lt;Page, Long&amp;gt; pageDao;
@Autowired
private GenericJpaDao&amp;lt;Tag, Long&amp;gt; tagDao;
@Override
@Transactional(readOnly = false)
public void createBlog(final String name) {
/**
* Create a new site
*/
Site site = new Site();
site.setName(name);
siteDao.persist(site);
/**
* Add a default page
*/
Page page = new Page();
page.setName(&quot;home page&quot;);
pageDao.persist(page);
// associate
site.getPages().add(page);
siteDao.persist(site);
}
@Override
public Iterable&amp;lt;Site&amp;gt; findAllSite() {
return siteDao.findAll();
}
}
&lt;/pre&gt;
&lt;p&gt;La méthode &quot;findAllSite&quot; est bien en lecture seule, alors que &quot;createBlog&quot; doit pouvoir supporter l'écriture&lt;/p&gt;
&lt;p&gt;Et c'est tout!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bien évidement, pour aller un peu plus loin dans la configuration et la gestion des transactions au sein de Spring, je vous invite à consulter la documentation à ce sujet.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/05/27/gestion-des-transaction-Spring-JPA#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/05/27/gestion-des-transaction-Spring-JPA#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/36</wfw:commentRss>
      </item>
    
  <item>
    <title>Configuration de Maven</title>
    <link>http://intelligents-ia.com/index.php/post/2011/05/24/Configuration-de-Maven</link>
    <guid isPermaLink="false">urn:md5:8d516539f0c00f6e4e515434a181d68c</guid>
    <pubDate>Tue, 24 May 2011 11:49:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Java</category><category>maven</category><category>Méthodologie</category>    
    <description>&lt;p&gt;Récemment, j'ai du ré-installer plusieurs environnement de développement, et je voulais partager avec vous ce petit guide de configuration de maven. &lt;br /&gt;
Car si l'installation est des plus simple, la configuration l'est beaucoup moins.&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/apache-maven-project-2.png&quot; title=&quot;apache-maven-project-2.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/apache-maven-project-2.png&quot; alt=&quot;apache-maven-project-2.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;Récemment, j'ai du ré-installer plusieurs environnement de développement, et je voulais partager avec vous ce petit guide de configuration de maven. &lt;br /&gt;
Car si l'installation est des plus simple, la configuration l'est beaucoup moins.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp&lt;/p&gt;
&lt;p&gt;Sous ubuntu, l'installation se résume à :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
sudo apt-get install maven2
&lt;/pre&gt;
&lt;p&gt;Les fichiers sont installés dans le dossier /usr/share/maven2 et la configuration dans /etc/maven2.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Création du repository local&lt;/h2&gt;
&lt;p&gt;Création du dossier dans /usr/local/m2-repository/ et on positionne les droits d'écriture pour tous le monde.&lt;/p&gt;
&lt;p&gt;C'est dans ce dossier que l'ensemble des libraries vont être copiée, selon les besoins de vos projets.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
cd /usr/local
sudo mkdir m2-repository
sudo chmod a+w  m2-repository/
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Configuration minimal&lt;/h2&gt;
&lt;p&gt;Edition du fichier de configuraton &quot;settings.xml&quot;, pour indiquer où se trouve le repository local et quel miroir utiliser.&lt;/p&gt;
&lt;p&gt;(Le repository officiel de maven est &quot;http://repo1.maven.org/&quot;, afin d'avoir des temps de réponse raisonnable nous utilisons un miroir)&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;localRepository&amp;gt;/usr/local/m2-repository&amp;lt;/localRepository&amp;gt;
 &amp;lt;mirrors&amp;gt;
    &amp;lt;mirror&amp;gt;
      &amp;lt;id&amp;gt;UK&amp;lt;/id&amp;gt;
      &amp;lt;name&amp;gt;UK Central&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;http://uk.maven.org/maven2&amp;lt;/url&amp;gt;
      &amp;lt;mirrorOf&amp;gt;central, maven-central-repository&amp;lt;/mirrorOf&amp;gt;
    &amp;lt;/mirror&amp;gt;
  &amp;lt;/mirrors&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Vérification de l'installation&lt;/h2&gt;
&lt;p&gt;On saisie: &lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
mvn -version
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Et cela devrait vous donner quelque chose comme cela:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
Apache Maven 2.2.1 (r801777; 2009-08-06 21:16:01+0200)
Java version: 1.6.0_17
Java home: /usr/local/jdk1.6.0_17/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: &quot;linux&quot; version: &quot;2.6.32-24-generic-pae&quot; arch: &quot;i386&quot; Family: &quot;unix&quot;
&lt;/pre&gt;
&lt;p&gt;A partir de ce moment, vous avez un système maven opérationnel.&lt;/p&gt;
&lt;p&gt;Je vous propose d'aller un tout petit peu plus loin avec les repository de façon à vous faire gagner beaucoup de temps.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Les Repository à connaître&lt;/h2&gt;
&lt;p&gt;L'idéal avec maven et d'utiliser un repository local type nexus/archiva qui va tenir lieu de miroir à tous les repository maven disséminés sur Internet. &lt;br /&gt;
Dans votre fichier settings.xml, vous aurez une configuration qui ressemble à cela :&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
 &amp;lt;mirrors&amp;gt;
    &amp;lt;mirror&amp;gt;
      &amp;lt;id&amp;gt;internal-repository&amp;lt;/id&amp;gt;
      &amp;lt;name&amp;gt;Maven Repository Manager running on repo.mycompany.com&amp;lt;/name&amp;gt;
      &amp;lt;url&amp;gt;http://repo.mycompany.com/proxy&amp;lt;/url&amp;gt;
      &amp;lt;mirrorOf&amp;gt;*&amp;lt;/mirrorOf&amp;gt;
    &amp;lt;/mirror&amp;gt;
  &amp;lt;/mirrors&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Ici, l'url &quot;repo.mycompany.com&quot; est l'url du repository de votre compagnie.&lt;/p&gt;&lt;p&gt;
&lt;p&gt;Comme l'installation d'un mirroir n'est pas toujours possible, ni même souhaité, voici un autre moyen de rajouter artificiellement une liste de repository à vos projets.&lt;/p&gt;
&lt;p&gt;L'idée est de créér un profile dans le fichier settings qui va lister l'ensemble des repository que vous souhaiter avoir par défaut dans vos projets. Ennsuite vous aurez le choix de l'activer par défaut ou à la demande.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
      &amp;lt;profiles&amp;gt;
                &amp;lt;profile&amp;gt;
                        &amp;lt;id&amp;gt;my-repository&amp;lt;/id&amp;gt;
                        &amp;lt;activation&amp;gt;
				&amp;lt;!-- here we did not activate this profile by default --&amp;gt;
                                &amp;lt;activeByDefault&amp;gt;false&amp;lt;/activeByDefault&amp;gt;
                        &amp;lt;/activation&amp;gt;
                        &amp;lt;repositories&amp;gt;
				&amp;lt;!-- list of standard repository --&amp;gt;
			   ...
                        &amp;lt;/repositories&amp;gt;
                &amp;lt;/profile&amp;gt;
        &amp;lt;/profiles&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pour lancer un commande maven utilisant cette liste de repository, vous devrez rajouter &quot;-Pmy-repository&quot; comme parametre (car le profil n'est pas activé par défaut):&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
mvn -Pmy-repository clean install
&lt;/pre&gt;
&lt;p&gt;Maintenant, voici une petite liste de repository bien utile:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;javanet&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;Repository for Maven2&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://download.java.net/maven/2&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;google&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;Google repository for Maven2&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;https://oss.sonatype.org/content/repositories/google-releases/&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;jboss&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;JBoss repository for Maven2&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://repository.jboss.org/maven2/&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;com.springsource.repository.bundles.release&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;SpringSource Enterprise Bundle Repository - SpringSource Bundle Releases&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://repository.springsource.com/maven/bundles/release&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;com.springsource.repository.bundles.external&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;SpringSource Enterprise Bundle Repository - External Bundle Releases&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://repository.springsource.com/maven/bundles/external&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;com.springsource.repository.libraries.release&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;SpringSource Enterprise Bundle Repository - SpringSource Library Releases&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://repository.springsource.com/maven/libraries/release&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
&amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;com.springsource.repository.libraries.external&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;SpringSource Enterprise Bundle Repository - External Library Releases&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://repository.springsource.com/maven/libraries/external&amp;lt;/url&amp;gt;
&amp;lt;/repository&amp;gt;
 &amp;lt;repository&amp;gt;
    &amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
    &amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
    &amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
 &amp;lt;/repository&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous pourrez trouver en pièce jointe à ce billet, le fichier &lt;a href=&quot;http://intelligents-ia.com/public/java/settings.xml&quot; &gt;settings.xml&lt;/a&gt; déjà configuré&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Si vous connaissez d'autre repository qu'il serait intéressant de rajouter, n'hésitez pas à me contacter :-)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
          <enclosure url="http://intelligents-ia.com/public/java/settings.xml"
      length="4727" type="application/xml" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/05/24/Configuration-de-Maven#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/05/24/Configuration-de-Maven#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/34</wfw:commentRss>
      </item>
    
  <item>
    <title>Partage et gestion de fichiers en ligne</title>
    <link>http://intelligents-ia.com/index.php/post/2011/05/19/Partage-et-gestion-de-fichiers-en-ligne</link>
    <guid isPermaLink="false">urn:md5:213d323b3c3420f1298311f23a711e6c</guid>
    <pubDate>Thu, 19 May 2011 12:48:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>partage</category>    
    <description>&lt;p&gt;&lt;strong&gt;Partagez-vous des documents en ligne ?&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;
Vous connaissez surement &quot;DropBox&quot; et &quot;Google Document&quot;. Cependant, mettre des données confidentielles, voir très confidentielles sur ce type de structure est de mon point de vue pas recommandé. &lt;br /&gt;
Le projet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/05/19/2011/05/19/Partage-et-gestion-de-fichiers-en-ligne&quot;&gt;Mollify&lt;/a&gt; est peut être fait pour vous...&lt;br /&gt;&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/mollify.jpg&quot; alt=&quot;mollify.jpg&quot; style=&quot;float:left; margin: 0 1em 1em 0;&quot; /&gt;&lt;strong&gt;Partagez-vous des documents en ligne ?&lt;/strong&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Vous connaissez surement &lt;a href=&quot;http://intelligents-ia.com/public/mollify/dropbox.png&quot; title=&quot;DropBox&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/dropbox-small.png&quot; alt=&quot;dropbox&quot; /&gt;&lt;/a&gt; et &lt;a href=&quot;http://intelligents-ia.com/public/mollify/google-docs.png&quot; title=&quot;Google Document&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/google-docs-small.png&quot; alt=&quot;google-docs.png&quot; /&gt;&lt;/a&gt;. Cependant, mettre des données confidentielles, voir très confidentielles sur ce type de structure est de mon point de vue pas recommandé. De plus si la confidentialité est essentiel pour vous, l'usage d'une solution Internet est-elle vraiment nécessaire&amp;nbsp;?
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Je cherchais une solution qui me permette le partage et la gestion de fichier en ligne, mais surtout installable sur un serveur dans lequel je peux suffisamment avoir confiance par rapport a mon degrés de confidentialité.&lt;br /&gt;&lt;br /&gt;
Au niveau partage et gestion de fichier en ligne, j'attends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une gestion simple des comptes utilisateurs, des dossiers, des fichiers&lt;/li&gt;
&lt;li&gt;un intégration simple avec différents type de client (Mac, Windows, iPhone, Android),&lt;/li&gt;
&lt;li&gt;un mécanisme de prévisualisation,&lt;/li&gt;
&lt;li&gt;une solution simple, ne nécessitant pas de connaissances techniques particulières (pas de client FTP/SFTP sinon j'aurais installé un serveur ftp/ssh... ),&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;
Au niveau qualité de la solution:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;installable sur un serveur dédié,&lt;/li&gt;
&lt;li&gt;une technologie orienté open source,&lt;/li&gt;
&lt;li&gt;une solution php ou java (dépendant de ma contrainte serveur, celle-ci sera basé sur php)&lt;/li&gt;
&lt;li&gt;un projet bien documenté avec une petite communauté active,&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2&gt;Comment ça, je cherche le mouton à cinq pattes&amp;nbsp;?&lt;/h2&gt;

&lt;pre&gt;&lt;/pre&gt;

&lt;p&gt;Au fil de mes errances j'ai trouvé ce projet open source&amp;nbsp;: &lt;a href=&quot;http://www.mollify.org&quot;&gt;mollify&lt;/a&gt;, dont voici quelques vue écran dans le style Mac.
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/login.png&quot; title=&quot;login.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.login_s.jpg&quot; alt=&quot;login&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/path_bar.png&quot; title=&quot;path_bar.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.path_bar_s.jpg&quot; alt=&quot;path&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/file_details.png&quot; title=&quot;file_details.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.file_details_s.jpg&quot; alt=&quot;fdetails&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/select.png&quot; title=&quot;select.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.select_s.jpg&quot; alt=&quot;selection&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/dropbox.png&quot; title=&quot;dropbox.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.dropbox_s.jpg&quot; alt=&quot;dropbox&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/preview.png&quot; title=&quot;preview.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.preview_s.jpg&quot; alt=&quot;preview&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/view.png&quot; title=&quot;view.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.view_s.jpg&quot; alt=&quot;view&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/google.png&quot; title=&quot;google.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.google_s.jpg&quot; alt=&quot;google&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/flowplayer.png&quot; title=&quot;flowplayer.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.flowplayer_s.jpg&quot; alt=&quot;player&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/permission_editor.png&quot; title=&quot;permission_editor.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/.permission_editor_s.jpg&quot; alt=&quot;editeur de permissions&quot; /&gt;&lt;/a&gt;
&lt;a href=&quot;http://intelligents-ia.com/public/mollify/shoot/administration.png&quot; title=&quot;administration.png&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/mollify/shoot/administration_s.png&quot; alt=&quot;administration&quot; /&gt;&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;&lt;br /&gt;
J'ai trouvé cela jolie et efficace rien qu'en visualisant les images, et vous&amp;nbsp;?
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;h2&gt;Installation et configuration&lt;/h2&gt;


&lt;p&gt;L'installation est simple un zip a &lt;a href=&quot;http://www.mollify.org/download.php&quot;&gt;télécharger&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;Pour que cela fonctionne bien, idéalement il vous faut une version php &amp;gt;= 5.2.&lt;br /&gt;
Pour la configuration du système je vous conseil d'utiliser le choix &quot;base de donnée&quot;, car la configuration via le système de fichier (étant très contraignante) va disparaître dans les prochaine version.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;J'ai d'abord installer la chose sous Windows Seven 64 avec le projet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/05/19/UwAmp&quot;&gt;http://www.uwamp.com/&lt;/a&gt; (suite a la lecture de notre ami &lt;a href=&quot;http://www.korben.info/uwamp-le-nouveau-apache-mysql-php-pour-windows.html&quot;&gt;Korben&lt;/a&gt;).&lt;br /&gt;
Uwamp est excellent! Il s'installe sans aucun soucis. Je le recommande vivement en tant que remplaçant d'EasyPhp, Wamp &amp;amp; Co.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Après l'avoir vu fonctionné, suivi le processus graphique d'installation qui est vraiment confortable, je l'ai vite déployé sur mon petit serveur sous linux (Cela fonctionne très bien aussi sous linux du moment que vous installer apache et ses modules php, avec un mysql). &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;Pour ce qui est de la communauté, je peux vous dire qu'elle est très réactive! J'ai pu corriger un (tout petit) petit bug sur la configuration par système de fichier et dès le lendemain, cela a été pris en compte. Si vous voulez constater par vous même,
je vous invite a aller voir le suivi d'activité de ce projet sur &lt;a href=&quot;http://code.google.com/p/mollify/&quot;&gt;google code&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;


&lt;p&gt;&lt;br /&gt;
En ce moment mollify est en version 1.8, vous pouvez le &lt;a href=&quot;http://code.google.com/p/mollify/downloads/detail?name=mollify_1.8.0.1.zip&quot;&gt;télécharger ici&lt;/a&gt;.
&lt;br /&gt;
Si vous jouez avec, venez me faire un petit retour, ça serait très sympa.
&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/05/19/Partage-et-gestion-de-fichiers-en-ligne#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/05/19/Partage-et-gestion-de-fichiers-en-ligne#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/30</wfw:commentRss>
      </item>
    
  <item>
    <title>Keystone 1.1 est sortie !</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/29/Keystone-1.1-est-sortie-%21</link>
    <guid isPermaLink="false">urn:md5:b1f756a577647aa385ef7c1c393eaf89</guid>
    <pubDate>Fri, 29 Apr 2011 13:06:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>keystone</category>
        <category>Java</category><category>keystone</category><category>maven</category>    
    <description>&lt;p&gt;Bonjour,&lt;/p&gt;
&lt;p&gt;cette nouvelle version inclus&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;évolution du plugin maven&amp;nbsp;: Le plugin ajoute un nouvel artifact au projet. Son Identifiant devient celui de votre projet suffixé par &quot;-boot&quot;,&lt;/li&gt;
&lt;li&gt;ajout du packaging des sources au projet &quot;org.intelligentsia.keystone:boot&quot; de façon à faciliter son utilisation avancée&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/keystone/.phal_baldans_kaleidoscope_s.jpg&quot; alt=&quot;phal_baldans_kaleidoscope.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 2em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/p&gt;
&lt;p&gt;Bonjour,&lt;/p&gt;
&lt;p&gt;cette nouvelle version inclus&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;évolution du plugin maven&amp;nbsp;: Le plugin ajoute un nouvel artifact au projet. Son Identifiant devient celui de votre projet suffixé par &quot;-boot&quot;,&lt;/li&gt;
&lt;li&gt;ajout du packaging des sources au projet &quot;org.intelligentsia.keystone:boot&quot; de façon à faciliter son utilisation avancée&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Intégration du plugin à votre POM&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter le repository du plugins&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;pluginRepositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepository&amp;gt;
&amp;lt;/pluginRepositories&amp;gt;
&amp;lt;repositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Et configurer le build de votre projet avec le plugin &quot;keystone-plugin&quot; (indiquer votre classe de démarrage) :&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.intelligentsia.keystone&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;votre.class.Main&amp;lt;/mainClass&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;custom&amp;lt;/goal&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/29/Keystone-1.1-est-sortie-%21#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/29/Keystone-1.1-est-sortie-%21#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/31</wfw:commentRss>
      </item>
    
  <item>
    <title>How to : JPA, Hibernate &amp; Co</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/28/How-to-%3A-JPA%2C-Hibernate-Co</link>
    <guid isPermaLink="false">urn:md5:76eba73c79024da37040dd0d89423978</guid>
    <pubDate>Thu, 28 Apr 2011 16:51:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Hibernate</category><category>Java</category><category>JPA</category><category>Méthodologie</category><category>Spring</category>    
    <description>&lt;p&gt;Pour être directement opérationnel avec les systèmes de persistance, créer sa couche de donnée et d'accès en suivant les bonnes pratiques du moment, je vous propose&amp;nbsp;dans un seul jar : une DAO&amp;nbsp;générique, une gestion automatique des données temporelle, et une instanciation de JPA/Hibernate/Springframework avec gestion des transactions, le tout en se basant le plus possible sur les annotations. &lt;br /&gt;
Ce Billet fait suite à &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2009/02/13/Contribution-Comment-manipuler-large-recordset&quot;&gt;'parcourir de gros volume de donnée en deux lignes de code&lt;/a&gt;'.&amp;nbsp;:) &lt;/p&gt;    &lt;h2&gt;&lt;img src=&quot;http://intelligents-ia.com/public/logo/dao-small.png&quot; alt=&quot;dao-small.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Pour être directement opérationnel avec les systèmes de persistance, créer sa couche de données et d'accès en suivant les bonnes pratiques du moment, je vous propose&amp;nbsp;dans un seul jar :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;une DAO&amp;nbsp;générique,&lt;/li&gt;
&lt;li&gt;une gestion automatique des données temporelle,&lt;/li&gt;
&lt;li&gt;une instanciation de JPA/Hibernate/Springframework avec gestion des transactions,&lt;/li&gt;
&lt;li&gt;un configuration du model basé sur les annotations&lt;/li&gt;
&lt;li&gt;un exemple complet d'utilisation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce Billet fait suite à &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2009/02/13/Contribution-Comment-manipuler-large-recordset&quot;&gt;'parcourir de gros volume de donnée en deux lignes de code&lt;/a&gt;'.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;JPA-Utility, what else ?&lt;/h2&gt;
&lt;p&gt;Dans cette librairie, vous pourrez trouver des utilitaires destinés à nous simplifier l'usage du trio JPA/Hibernate/Spring,  comme une DAO générique, des méthodes de parcours de gros volume de données efficace (le système de pagination est intégré), une base pour personnaliser les noms de vos tables en base de données,
un mécanisme de datation (pas au carbone 14...) de vos entités, mais surtout un exemple complet et fonctionnel d'une couche de persistence à repomper litérallement pour que vous soyez opérationnel très rapidement.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Une DAO suffit, ... pour commencer&lt;/h3&gt;
&lt;p&gt;Vous pourrez trouver la classe &quot;org.intelligentsia.utility.jpa.GenericJpaDao&quot;&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/jpa-utility/generic-jpa-dao.jpg&quot; title=&quot;generic-jpa-dao.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/jpa-utility/.generic-jpa-dao_m.jpg&quot; alt=&quot;generic-jpa-dao.jpg&quot; style=&quot;float: left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;C'est une classe paramétrée par le type d'entité gérée 'T' et le type de la clé primaire utilisée 'ID'. Avec ce paramètrage, elle expose&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;les méthodes classique :  'persist', 'delete' &lt;/li&gt;
&lt;li&gt;une méthode de sélection par clé primaire 'findById'.&lt;/li&gt;
&lt;li&gt;un ensemble de méthode 'findByNamedQuery' qui execute une requête, paramétrée ou non, avec un mécanisme de pagination (ou sans) qui vous permet de parcourir de gros volume de donnée avec une boucle 'for' (voir le billet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2009/02/13/Contribution-Comment-manipuler-large-recordset&quot;&gt;Parcourir de gros volume de données en 2 lignes de code&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;p&gt;Un petit exemple d'utilisation classique&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
...
@Autowired
private GenericJpaDao&amp;lt;page, Long&amp;gt; pageDao;
...
// create a new page
Page page = new Page();
page.setName(&quot;home page&quot;);
pageDao.persist(page);
...
&lt;/pre&gt;
&lt;p&gt;Le parcours d'une collection se résumant à&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
@Repository(&quot;siteDao&quot;)
@Scope(BeanDefinition.SCOPE_SINGLETON)
@Transactional(propagation=Propagation.SUPPORTS)
public class SiteDao extends GenericJpaDao&amp;lt;site, Long&amp;gt; {
	public SiteDao() {
		super();
	}
	@Transactional(readOnly = true)
	public Iterable&amp;lt;site&amp;gt; findAll() {
		return findByNamedQuery(&quot;selectAllSite&quot;, 10);
	}
}
...
	// For all site
	for (Site site : siteDao.findAllSite()) {
		// do something
	}
...
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Lorsque que vous commencer votre projet, je vous invite à ne pas créer de classe spécifique pour chaque entité et de vous forcer à utiliser une instanciation via Spring.&lt;br /&gt;Vous pourrez par la suite, au fur et à mesure des besoins de vos services, rajouter uniquement les requêtes nécessaire sur vos entités.&lt;br /&gt;
A ce moment, vous rajouterez les méthodes ad hoc sur une DAO spécifique.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Easter Eggs, un aperçu&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La librairie inclus aussi deux ou trois petites choses:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/jpa-utility/class-diagram-all.jpg&quot; title=&quot;generic-jpa-dao.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/jpa-utility/class-diagram-all-m.jpg&quot; alt=&quot;class-diagram-all-m&quot; style=&quot;float: left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p &gt;&amp;nbsp;&lt;/p&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;h3&gt;Entity Stamped&lt;/h3&gt;
&lt;p&gt;Tout d'abord l'interface &quot;TimeStamped&quot; et son compagnon le bean &quot;TimeStamp&quot;  vont vous permettre de gérer sur vos entités les champs classiques &quot;timestamp&quot;, &quot;creationDate&quot; et &quot;lastModificationDate&quot; de cette manière&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
@Entity
@Table(name = &quot;PAGE&quot;)
public class Page implements  Serializable, TimeStamped{
...
	/**
	* Time stamp data embedded in this entity
	*/
	@Embedded
	private TimeStamp timeStamp =&quot; &quot;&quot;new&quot; TimeStamp();
	@Override
	public TimeStamp getTimeStamp() {
		return timeStamp;
	}
...
&lt;/pre&gt;
&lt;p&gt;Et c'est tout ! La classe GenericJpaDao va gérer le reste pour vous. Pour les curieux, ce mécanisme repose sur la déclaration d'une interface &quot;TimeStamped&quot;, de son bean &quot;TimeStamp&quot; et d'un petit test dans l'implémentation de la méthode &quot;persist&quot; sur &quot;GenericJpaDao&quot;.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
/**
* if an entity implement this interface, their field 'TimeStamp' will be updated by provider.
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jerome Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
public interface TimeStamped {
	public TimeStamp getTimeStamp();
}
/**
* TimeStamp offer an implementation for three common fields: timestamp, creationDate and lastModificationDate.
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jerome Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
public class TimeStamp implements Serializable {
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = &quot;TIMESTAMP&quot;)
	protected Date timestamp;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = &quot;LASTMODIFICATION&quot;)
	protected Date lastModificationDate;
	@Temporal(TemporalType.TIMESTAMP)
	@Column(name = &quot;CREATION&quot;)
	protected Date creationDate;

	public TimeStamp() {
		super();
	}
...
}
//
public class GenericJpaDao&amp;lt;t extends Serializable, ID extends Serializable&amp;gt; {
...
	public T persist(T entity) {
		// here the egg
		if (TimeStamped.class.isAssignableFrom(entity.getClass())) {
			TimeStamp stamp = ((TimeStamped) entity).getTimeStamp();
			Date current = new Date();
			if ((stamp.getCreationDate() == null)) {
				stamp.setCreationDate(current);
			}
			stamp.setLastModificationDate(current);
			stamp.setTimestamp(current);
		}
		entityManager.persist(entity);
		return entity;
	}
...
}
&lt;/pre&gt;
&lt;p&gt;Réalisé à peu de frais, jusqu'à présent ce test n'a pas été remis en cause par ses performances. Si vous voulez rajouter d'autre fonctionnalité de ce type (tracer qui à fait quoi par exemple, ....) je vous invite à étendre la classe GenericJpaDao ou sinon me proposer l'extension (Je serais ravis de l'intégrer au projet).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Le DBA sera (de nouveau) votre meilleur ami (ou presque)&lt;/h3&gt;
&lt;p&gt;Trop longtemps maltraité, souvent relégué en bout de chaîne, ils peuvent aussi vous aider (si si, mais pas tous...).&lt;/p&gt;
&lt;p&gt;Plutôt que faire comme si il n'existait pas, allez le voir en lui disant que&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vous allez créér un nouveau schéma (il sera content de l'apprendre au moins un jour avant la mise en production (vécu...) )&lt;/li&gt;
&lt;li&gt;Que vous pouvez normaliser le nom des tables que vous allez créer (préfixe, suffixe)&lt;/li&gt;
&lt;li&gt;Que vous pouvez nommer les tables 'comme y faut' (voir le &quot;@Table(name = 'PAGE')&quot; en début de chaque déclaration d'entité)
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Et si, en plus vous lui montrer un ébauche du schéma qui sera créer plus tard (en local sur votre machine vous devriez avoir ce qu'il faut) ...&lt;/p&gt;
&lt;p&gt;De cette façon, le jour (qui n'arriveras jamais ...) où vous serez en panne sèche sur une requête, que vos performances en lecture/écriture seront des plus lamentables, vous pourrez lui demander (très humblement) son aide (précieuse) ...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pour fixer-le-prefixe-du-suffixe, voilà un petit exemple&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Créez une classe étendant &quot;CustomTableNamingStrategy&quot; et definissez les prefix/suffix de vos tables.&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
/**
* DevTableNamingStrategy add &quot;TEST_&quot; prefix on all TABLE.
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jérôme Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
public class DevTableNamingStrategy extends CustomTableNamingStrategy {
private static final long serialVersionUID = -2544171811654641826L;
	public DevTableNamingStrategy() {
		super(&quot;TEST_&quot;, null);
	}
}
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Positionnez la valeur de la propriété &quot;model.hibernate.namingStrategy&quot; sur la bonne classe: &quot;model.hibernate.namingStrategy=org.intelligentsia.utility.jpa.DevTableNamingStrategy&quot; (Dans l'example fournit, elle va alimenter le paramètre &quot;hibernate.ejb.naming_strategy&quot;).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Le parcours de gros volume de données&lt;/h3&gt;
&lt;p&gt;Je vous invite à lire le billet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2009/02/13/Contribution-Comment-manipuler-large-recordset&quot;&gt;Parcourir de gros volume de données en 2 lignes de code&lt;/a&gt;.  C'est la raison de l'existence des classes &quot;ValueIterator&quot; et &quot;ValueHandler&quot;.&lt;/p&gt;
&lt;p&gt;L'idée est de rendre transparent la pagination d'une requête retournant un (très) gros volume de données.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Utilisation et Intégration&lt;/h2&gt;
&lt;h3&gt;Configurer votre POM&lt;/h3&gt;
&lt;p&gt;En deux étapes&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter le &quot;repository&quot;&amp;nbsp;:&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;repositories&amp;gt;
	&amp;lt;repository&amp;gt;
		&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
		&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
		&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
	&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Et la dépendance suivante&amp;nbsp;:&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;dependencies&amp;gt;
	&amp;lt;dependency&amp;gt;
		&amp;lt;groupId&amp;gt;org.intelligentsia.utility&amp;lt;/groupId&amp;gt;
		&amp;lt;artifactId&amp;gt;jpa&amp;lt;/artifactId&amp;gt;
		&amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
	&amp;lt;/dependency&amp;gt;
&amp;lt;/dependencies&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Pour les curieux: Récupération du code source projet&lt;/h3&gt;
&lt;p&gt;Cela vous permettra aussi de copier-coller les fichiers ad hoc et de les personnaliser à votre couche de données.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: bash&quot;&gt;
svn checkout https://blog-intelligents-ia.googlecode.com/svn/trunk/jpa-utility jpa-utility --username yoursUserName
mvn clean install
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Le projet et l'exemple type&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/jpa-utility/project-tree.jpg&quot; title=&quot;project-tree.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/jpa-utility/.project-tree_m.jpg&quot; alt=&quot;project-tree.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;p&gt;Vous pourrez voir que le test unitaire embarque un définission &quot;complète&quot; d'une couche d'accès aux données avec un premier service se basant dessus.&lt;/p&gt;
&lt;p&gt;Voici le modèle de données à rendre persistant&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/jpa-utility/sample-model.jpg&quot; title=&quot;sample-model.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/jpa-utility/sample-model.jpg&quot; alt=&quot;sample-model.jpg&quot; style=&quot;margin-top: 0; margin-right: auto; margin-bottom: 0; margin-left: auto; display: block; &quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;1. Créations des entitées et attributs&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Pour l'entité site&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
/**
* Our Site entity.
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jérôme Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
@Entity
@Table(name = &quot;SITE&quot;)
@NamedQueries({
@NamedQuery(name = &quot;selectAllSite&quot;, query = &quot;SELECT s FROM Site s&quot;)
})
public class Site implements Serializable, TimeStamped {
	/**
	* serialVersionUID
	*/
	private static final long serialVersionUID = -1823543375371695270L;
	/**
	* Automatic version number
	*/
	@Version
	protected Long version;
	/**
	* Identity with an automatic sequence
	*/
	@Id
	@GeneratedValue(generator = &quot;SEQ_SITE_ID&quot;)
	@SequenceGenerator(name = &quot;SEQ_SITE_ID&quot;, sequenceName = &quot;SEQ_SITE_ID&quot;)
	@Column(name = &quot;SITE_ID&quot;)
	private Long id;
	/**
	* Name of site with an index
	*/
	@Column(name = &quot;NAME&quot;, length = 48, nullable = true)
	@Index(name = &quot;SITE_NAME_INDEX&quot;, columnNames = {
	&quot;NAME&quot;
	})
	private String name;
	...
	/**
	*  all pages
	*/
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
	@JoinColumn(name = &quot;SITE_ID&quot;)
	private List&amp;lt;page&amp;gt; pages = new ArrayList&amp;lt;page&amp;gt;();
	/**
	* Time stamp data embedded in this entity
	*/
	@Embedded
	private TimeStamp timeStamp = new TimeStamp();
	...
}
&lt;/pre&gt;
&lt;p&gt;Pour l'entité &lt;strong&gt;Page&lt;/strong&gt;&amp;nbsp;:&lt;/p&gt;
&lt;p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
/**
* a page included in our site entity
*
* @author &amp;lt;a href=&quot;mailto:jguibert@intelligents-ia.com&quot;&amp;gt;Jérôme Guibert&amp;lt;/a&amp;gt;
* @version 1.0.0
*/
@Entity
@Table(name = &quot;PAGE&quot;)
public class Page implements  Serializable, TimeStamped{
	private static final long serialVersionUID = -773904423928687747L;
	/**
	* Automatic version number
	*/
	@Version
	protected Long version;
	/**
	* Identity with an automatic sequence
	*/
	@Id
	@GeneratedValue(generator = &quot;SEQ_PAGE_ID&quot;)
	@SequenceGenerator(name = &quot;SEQ_PAGE_ID&quot;, sequenceName = &quot;SEQ_PAGE_ID&quot;)
	@Column(name = &quot;PAGE_ID&quot;)
	private Long id;
	/**
	* Name of  page
	*/
	@Column(name = &quot;NAME&quot;, length = 48, nullable = false)
	private String name;
	/**
	* Time stamp data embedded in this entity
	*/
	@Embedded
	private TimeStamp timeStamp = new TimeStamp();
	/**
	* An example of many to many association
	*/
	@ManyToMany(cascade = {
	CascadeType.PERSIST, CascadeType.MERGE
	}, mappedBy = &quot;pages&quot;, targetEntity = org.intelligentsia.utility.jpa.model.Tag.class)
	private List&amp;lt;tag&amp;gt; tags = new ArrayList&amp;lt;tag&amp;gt;();
	...
}
&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;J'attire votre attention sur la déclaration du liens entre Site et Page en 1-N. Pour un exemple en N-N entre Page et Tag, voici un extrait de la class &quot;Tag&quot;&amp;nbsp;:&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: java&quot;&gt;
...
/**
* a many to many example.
*/
@ManyToMany(targetEntity = org.intelligentsia.utility.jpa.model.Page.class, cascade =&quot; &quot;&quot;{&quot;
CascadeType.PERSIST, CascadeType.MERGE
})
@JoinTable(name = &quot;TAG_PAGE&quot;, joinColumns = @JoinColumn(name = &quot;TAG_ID&quot;), inverseJoinColumns = @JoinColumn(name = &quot;PAGE_ID&quot;))
private List&amp;lt;page&amp;gt; pages = new ArrayList&amp;lt;page&amp;gt;();
...
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;2. Déclaration des entités et le fichier &quot;my-persistence.xml&quot;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;persistence version=&quot;1.0&quot; xmlns=&quot;http://java.sun.com/xml/ns/persistence&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd&quot;&amp;gt;
	&amp;lt;persistence-unit name=&quot;my-model&quot; transaction-type=&quot;RESOURCE_LOCAL&quot;&amp;gt;
		&amp;lt;description&amp;gt;
		Unite du projet
		&amp;lt;/description&amp;gt;
		&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Page&amp;lt;/class&amp;gt;
		&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Site&amp;lt;/class&amp;gt;
		&amp;lt;class&amp;gt;org.intelligentsia.utility.jpa.model.Tag&amp;lt;/class&amp;gt;
		&amp;lt;exclude-unlisted-classes /&amp;gt;
	&amp;lt;/persistence-unit&amp;gt;
&amp;lt;/persistence&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Un peu fastidieux...&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;3. Une pincée de Spring &lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
Première déclaration&amp;nbsp;:La localisation du fichier de propriétées
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:jee=&quot;http://www.springframework.org/schema/jee&quot; xmlns:tx=&quot;http://www.springframework.org/schema/tx&quot; xmlns:context=&quot;http://www.springframework.org/schema/context&quot;
xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd&quot;&amp;gt;
	// Here we specify where to find our property file
	&amp;lt;context:property-placeholder location=&quot;classpath:META-INF/model.properties&quot; /&amp;gt;
	&amp;lt;context:annotation-config /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Ici, nous disons à Spring d'aller voir ce que contient le package &quot;org.intelligentsia.utility.jpa&quot;  (et ses sous-package), et d'instancier tous ce qui bouge...&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
	// Where are your service and your class model ?
	&amp;lt;context:component-scan base-package=&quot;org.intelligentsia.utility.jpa&quot; /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;La partie de plaisir&amp;nbsp;: La déclaration de l'entity manager...&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;bean class=&quot;org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor&quot; /&amp;gt;
&amp;lt;bean class=&quot;org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor&quot; /&amp;gt;
&amp;lt;!-- ENTITY MANAGER --&amp;gt;
&amp;lt;bean id=&quot;modelEntityManagerFactory&quot; class=&quot;org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean&quot;&amp;gt;
	&amp;lt;property name=&quot;persistenceUnitName&quot; value=&quot;my-model&quot; /&amp;gt;
	&amp;lt;property name=&quot;persistenceXmlLocation&quot; value=&quot;classpath:META-INF/my-persistence.xml&quot; /&amp;gt;
	&amp;lt;property name=&quot;dataSource&quot; ref=&quot;model-dataSource&quot; /&amp;gt;
	&amp;lt;property name=&quot;jpaVendorAdapter&quot;&amp;gt;
		&amp;lt;bean class=&quot;org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter&quot;&amp;gt;
		&amp;lt;property name=&quot;databasePlatform&quot; value=&quot;${model.hibernate.dialect}&quot; /&amp;gt;
		&amp;lt;property name=&quot;showSql&quot; value=&quot;${model.hibernate.showsql}&quot; /&amp;gt;
		&amp;lt;/bean&amp;gt;
	&amp;lt;/property&amp;gt;
	&amp;lt;property name=&quot;jpaPropertyMap&quot;&amp;gt;
		&amp;lt;map&amp;gt;
			&amp;lt;entry key=&quot;hibernate.dialect&quot; value=&quot;${model.hibernate.dialect}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.hbm2ddl.auto&quot; value=&quot;${model.hibernate.hbm2ddl.auto}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.format_sql&quot; value=&quot;${model.hibernate.format_sql}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.cache.use_second_level_cache&quot; value=&quot;${model.hibernate.cache.use_second_level_cache}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.cache.provider_class&quot; value=&quot;${model.hibernate.cache.provider_class}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.cache.use_query_cache&quot; value=&quot;${model.hibernate.cache.use_query_cache}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.cache.use_second_level_cache&quot; value=&quot;${model.hibernate.cache.use_second_level_cache}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.cache.use_structured_cache&quot; value=&quot;${model.hibernate.cache.use_structured_cache}&quot; /&amp;gt;
			&amp;lt;entry key=&quot;hibernate.ejb.naming_strategy&quot; value=&quot;${model.hibernate.namingStrategy}&quot; /&amp;gt;
		&amp;lt;/map&amp;gt;
	&amp;lt;/property&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;!--  TRANSACTION MANAGEMENT  --&amp;gt;
&amp;lt;bean id=&quot;modelTransactionManager&quot; class=&quot;org.springframework.orm.jpa.JpaTransactionManager&quot;&amp;gt;
	&amp;lt;property name=&quot;entityManagerFactory&quot; ref=&quot;modelEntityManagerFactory&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;tx:annotation-driven transaction-manager=&quot;modelTransactionManager&quot; /&amp;gt;
&lt;/pre&gt;
&lt;p&gt;Et maintenant, nous pouvons instancier nos Dao, et definir en une ligne la connection à la base de données.&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;!-- DAO DECLARATION --&amp;gt;
&amp;lt;bean id=&quot;pageDao&quot; class=&quot;org.intelligentsia.utility.jpa.GenericJpaDao&quot;&amp;gt;
	&amp;lt;constructor-arg value=&quot;org.intelligentsia.utility.jpa.model.Page&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;tagDao&quot; class=&quot;org.intelligentsia.utility.jpa.GenericJpaDao&quot;&amp;gt;
	&amp;lt;constructor-arg value=&quot;org.intelligentsia.utility.jpa.model.Tag&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;bean id=&quot;model-dataSource&quot; class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&amp;gt;
	&amp;lt;property name=&quot;driverClassName&quot; value=&quot;org.h2.Driver&quot; /&amp;gt;
	&amp;lt;property name=&quot;url&quot; value=&quot;jdbc:h2:~/test&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;
&amp;lt;/beans&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;4. Le fichier de propriétés à personaliser selon vos goûts et couleur &lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
model.hibernate.dialect=org.hibernate.dialect.H2Dialect
model.hibernate.showsql=true
# validate | update | create | create-drop
model.hibernate.hbm2ddl.auto=update
model.hibernate.format_sql=true
model.hibernate.cache.use_second_level_cache=true
model.hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
model.hibernate.cache.use_query_cache=true
model.hibernate.cache.use_second_level_cache=true
model.hibernate.cache.use_structured_cache=true
#org.hibernate.cfg.DefaultNamingStrategy| org.intelligentsia.utility.jpa.DevTableNamingStrategy
model.hibernate.namingStrategy=org.intelligentsia.utility.jpa.DevTableNamingStrategy
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;J'espère que cela pourra vous être util, si vous avez des questions, remarques, surtout n'hésitez pas!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;.</description>
    
          <enclosure url="http://intelligents-ia.com/public/java/jpa-utility/jpa-1.0.jar"
      length="9131" type="application/x-java-archive" />
          <enclosure url="http://intelligents-ia.com/public/java/jpa-utility/jpa-1.0-sources.jar"
      length="6277" type="application/x-java-archive" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/28/How-to-%3A-JPA%2C-Hibernate-Co#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/28/How-to-%3A-JPA%2C-Hibernate-Co#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/20</wfw:commentRss>
      </item>
    
  <item>
    <title>Premier pas avec Clojure</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/21/Premier-pas-avec-Clojure</link>
    <guid isPermaLink="false">urn:md5:ccc524691f249596b373454af363210a</guid>
    <pubDate>Thu, 21 Apr 2011 18:17:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Clojure</category><category>Java</category><category>Lecture</category>    
    <description>&lt;p&gt;Pour ceux et celles qui n'ont pas encore franchi le &lt;strong&gt;pas&lt;/strong&gt;, je vous propose un lien vers une petite présentation du langage &lt;a href=&quot;http://clojure.org/&quot; rel=&quot;external&quot; lang=&quot;en&quot;&gt;Clojure&lt;/a&gt; que je trouve très pédagogique:&lt;a href=&quot;http://www.chicoree.fr/w/Premiers_pas_avec_Clojure&quot; rel=&quot;external&quot; lang=&quot;fr&quot;&gt;Premiers Pas Avec Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bonne lecture&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/logo/clojure.png&quot; alt=&quot;clojure.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Pour ceux et celles qui n'ont pas encore franchi le &lt;strong&gt;pas&lt;/strong&gt;, je vous propose un lien vers une petite présentation du langage &lt;a href=&quot;http://clojure.org/&quot; rel=&quot;external&quot; lang=&quot;en&quot;&gt;Clojure&lt;/a&gt; que je trouve très pédagogique:&lt;a href=&quot;http://www.chicoree.fr/w/Premiers_pas_avec_Clojure&quot; rel=&quot;external&quot; lang=&quot;fr&quot;&gt;Premiers Pas Avec Clojure&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Bonne lecture&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/21/Premier-pas-avec-Clojure#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/21/Premier-pas-avec-Clojure#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/19</wfw:commentRss>
      </item>
    
  <item>
    <title>Winstone 1.0 est sortie !</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/15/Winstone-1.0</link>
    <guid isPermaLink="false">urn:md5:cd3b38df1aa414018317ece51b617021</guid>
    <pubDate>Fri, 15 Apr 2011 12:46:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Java</category><category>keystone</category><category>servlet container</category><category>winstone</category>    
    <description>&lt;p&gt;Aujourd'hui est un grand jour &lt;img src=&quot;/themes/iia/smilies/happy.png&quot; alt=&quot;:p&quot; class=&quot;smiley&quot; /&gt;  !&lt;/p&gt;
&lt;p&gt;Winstone 1.0 est tout juste sortie du four et se dote d'un petit repository maven!!&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/winstone/zhuFull.jpg&quot; alt=&quot;zhuFull.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Aujourd'hui est un grand jour &lt;img src=&quot;/themes/iia/smilies/happy.png&quot; alt=&quot;:p&quot; class=&quot;smiley&quot; /&gt;  !&lt;/p&gt;
&lt;p&gt;Winstone 1.0 est tout juste sortie du four et se dote d'un petit repository maven!!&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&lt;![CDATA[
&lt;repositories&gt;
&lt;repository&gt;
&lt;id&gt;intelligents-ia&lt;/id&gt;
&lt;name&gt;Intelligents-ia Repository&lt;/name&gt;
&lt;url&gt;http://intelligents-ia.com/maven2&lt;/url&gt;
&lt;/repository&gt;
&lt;/repositories&gt;
]]&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous pouvez donc intégrer ce projet avec la dépendance suivante :&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&lt;![CDATA[
&lt;dependencies&gt;
&lt;dependency&gt;
&lt;groupId&gt;net.winstone&lt;/groupId&gt;
&lt;artifactId&gt;winstone-project&lt;/artifactId&gt;
&lt;version&gt;1.0&lt;/version&gt;
&lt;/dependency&gt;
&lt;/dependencies&gt;
]]&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ou l'utiliser directement en ligne de commande après avoir téléchargée l'archive:&lt;/p&gt;
&lt;p&gt;Lancement&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: shell&quot;&gt;&lt;![CDATA[
java -jar winstone-1.0.0.boot.jar --webroot=&lt;location of webroot&gt; (+ other options)
java -jar winstone-1.0.0.boot.jar --warfile=&lt;location of warfile&gt; (+ other options)
java -jar winstone-1.0.0.boot.jar --webappsDir=&lt;location of webapps directory&gt; (+ other options)
java -jar winstone-1.0.0.boot.jar --hostsDir=&lt;location of hosts directory&gt; (+ other options)
]]&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;N'hésitez pas a me donner vos retours sur l'utilisation&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
          <enclosure url="http://intelligents-ia.com/public/winstone/winstone-1.0.0.boot.jar"
      length="767368" type="application/x-java-archive" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/15/Winstone-1.0#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/15/Winstone-1.0#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/29</wfw:commentRss>
      </item>
    
  <item>
    <title>Keystone 1.0 est sortie !</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/15/Keystone-1.0</link>
    <guid isPermaLink="false">urn:md5:ee91051fdbbd451fbf33e1c97c00fa96</guid>
    <pubDate>Fri, 15 Apr 2011 12:13:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>keystone</category>
        <category>Java</category><category>keystone</category><category>maven</category>    
    <description>&lt;p&gt;&lt;br _moz_editor_blogus_node=&quot;TRUE&quot; _moz_dirty=&quot;&quot; /&gt;&lt;/p&gt;    &lt;img src=&quot;http://intelligents-ia.com/public/java/keystone/principal-icone-5100-128.png&quot; alt=&quot;principal-icone-5100-128.png&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Keystone version 1.0 est disponible dans votre bonne vieille librairie !&lt;/p&gt;
&lt;p&gt;Après une courte scèance d'intégration au projet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/03/01/Winstone&quot;&gt;winstone&lt;/a&gt;, et l'ajout d'un paramètre qui-vas-bien au plugin maven keystone, et hop hop hop !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C'est que j'en serais pas peu fier té &lt;img src=&quot;/themes/iia/smilies/happy.png&quot; alt=&quot;:p&quot; class=&quot;smiley&quot; /&gt;  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/15/Keystone-1.0#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/15/Keystone-1.0#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/28</wfw:commentRss>
      </item>
    
  <item>
    <title>Quand je serais grand</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/14/Quand-je-serais-grand</link>
    <guid isPermaLink="false">urn:md5:6717d264ce31aba02a215c6eeb17c426</guid>
    <pubDate>Thu, 14 Apr 2011 15:38:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>plongée</category>    
    <description>&lt;p&gt;Chute libre au fond de l'eau, ça décoiffe&lt;/p&gt;    &lt;object width=&quot;640&quot; height=&quot;390&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/HLN82QXriJI&amp;hl=en_US&amp;feature=player_embedded&amp;version=3&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://www.youtube.com/v/HLN82QXriJI&amp;hl=en_US&amp;feature=player_embedded&amp;version=3&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; width=&quot;640&quot; height=&quot;390&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;p&gt;Comme dis &lt;a href=&quot;http://www.bonnesbulles.com/ca-decoiffe-non/2011/&quot; rel=&quot;external&quot;&gt;frederic&lt;/a&gt;, ça décoiffe!!&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/14/Quand-je-serais-grand#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/14/Quand-je-serais-grand#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/27</wfw:commentRss>
      </item>
    
  <item>
    <title>How to bootstrap with Keystone</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/13/how-to-bootstrap-with-keystone</link>
    <guid isPermaLink="false">urn:md5:286bec804c6be71a374e5689d39ac7fa</guid>
    <pubDate>Wed, 13 Apr 2011 17:03:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>keystone</category>
        <category>bootstrap</category><category>Java</category><category>keystone</category><category>maven</category>    
    <description>&lt;p&gt;&lt;br _moz_editor_blogus_node=&quot;TRUE&quot; _moz_dirty=&quot;&quot; /&gt;&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/keystone/.phal_baldans_kaleidoscope_s.jpg&quot; alt=&quot;phal_baldans_kaleidoscope.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Embarquer votre applicatif avec ses dépendances dans un seul jar, la déployer, préparer le classpath, s'occuper des options de démarrages, et vous permettre d'automatiser vos mises à jour: Voilà ce que vous propose le projet &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/04/06/keystone&quot;&gt;keystone&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;En bref, il va vous simplifier les démarrages ...&lt;br /&gt;
Il manquait juste un &quot;petit&quot; plugin maven de manière à le rendre utilisable par tous et quelques lignes, c'est chose faites !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Configurer votre POM&lt;/h2&gt;
&lt;p&gt;En deux étapes&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter le repository du plugins&lt;br /&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&lt;![CDATA[
&lt;repositories&gt;
&lt;repository&gt;
&lt;id&gt;intelligents-ia&lt;/id&gt;
&lt;name&gt;Intelligents-ia Repository&lt;/name&gt;
&lt;url&gt;http://intelligents-ia.com/maven2&lt;/url&gt;
&lt;/repository&gt;
&lt;/repositories&gt;
]]&gt;&lt;/script&gt;
&lt;/li&gt;
&lt;li&gt;Et configurer le build de votre projet avec le plugin &quot;keystone-plugin&quot; (indiquer votre classe de démarrage) :&lt;br /&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&lt;![CDATA[
&lt;build&gt;
&lt;plugins&gt;
&lt;plugin&gt;
&lt;groupId&gt;org.intelligentsia.keystone&lt;/groupId&gt;
&lt;artifactId&gt;plugin&lt;/artifactId&gt;
&lt;version&gt;1.0&lt;/version&gt;
&lt;executions&gt;
&lt;execution&gt;
&lt;id&gt;make-assembly&lt;/id&gt;
&lt;phase&gt;package&lt;/phase&gt;
&lt;configuration&gt;
&lt;mainClass&gt;votre.class.Main&lt;/mainClass&gt;
&lt;/configuration&gt;
&lt;goals&gt;
&lt;goal&gt;custom&lt;/goal&gt;
&lt;/goals&gt;
&lt;/execution&gt;
&lt;/executions&gt;
&lt;/plugin&gt;
&lt;/plugins&gt;
&lt;/build&gt;
]]&gt;&lt;/script&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
Si votre projet construit une archive &quot;example.jar&quot;, le plugin va créer une autre archive &quot;example.boot.jar&quot; (Celle-ci contiendra les dépendances &quot;runtime&quot; et &quot;compile&quot; de votre projet maven). &lt;br /&gt;
La ligne de commande nécessaire pour lancer votre application sera :&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: shell&quot;&gt;&lt;![CDATA[
java -jar example.boot.jar
]]&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Options du plugin&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Nom&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;mainClass&lt;/td&gt;&lt;td&gt;java main class&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;haltOnError&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), si vrai le système s'arrête à la première erreur, sinon il continue comme il peut (utile lors de mise à jour &quot;tendue&quot;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;explode&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), si vrai, l'archive va être extraite dans le répertoire de démarrage (les répertoires &quot;lib&quot;, &quot;tools&quot;, et &quot;plugins&quot; vont être alimenté avec les ressources de l'archive de départ)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;cleanUpTools&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), si vrai le répertoire 'tools' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;cleanUpLib&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), si vrai le répertoire 'lib' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;cleanUpPlugins&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), si vrai le répertoire 'plugins' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;verbose&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), active le mode de log 'verbose'&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;info&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), active le mode de log 'info'&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;logFile&lt;/td&gt;&lt;td&gt;fichier de log du bootstrap (par défaut : aucun)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;includeJavaHomeLib&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), inclus le répertoire de librairies du jdk dans le classpath &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;includeSystemClassLoader&amp;nbsp;&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), inclus le classloader système dans le classpath &lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;includePlugins&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), inclus le répertoire des plugins dans le classpath&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;replaceProjectArtifact&lt;/td&gt;&lt;td&gt;true|false (par défaut : false), remplace (ou pas) l'archive principal de votre projet par celle &quot;bootable&quot;. Si vous la remplacer et que vous avez des projets qui dépendent de cette archive, ceux-ci ne verront pas votre archive projet mais celle bootable, et donc n'auront pas accès à votre code.&lt;br /&gt; (vécu avec le projet winstone au niveau des test unitaire du serveur qui utilisent les classes internes de celui-ci)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;N'hésitez pas à me contacter et me donner vos retours sur son usage (bon ou mauvais &lt;img src=&quot;/themes/iia/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;   )&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/13/how-to-bootstrap-with-keystone#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/13/how-to-bootstrap-with-keystone#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/26</wfw:commentRss>
      </item>
    
  <item>
    <title>Keystone : Bootstraping &amp; Update</title>
    <link>http://intelligents-ia.com/index.php/post/2011/04/06/keystone</link>
    <guid isPermaLink="false">urn:md5:c968187bc7b37a6603416a92c8cab5f0</guid>
    <pubDate>Wed, 06 Apr 2011 18:08:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>keystone</category>
        <category>bootstrap</category><category>Idée</category><category>Java</category>    
    <description>&lt;p&gt;&lt;br _moz_editor_blogus_node=&quot;TRUE&quot; _moz_dirty=&quot;&quot; /&gt;&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/java/keystone/tiredkitten.jpg&quot; title=&quot;tiredkitten.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/java/keystone/.tiredkitten_s.jpg&quot; alt=&quot;tiredkitten.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Un petit projet&amp;nbsp;: keystone&lt;/h2&gt;
&lt;p&gt;Kezaco&amp;nbsp;?&lt;/p&gt;
&lt;p&gt;keystone ou en français &quot;clé de voute&quot; à deux signification&amp;nbsp;:
Pierre en forme de coin qui maintient une voûte,
Elément central dont tout dépend.&lt;/p&gt;
&lt;p&gt;C'est un petit projet java qui est naît de la reprise de Winstone. Lors du refactoring, il est devenue important et nécessaire de simplifier le démarrage de ce serveur et de pouvoir embarquer facilement d'autre librairie dont le serveur dépend (comme une bonne API de log par exemple ...).&lt;br /&gt; C'est comme ça que &quot;keystone&quot; est apparu, avec un petit clin d'oeil a &quot;win&quot; ou &quot;stone&quot; selon l'humeur du jour.&lt;/p&gt;
&lt;h2&gt;Amorce &amp;amp; Bootsrapping&lt;/h2&gt;
&lt;p&gt;Le bootstrapping est censé faire référence aux aventures du baron de Münchhausen, lequel se serait sorti d'un marécage où il était embourbé rien qu'en se tirant par les cheveux (plus précisément, sa queue de cheval) et se propulsant ainsi dans les airs.
(source&amp;nbsp;: &lt;a href=&quot;http://fr.wikipedia.org/wiki/Bootstrap&quot; rel=&quot;external&quot;&gt;http://fr.wikipedia.org/wiki/Bootstrap&lt;/a&gt;). En ce qui nous concerne c'est surtout un petit programme d'amorce.&lt;br /&gt;Pour ceux qui ne connaisse pas du tout, je vous renvoie sur &lt;a href=&quot;http://fr.wikipedia.org/wiki/Amor%C3%A7age_d%27un_ordinateur&quot; rel=&quot;external&quot;&gt;wikipedia&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le principal intérêt pour nous c'est d'isoler les &quot;classloader&quot; de chaque partie applicative.&lt;br /&gt;
Pour ce faire je me suis inspirer de cet article qui vous donne les bases &lt;a href=&quot;http://blog.markturansky.com/archives/21&quot; rel=&quot;external&quot; lang=&quot;en&quot;&gt;http://blog.markturansky.com/archives/21&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Mise à jour &amp;amp; Update&lt;/h2&gt;
&lt;p&gt;Le &quot;plus&quot; de ce projet, est la possibilité de mettre à jour de façon automatique votre application/serveur.&lt;br /&gt;
Connaissez vous le projet &lt;a href=&quot;http://jdownloader.org/&quot; rel=&quot;external&quot; lang=&quot;en&quot;&gt;jdownloader&lt;/a&gt;&amp;nbsp;? C'est ce système de mise à jour que je vous propose&amp;nbsp;: un site distant liste les mises à jour disponibles, et votre applicatif décide du &quot;quand&quot; (et  même du &quot;comment&quot; si vous plongez un peu plus dans cette mécanique).&lt;br /&gt;
Les difficultés autour de cette fonctionnalité proviennent du fait que vous ne pouvez écrasez un &quot;jar&quot; qui est utilisé (il y a un verrou système sur ce fichier).&lt;br /&gt;
Ce qui implique de libérer les &quot;jar&quot; en cours d'utilisation avant de les mettre à jour. Nous avons donc besoin d'un petit utilitaire distinct de l'application principale, qui s'occupe de cette mise à jour.&lt;/p&gt;
&lt;h2&gt;Récupération depuis les sources&lt;/h2&gt;
&lt;p&gt;Récupération du code source et construction (client svn et maven obligatoire)&amp;nbsp;:&lt;/p&gt;
&lt;pre class=&quot;brush: bash&quot;&gt;svn checkout https://blog-intelligents-ia.googlecode.com/svn/trunk/keystone keystone --username yoursUserName
cd keystone
mvn clean package&lt;/pre&gt;
&lt;p&gt;Le projet se découpe en quatre partie&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;le bootloader&amp;nbsp;: keystone-boot,&lt;/li&gt;
&lt;li&gt;une micro API de mise à jour&amp;nbsp;: keystone-api,&lt;/li&gt;
&lt;li&gt;l'utilitaire de mise à jour&amp;nbsp;: keystone-update,&lt;/li&gt;
&lt;li&gt;un exemple&amp;nbsp;: keystone-sample,&lt;/li&gt;
&lt;li&gt;un plugin maven pour que le build soit transparent&amp;nbsp;: keystone-plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;L'arborescence d'un projet&lt;/h2&gt;
&lt;p&gt;Lorsque que vous packagez votre application, vous allez obtenir une seule archive (jar). Celle-ci va contenir les dépendances de votre projet, les classes du &quot;bootstrap&quot;, la configuration du boot, etc ...&lt;/p&gt;
&lt;p&gt;Au démarrage cette archive va être extraite sur le système de fichier, en suivant cette arborescence (${home} étant le&amp;nbsp;répertoire&amp;nbsp;de démarrage)&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&quot;${home}/lib&quot; les dépendances de votre projet ainsi que l'archive de votre application,&lt;/li&gt;
&lt;li&gt;&quot;${home}/plugins&quot; toutes les librairies qui peuvent être ajoutées de façon externe (manuellement, jar inclus dans un autre, téléchargement applicatif, ...),&lt;/li&gt;
&lt;li&gt;&quot;${home}/tools&quot; les utilitaires comme l'&quot;updater&quot; (ce répértoire permet de façon simple la mise à jour du système)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Les options de démarrage&lt;/h2&gt;
&lt;p&gt;Voici la liste des option que vous pouvez passer au &quot;Bootstrap&quot; via la ligne de commande ( sous la forme  &quot;--name=value&quot; ) ou par un fichier de propriétés (&quot;keystone.properties&quot;).&lt;/p&gt;
&lt;p&gt;La prise en compte des options suit la hiérarchie suivante (du plus important au moins important)&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;ligne de commande sous la forme  &quot;--name=value&quot;  &lt;/li&gt;
&lt;li&gt;le fichier &quot;file:keystone.properties&quot;, au même niveau que l'archive&lt;/li&gt;
&lt;li&gt;le fichier &quot;classpath:keystone.properties&quot;&lt;/li&gt;
&lt;li&gt;le fichier &quot;classpath:META-INF/keystone.properties&quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Nom&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;
&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;Main-Class&lt;/td&gt;&lt;td&gt;java main class&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.haltOnError&lt;/td&gt;&lt;td&gt;true|false (par défaut : true), si vrai le système s'arrête à la première erreur, sinon il continue comme il peut (utile lors de mise à jour &quot;tendue&quot;)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.explode&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;true), si vrai, l'archive va être extraite dans le répertoire de démarrage (les répertoires &quot;lib&quot;, &quot;tools&quot;, et &quot;plugins&quot; vont être alimenté avec les ressources de l'archive de départ)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.cleanUpTools&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;false), si vrai le répertoire 'tools' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.cleanUpLib&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;true),&amp;nbsp;si vrai le répertoire 'lib' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.cleanUpPlugins&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;false),&amp;nbsp;si vrai le répertoire 'plugins' va être nettoyer au démarrage du système&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.verbose&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;false), active le mode de log 'verbose'&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.info&lt;/td&gt;&lt;td&gt;true|false (par défaut :&amp;nbsp;true),&amp;nbsp;active le mode de log&amp;nbsp;'info'&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.logFile&lt;/td&gt;&lt;td&gt;fichier de log du bootstrap (&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;par défaut :&lt;/span&gt;&amp;nbsp;aucun)&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.includeJavaHomeLib&lt;/td&gt;&lt;td&gt;true|false  (&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;par défaut :&lt;/span&gt;&amp;nbsp;false), inclus le répertoire de librairies du jdk&amp;nbsp;dans le classpath&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.includeSystemClassLoader&amp;nbsp;&lt;/td&gt;&lt;td&gt;true|false (&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;par défaut :&lt;/span&gt;&amp;nbsp;false), inclus le classloader système&amp;nbsp;dans le classpath&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;BootStrap.includePlugins&lt;/td&gt;&lt;td&gt;true|false (&lt;span class=&quot;Apple-style-span&quot; style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; &quot;&gt;par défaut :&lt;/span&gt;&amp;nbsp;true), inclus le répertoire des plugins dans le classpath&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Le boot rajoute deux propriétés système pouvant être utiliser dans votre application&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;BootStrap.location : le chemin complet de l'archive qui a été démarré via la ligne de commande&lt;/li&gt;
&lt;li&gt;BootStrap.home : le répertoire de démarrage&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Intégration du plugin à votre POM&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter le repository du plugins&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;
&amp;lt;pluginRepositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;pluginRepository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/pluginRepository&amp;gt;
&amp;lt;/pluginRepositories&amp;gt;
&amp;lt;repositories&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;repository&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;intelligents-ia&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;name&amp;gt;Intelligents-ia Repository&amp;lt;/name&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;url&amp;gt;http://intelligents-ia.com/maven2&amp;lt;/url&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/repository&amp;gt;
&amp;lt;/repositories&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Et configurer le build de votre projet avec le plugin &quot;keystone-plugin&quot; (indiquer votre classe de démarrage) :&lt;br /&gt;
&lt;pre type=&quot;syntaxhighlighter&quot; class=&quot;brush: xml&quot;&gt;&amp;lt;build&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugins&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;groupId&amp;gt;org.intelligentsia.keystone&amp;lt;/groupId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;artifactId&amp;gt;plugin&amp;lt;/artifactId&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;id&amp;gt;make-assembly&amp;lt;/id&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;phase&amp;gt;package&amp;lt;/phase&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;mainClass&amp;gt;votre.class.Main&amp;lt;/mainClass&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/configuration&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;goal&amp;gt;custom&amp;lt;/goal&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/goals&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/execution&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/executions&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugin&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/plugins&amp;gt;
&amp;lt;/build&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Soyez indulgent ce projet est tout récent, et je vais lui faire subir sa première épreuve du feu avec le projet  &lt;a href=&quot;http://intelligents-ia.com/index.php/post/2011/03/01/Winstone&quot; lang=&quot;fr&quot;&gt;winstone&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Dès que celle-ci m'aura permis de sécher ce projet, je compléterais cet article avec un &quot;how to bootstrap with keystone&quot;.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;A bientôt donc&amp;nbsp;!&lt;/p&gt;</description>
    
          <enclosure url="http://intelligents-ia.com/public/java/keystone/class-diagram-keystone.jpg"
      length="164232" type="image/jpeg" />
          <enclosure url="http://intelligents-ia.com/public/java/keystone/sequence-diagram-keystone.jpg"
      length="99538" type="image/jpeg" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/04/06/keystone#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/04/06/keystone#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/25</wfw:commentRss>
      </item>
    
  <item>
    <title>Consultation Gratuite:  Les  architectes, des experts à votre service</title>
    <link>http://intelligents-ia.com/index.php/post/2011/03/29/Consultation-Gratuite-j2g-design</link>
    <guid isPermaLink="false">urn:md5:5e6b49328306648f5894733881013dd2</guid>
    <pubDate>Tue, 29 Mar 2011 15:18:00 +0200</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Idée</category>    
    <description>    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/j2g-design/Foire-de-Paris2011.jpg&quot; title=&quot;Foire-de-Paris2011.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/j2g-design/Foire-de-Paris2011.jpg&quot; alt=&quot;Foire-de-Paris2011.jpg&quot; style=&quot;float: left; margin: 0 1em 1em 0;&quot; /&gt;&lt;/a&gt;  Bonjour, Je vous invite tous à retrouver &lt;a href=&quot;http://j2g-design.com/accueil.php&quot; rel=&quot;external&quot;&gt;J2G-design&lt;/a&gt; les vendredi 29 avril et 6 mai de 14h à 19h à la &lt;a href=&quot;http://j2g-design.com/blog/index.php/post/2011/03/24/Les-architectes,-des-experts-%C3%A0-votre-service&quot; rel=&quot;external&quot;&gt;foire de Paris&lt;/a&gt; pour une consultation gratuite.&lt;/p&gt;
&lt;p&gt;Home Staging, shopping déco, réaménagement, rénovation, suivi de chantier… sont des moments (très) importants pour chacun et qui vont justement vous changer la vie de tous les jours. Alors, profitez de la foire de Paris pour &lt;a href=&quot;http://j2g-design.com/contact.php&quot; rel=&quot;external&quot;&gt;lui&lt;/a&gt; poser vos questions !&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/03/29/Consultation-Gratuite-j2g-design#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/03/29/Consultation-Gratuite-j2g-design#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/24</wfw:commentRss>
      </item>
    
  <item>
    <title>Ploum : le Don Quichotte des temps modernes</title>
    <link>http://intelligents-ia.com/index.php/post/2011/03/03/Ploum%3A-le-Don-Quichotte-des-temps-modernes</link>
    <guid isPermaLink="false">urn:md5:f700ea442d1ee768ea7811eb3ba1963b</guid>
    <pubDate>Thu, 03 Mar 2011 14:29:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Idée</category><category>Lecture</category>    
    <description>Ce n'est pas une histoire de moulin, et pourtant une étude sur la vie&amp;nbsp;trépidante&amp;nbsp;d'une moule :-p devient tout d'un coup passionnant !    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/deco/don_quichotte.jpg&quot; title=&quot;don_quichotte.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/deco/don_quichotte.jpg&quot; alt=&quot;don_quichotte.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;
Parlons peu, écrivons bien, mais surtout lisons !&lt;br /&gt;
Il est des proses que j'aime à lire, et celle-ci en fait partie !! Ces billets, je les attends comme des petits pains aux chocolats tout juste sortis du four.&lt;/p&gt;
&lt;p&gt;De la partie de &lt;a href=&quot;http://ploum.net/post/175-car-en-plus-ils-applaudissent&quot;&gt;poillade&lt;/a&gt; autour de gens bizarre qui applaudissent tant ils s'étonnent d'être (encore) en vie à l’atterrissage de leur avion, en passant par une analyse très poussée de la carto-bio-graphie interne d'une moule, vous aurez un &lt;strong&gt;ton&lt;/strong&gt;, une langue, vindicative comme on en trouve peu.&lt;br /&gt; Ce qui n'empêche pas de toucher du doigt/de la plume devrais-je dire, et faire mouche !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;En réponse à son dernier article sur &lt;a href=&quot;http://ploum.net/post/facebook-tue-web&quot; rel=&quot;external&quot;&gt;face-de-bouc et la mort du web&lt;/a&gt;, j'ouvre à mon tour ma prose, pour vous dire que ça fait du bien de vous lire !! Merci &lt;img src=&quot;/themes/iia/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt;  &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/03/03/Ploum%3A-le-Don-Quichotte-des-temps-modernes#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/03/03/Ploum%3A-le-Don-Quichotte-des-temps-modernes#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/23</wfw:commentRss>
      </item>
    
  <item>
    <title>Syntax Highlighter</title>
    <link>http://intelligents-ia.com/index.php/post/2011/03/03/Syntax-Highlighter</link>
    <guid isPermaLink="false">urn:md5:ea485fb01e14105f30074fe00434f969</guid>
    <pubDate>Thu, 03 Mar 2011 11:16:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Clojure</category><category>Dotclear</category><category>Html</category><category>Java</category>    
    <description>&lt;p&gt;Un &quot;colorisateur syntaxique&quot; complet, efficace, simple à l'usage et facile à installer!&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/clojure/clojure.jpg&quot; alt=&quot;clojure.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;Un petit mot sur un outil javascript fabuleux pour le web c'est le &lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/&quot; rel=&quot;external&quot;&gt;Syntax Highlighter&lt;/a&gt;&amp;nbsp;d'Alex Gorbatchev.&lt;/p&gt;
&lt;p&gt;Très utilisé, il supporte les syntaxes:&amp;nbsp;java, js, schell, C, php, xml, sql, xml, css, erlang, mais aussi clojure &lt;img src=&quot;/themes/iia/smilies/evil.png&quot; alt=&quot;&amp;gt;-)&quot; class=&quot;smiley&quot; /&gt;   !! (une liste exhaustive des syntaxes est disponible sur ce &lt;a href=&quot;http://www.undermyhat.org/blog/2009/09/list-of-brushes-syntaxhighligher/&quot; rel=&quot;external&quot;&gt;billet&lt;/a&gt; o)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;C'est Daniel Solano Gómez à développé une &quot;brush&quot; pour clojure (disponible sur &lt;a href=&quot;https://github.com/sattvik/sh-clojure&quot; rel=&quot;external&quot;&gt;git hub&lt;/a&gt; ou via le fichier attaché à ce billet).&lt;br /&gt;
Un exemple de ce que cela donne:&lt;/p&gt;
&lt;pre class=&quot;brush: clojure&quot;&gt;(def hello (fn [] &quot;Hello world&quot;))
-&amp;gt; #'user/hello
(hello)
-&amp;gt; &quot;Hello world&quot;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Intégration avec Dotclear&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;récupération du &lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/download/&quot; rel=&quot;external&quot;&gt;code source&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;dézippage et installation de tous les fichiers javascript dans le dossier &quot;js/sh&quot; du thème ({{tpl:BlogThemeURL}}/js/sh)&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Choix du style générale (pour moi c'est &quot;shCoreEclipse.css&quot;) et intégration dans le css de mon thème&lt;br /&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Inclusion des fichiers javascript dans le footer (je vous conseille de les copiers dans un seul et même fichier &quot;sh.js&quot;&lt;br /&gt;&amp;nbsp;
&lt;ul&gt;
&lt;li&gt;&quot;{{tpl:BlogThemeURL}}/js/sh/shCore.js&quot;&lt;/li&gt;
&lt;li&gt;&quot;{{tpl:BlogThemeURL}}/js/sh/shAutoloader.js&quot;&lt;/li&gt;
&lt;li&gt;Et du bout de code suivant (il charge dans la navigateur, les &quot;brush&quot; qui vont bien à la demande)
&lt;pre class=&quot;brush: js&quot;&gt;$(document).ready(function(){
SyntaxHighlighter.autoloader.apply(null, syntaxHighlighterPath(
'clojure clj               @shBrushClojure.js',
'applescript            @shBrushAppleScript.js',
'actionscript3 as3      @shBrushAS3.js',
'bash shell             @shBrushBash.js',
'coldfusion cf          @shBrushColdFusion.js',
'cpp c                  @shBrushCpp.js',
'c# c-sharp csharp      @shBrushCSharp.js',
'css                    @shBrushCss.js',
'delphi pascal          @shBrushDelphi.js',
'diff patch pas         @shBrushDiff.js',
'erl erlang             @shBrushErlang.js',
'groovy                 @shBrushGroovy.js',
'java                   @shBrushJava.js',
'jfx javafx             @shBrushJavaFX.js',
'js jscript javascript  @shBrushJScript.js',
'perl pl                @shBrushPerl.js',
'php                    @shBrushPhp.js',
'text plain             @shBrushPlain.js',
'py python              @shBrushPython.js',
'ruby rails ror rb      @shBrushRuby.js',
'sass scss              @shBrushSass.js',
'scala                  @shBrushScala.js',
'sql                    @shBrushSql.js',
'vb vbnet               @shBrushVb.js',
'xml xhtml xslt html    @shBrushXml.js'
));
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.defaults.toolbar=false;
SyntaxHighlighter.defaults.gutter=false;
SyntaxHighlighter.all();
});
&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modification du template &quot;footer.html&quot; ( {{tpl:BlogThemeURL}}/tpl/_footer.html), pour activer le système pour les billets vue en post : &lt;br /&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: js&quot;&gt;&lt;![CDATA[
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
&amp;lt;tpl:SysIf current_tpl=&quot;post.html&quot;&amp;gt;
function syntaxHighlighterPath()
{
var args =&quot; &quot;&quot;arguments,&quot; result =&quot; &quot;&quot;[&quot;] ;
for(var i =&quot; &quot;&quot;0;&quot; i &amp;lt; args.length; i++)
result.push(args[i].replace('@', '{{tpl:BlogThemeURL}}/js/sh/'));
return result;
};
&amp;lt;/tpl:SysIf&amp;gt;
&amp;lt;/script&amp;gt;
]]&gt;&lt;/script&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Attention, cela suppose que vous avez &quot;jquery&quot; d'installer dans votre thème  &lt;img src=&quot;/themes/iia/smilies/cool.png&quot; alt=&quot;B-)&quot; class=&quot;smiley&quot; /&gt;  .&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Exemple d'utilisation&lt;/h3&gt;
&lt;p&gt;Pour afficher
&lt;/p&gt;
&lt;pre class=&quot;brush: clojure&quot;&gt;(def hello (fn [] &quot;Hello world&quot;))
-&amp;gt; #'user/hello
(hello)
-&amp;gt; &quot;Hello world&quot;
&lt;/pre&gt;
&lt;br /&gt;vous devez saisir:
&lt;pre class=&quot;brush: xml&quot;&gt;&amp;lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: js&quot;&amp;gt;&amp;lt;![CDATA[
(def hello (fn [] &quot;Hello world&quot;))
-&amp;gt; #'user/hello
(hello)
-&amp;gt; &quot;Hello world&quot;
]]&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
          <enclosure url="http://intelligents-ia.com/public/clojure/shBrushClojure.js"
      length="8401" type="text/javascript" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/03/03/Syntax-Highlighter#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/03/03/Syntax-Highlighter#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/22</wfw:commentRss>
      </item>
    
  <item>
    <title>Winstone - conteneur de servlet</title>
    <link>http://intelligents-ia.com/index.php/post/2011/03/01/Winstone</link>
    <guid isPermaLink="false">urn:md5:18694147740e7dfa68d05c48b6adff91</guid>
    <pubDate>Tue, 01 Mar 2011 15:48:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Java</category><category>servlet container</category><category>winstone</category>    
    <description>&lt;p&gt;Winstone est un conteneur de servlet léger qui a été écrit dans le but de fournir l'essentiel des fonctionnalités utilisées dans une application WEB, en moins de 300Ko.&lt;/p&gt;    &lt;p&gt;&lt;img src=&quot;http://intelligents-ia.com/public/winstone/zhuFull.jpg&quot; alt=&quot;zhuFull.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 1em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;
Winstone est un conteneur de servlet léger qui a été écrit dans le but de fournir l'essentiel des fonctionnalités utilisées dans une application WEB.&lt;/p&gt;
&lt;p&gt;Il n'est pas destiné à être un serveur J2EE complètement fonctionnel. Cela veut dire qu'il ne supporte pas les API non relatives au servlet:  JNDI, JavaMail, EJBs, etc... &lt;br /&gt;
Ceci est laissé à d'autre excellents conteneur comme Jetty, tomcat, Resin, JRun, Weblogic, ...
&lt;br /&gt;Toutefois, dans la version 1.0.0, une implémentation JNDI vient d'être intégrer afin de gérér les datasource et les sessions smtp.&lt;/p&gt;
&lt;p&gt;Des fois, vous avez juste besoin d'un petit conteneur de servlet, rapidement opérationel, pour tester, prototyper, monter, ou déployer une application web avec son serveur dans un simple jar.&lt;br /&gt;
C'est là où Winstone remplie sa fonction.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;La version 1.0.0 ce trouve sur &lt;a href=&quot;http://code.google.com/p/winstone/&quot; rel=&quot;external&quot;&gt;http://code.google.com/p/winstone/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Les buts originels&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fournir la fonctionnalité de conteneur de servlet d'une façon efficace et rapide&lt;/li&gt;
&lt;li&gt;Conserver une distribution de base avec une taile aussi faible que possible: 166KB pour la version 0.9.10 sur sourceforge, 295Ko pour la version 1.0.0 sur google code (sans les jars de log et la servlet-api et toute les informations de debug )&lt;/li&gt;
&lt;li&gt;Conserver les fichiers de configuration à un minimum absolu, en utilisant les options de ligne de commande pour éventuellement remplacer/surcharger celle compilé par défaut.&lt;/li&gt;
&lt;li&gt;Offrir la prise en charge optionnel de la compilation JSP en utilisant Jasper Apache. (&lt;a href=&quot;http://jakarta.apache.org&quot; rel=&quot;external&quot;&gt;http://jakarta.apache.org&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Pourquoi le nom &quot;Winstone&quot;&lt;/h3&gt;
&lt;p&gt;Les versions initiales de Winstone ont été créées par Rick Knowles (La page d'accueil de ce projet est &lt;a href=&quot;http://winstone.sourceforge.net&quot; rel=&quot;external&quot;&gt;http://winstone.sourceforge.net&lt;/a&gt; où vous trouverez la version 0.9.10).&lt;/p&gt;
&lt;p&gt;Officiellement, il a cessé de supporter Winstone, préférant se concentrer sur d'autres projets. Officieusement, il continue toujours à répondre à la mailing list &lt;img src=&quot;/themes/iia/smilies/smile.png&quot; alt=&quot;:)&quot; class=&quot;smiley&quot; /&gt; , merci à lui.&lt;br /&gt;
Depuis lors, avec sa permission, nous reprenons le suivi de ce «petit» projet qui a titiller nos neurones.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Nous espérons que nos petits doigts instilleront suffisamment de magie dans ce projet, et que&amp;nbsp;son usage soit pour vous source de&amp;nbsp;tranquillité.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Utiliser Winstone&lt;/h3&gt;
&lt;p&gt;Lancement&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: shell&quot;&gt;&lt;![CDATA[
java -jar winstone-X.X.X.jar --webroot=&lt;location of webroot&gt; (+ other options)
java -jar winstone-X.X.X.jar --warfile=&lt;location of warfile&gt; (+ other options)
java -jar winstone-X.X.X.jar --webappsDir=&lt;location of webapps directory&gt; (+ other options)
java -jar winstone-X.X.X.jar --hostsDir=&lt;location of hosts directory&gt; (+ other options)
]]&gt;&lt;/script&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;vous pourrez trouver:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;la liste des options disponible sur ce lien &lt;a href=&quot;http://code.google.com/p/winstone/wiki/CmdLineOption&quot; rel=&quot;external&quot;&gt;http://code.google.com/p/winstone/wiki/CmdLineOption&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;des informations sur le paramètrage du JNDI: &lt;a href=&quot;http://code.google.com/p/winstone/wiki/JndiSupport&quot; rel=&quot;external&quot;&gt;http://code.google.com/p/winstone/wiki/JndiSupport&lt;/a&gt; (celui-ci embarque une implémentation minimaliste d'un pool de connection, des alias jndi, des sessions SMTP, des propriétés basiques, ... )&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Construire le projet depuis les sources&lt;/h3&gt;
&lt;p&gt;Pour compiler le projet vous aurez besoin de télécharger et installer Apache Maven (v2.x) et une JVM.&lt;br /&gt;
Les instructions suivant assume que vous avez déjà installé Maven et que vous avez la commande shell dans votre path (pour obtenir Maven: &lt;a href=&quot;http://maven.apache.org/&quot; rel=&quot;external&quot;&gt;http://maven.apache.org/&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Recuperer les sources (soit en téléchargeant une archive, soit depuis google code avec l'outil Subversion)&lt;/p&gt;
&lt;script type=&quot;syntaxhighlighter&quot; class=&quot;brush: shell&quot;&gt;&lt;![CDATA[
svn checkout http://winstone.googlecode.com/svn/trunk/ winstone
cd winstone
mvn clean package
]]&gt;&lt;/script&gt;
&lt;p&gt;Le fichier winstone-X.X.X.boot.jar se trouvera dans le répértoire &quot;target&quot;.&lt;/p&gt;
&lt;h3&gt;La version 1.0.0&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;mavenisation (en version 2)&lt;/li&gt;
&lt;li&gt;utilisation de SLF4J, reprise de toute la gestion des log&lt;/li&gt;
&lt;li&gt;ajout d'une implémentation JNDI plus complete (pool de connection, gestion des alias, ...)&lt;/li&gt;
&lt;li&gt;ajout de test unitaire&lt;/li&gt;
&lt;li&gt;supression du code mort&lt;/li&gt;
&lt;li&gt;extention des options en ligne de commande,&lt;/li&gt;
&lt;li&gt;amélioration de la gestion des types mime&lt;/li&gt;
&lt;li&gt;et plein d'autres encore....&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Vous pourrez trouver le change log à cette adresse &lt;a href=&quot;http://code.google.com/p/winstone/wiki/ChangeLog&quot; rel=&quot;external&quot;&gt;http://code.google.com/p/winstone/wiki/ChangeLog&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Le futur&lt;/h3&gt;
&lt;p&gt;Dans un avenir proche, la priorité est de créer la release de cette version 1.0.0 qui porte beaucoup de changement.&lt;/p&gt;
&lt;p&gt;Sinon, dans les bacs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;créér un plugin maven, jenkins (anciennement hudson)&lt;/li&gt;
&lt;li&gt;optimiser l'algorithme de matching des urls&lt;/li&gt;
&lt;li&gt;compléter la documentation&lt;/li&gt;
&lt;li&gt;Obtenir un profile de consomation mémoire plus claire&lt;/li&gt;
&lt;li&gt;Ajouter des tests plus poussés sur les connecteur AJ...&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Toute l'aide, commentaires est la bienvenue !!&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
          <enclosure url="http://intelligents-ia.com/public/winstone/winstone-1.0.0.boot.jar"
      length="767368" type="application/x-java-archive" />
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/03/01/Winstone#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/03/01/Winstone#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/16</wfw:commentRss>
      </item>
    
  <item>
    <title>Les biotic games, vous connaissez ?</title>
    <link>http://intelligents-ia.com/index.php/post/2011/03/01/Les-biotic-games%2C-vous-connaissez</link>
    <guid isPermaLink="false">urn:md5:620b09881893634fba5a28acb828de1a</guid>
    <pubDate>Tue, 01 Mar 2011 11:42:00 +0100</pubDate>
    <dc:creator>Jérôme Guibert</dc:creator>
        <category>Technique</category>
        <category>Biotechnologie</category>    
    <description>&lt;p&gt;&lt;a href=&quot;http://www.stanford.edu/group/riedel-kruse/research/biotic_games.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;Ingmar Riedel-Kruse et son équipe&lt;/a&gt; viennent de développer les premiers biotic games.&lt;/p&gt;
&lt;p&gt;Revisitez le Pac man biologique !!&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://intelligents-ia.com/public/microorganisms-under-a-microscope11-300x263.jpg&quot; title=&quot;microorganisms-under-a-microscope11-300x263.jpg&quot;&gt;&lt;img src=&quot;http://intelligents-ia.com/public/.microorganisms-under-a-microscope11-300x263_s.jpg&quot; alt=&quot;microorganisms-under-a-microscope11-300x263.jpg&quot; style=&quot;float: left; margin-top: 0; margin-right: 2em; margin-bottom: 1em; margin-left: 0; &quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://www.stanford.edu/group/riedel-kruse/research/biotic_games.html&quot; hreflang=&quot;en&quot; rel=&quot;external&quot;&gt;Ingmar Riedel-Kruse et son équipe&lt;/a&gt; viennent de développer les premiers biotic games.&lt;/p&gt;
&lt;p&gt;Créer comme un hommages à des monuments du jeu vidéo (Pong, Pac man...), ils sont résoluement tourné vers une interaction du joueur avec des organismes vivants. J'ai bien dit vivant, et pas une simulation d'organisme vivant!! &lt;/p&gt;
&lt;p&gt;Bien qu'ils semblent anodins, la mise au point de ces petit jeu nécéssite toute de même une bonne maîtrise de problèmatique comme la reconnaissance de forme, la numérations, le traitement d'image en temps réél, ...&lt;/p&gt;
&lt;p&gt;Ces créations n'ont pas  d'application commercial en tant que &quot;jeu vidéo&quot;, mais peuvent servir à eduquer d'une manière ludique nos jeunes chérubins!&lt;/p&gt;
&lt;p style=&quot;clear:left&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Pdx7BkYSCq4?fs=1&amp;amp;hl=en_US&quot; /&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;
&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/x4eITQ4-nqQ?fs=1&amp;amp;hl=en_US&quot; /&gt;
&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;
&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
    
    
    
          <comments>http://intelligents-ia.com/index.php/post/2011/03/01/Les-biotic-games%2C-vous-connaissez#comment-form</comments>
      <wfw:comment>http://intelligents-ia.com/index.php/post/2011/03/01/Les-biotic-games%2C-vous-connaissez#comment-form</wfw:comment>
      <wfw:commentRss>http://intelligents-ia.com/index.php/feed/atom/comments/17</wfw:commentRss>
      </item>
    
</channel>
</rss>
