<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1165385818525541410</id><updated>2012-01-04T21:02:33.430+01:00</updated><category term='apache'/><category term='hibernate'/><category term='tools'/><category term='javascript'/><category term='java'/><category term='cache'/><category term='ajax'/><category term='maven'/><category term='XML'/><category term='tomcat'/><category term='Sécurité'/><category term='ca vient du web'/><category term='http'/><category term='SOA'/><category term='firefox'/><category term='EJB'/><category term='test'/><category term='base documentaire'/><category term='Portlet'/><category term='tutoriels'/><category term='struts'/><category term='frameworks'/><category term='protocole'/><category term='Database'/><category term='spring'/><category term='tips'/><category term='Linux'/><category term='performance'/><category term='memo'/><category term='eclipse'/><category term='SVN'/><category term='Ant'/><category term='google'/><category term='OS'/><category term='FAI'/><title type='text'>techno.blog(java4it)</title><subtitle type='html'>Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>80</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8495542872304534813</id><published>2011-09-19T21:11:00.001+02:00</published><updated>2011-09-19T21:14:06.385+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Memory leak of java.lang.ref.WeakReference objects</title><content type='html'>Bug Java, une fois n'est pas coutume, je suis tombé sur un bug Java. Bug dans l'API java.util.logging qui provoque une fuite mémoire ;-(&lt;br /&gt;&lt;br /&gt;En effet, après une utilisation de l'API java.util.logging durant environ 4 jours sur notre serveur, nous avons 8,5 millions de WeakReference qui ne sont pas nettoyée lors des passages du garbage collector. Il en résulte sur une utilisation d'environ 4 Go de la heap Java qu'environ un tier est retenue par l'API de logging.&lt;br /&gt;&lt;br /&gt;Plus d'information sur ce problème:&amp;nbsp;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6942989"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6942989&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8495542872304534813?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8495542872304534813/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8495542872304534813&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8495542872304534813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8495542872304534813'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2011/09/memory-leak-of-javalangrefweakreference.html' title='Memory leak of java.lang.ref.WeakReference objects'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-418392879134435617</id><published>2011-06-23T21:26:00.001+02:00</published><updated>2011-06-23T21:29:57.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Boîte à outils pour le développement</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;06/12/2006&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.1&lt;/td&gt;&lt;td&gt;17/02/2007&lt;/td&gt;&lt;td&gt;Ajout du plug-in Lomboz.&lt;br /&gt;Ajout de l'outils Gantt Project.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.2&lt;/td&gt;&lt;td&gt;25/02/2007&lt;/td&gt;&lt;td&gt;Ajout de l'add-on firebug pour firefox.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.3&lt;/td&gt;&lt;td&gt;21/06/2007&lt;/td&gt;&lt;td&gt;Ajout du plug-in Mylyn.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.4&lt;/td&gt;&lt;td&gt;08/08/2007&lt;/td&gt;&lt;td&gt;Ajout de l'extension Firebug YSlow.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.5&lt;/td&gt;&lt;td&gt;11/12/2007&lt;/td&gt;&lt;td&gt;Ajout de Notepad++.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.6&lt;/td&gt;&lt;td&gt;17/01/2008&lt;/td&gt;&lt;td&gt;Ajout de Launchy.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.7&lt;/td&gt;&lt;td &gt;01/08/2008&lt;/td&gt;&lt;td&gt;Ajout de SyncBack, WireShark, HTTrack et Loop for Firefox&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.8&lt;/td&gt;&lt;td&gt;11/12/2008&lt;/td&gt;&lt;td&gt;Ajout de Todo List&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.9&lt;/td&gt;&lt;td&gt;05/02/2010&lt;/td&gt;&lt;td&gt;Ajout de OpenProj&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td &gt;1.1.0&lt;/td&gt;&lt;td&gt;23/06/2011&lt;/td&gt;&lt;td&gt;Ajout de Vim, Agent Ransack, Beyond Compare et Fiddler.&lt;br&gt;Mise à jours diverses de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Dans ce petit post, je vous indique les outils que j'utilise pour le développement Java et Web. Si vous avez d'autres outils très sympatiques, n'hésitez pas à m'en faire part.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Eclipse&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://eclipse-cs.sourceforge.net/"&gt;Checkstyle&lt;/a&gt; : Plug-in Eclipse permettant de vérifier le code Java pendant la sauvegarde des fichiers.&lt;/li&gt;&lt;li&gt;WST (Web Standard Tools) : Plug-in Eclipse permettant de développer et de déployer des applications Web. J'installe ce plug-in via l'update manager d'Eclipse.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hibernate.org/255.html"&gt;Hibernate Tools&lt;/a&gt; : Plug-in Eclipse permettant de faciliter le travail lors des développements liés à la couche de persistance avec hibernate.&lt;/li&gt;&lt;li&gt;&lt;a href="http://sourceforge.net/projects/dbedit"&gt;DBEdit&lt;/a&gt; ou &lt;a href="http://quantum.sourceforge.net/"&gt;QuantumDB&lt;/a&gt; : Plug-in Eclipse permettant de se connecter aux bases de données. Dommage que DBEdit ne soit plus maintenu car il était vraiment bien, je me suis donc rabattu sur QuantumDB.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://xmlbuddy.com/"&gt;XML Buddy&lt;/a&gt; : Plug-in Eclipse permettant d'éditer des fichiers XML et DTD.&lt;/li&gt;&lt;li&gt;&lt;a href="http://subclipse.tigris.org/"&gt;Subclipse&lt;/a&gt; : Plug-in Eclipse permettant de se connecter à un serveur de gestion de configuration subversion.&lt;/li&gt;&lt;li&gt;TPTP : Plug-in Eclipse permettant de faire des tests, des mesures de performance et d'analyse de la mémoire des applications Java. J'installe ce plug-in via l'update manager d'Eclipse.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/mylyn/"&gt;Mylyn&lt;/a&gt; : Plug-in Eclipse permettant d'avoir des contextes de travail afin de réaliser des tâches. Un contexte étant associé à un ensemble de fichiers, il est possible de switcher d'un contexte de travail à un autre en un simple clic. Ce plug-in permet également de se synchronizer avec des outils de bug tracking tels que Bugzilla, JIRA et TRAC.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/vep"&gt;Visual Editor&lt;/a&gt; : Plug-in Eclipse permettant de faire du développement Swing et SWT de façon graphique.&lt;/li&gt;&lt;li&gt;&lt;a href="http://lomboz.objectweb.org/"&gt;Lomboz&lt;/a&gt; : Plug-in Eclipse permettant de faire du développement de Portlets (JSR 168).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Outils&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://addons.mozilla.org/firefox/1843/"&gt;Firebug&lt;/a&gt; : Add-on pour firefox permettant de débugger le JavaScript et le HTML, très utile dans le développement d'applications Web. Le site officiel ainsi que la documentation sont à l'adresse suivante : &lt;a href="http://www.getfirebug.com/"&gt;http://www.getfirebug.com/&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yslow/"&gt;YSlow&lt;/a&gt; : Add-on pour firefox permettant d'évaluer les performances de votre site web selon les critères de mesures Yahoo. Le site officiel ainsi que la documentation sont à l'adresse suivante : &lt;a href="http://developer.yahoo.com/yslow/"&gt;http://developer.yahoo.com/yslow/&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.drawloop.com/firefoxFAQ.aspx"&gt;Loop for Firefox&lt;/a&gt; : Add-on pour Firefox permettant lors du browsing sur le net de construire un PDF de la page en cours de visualisation et de fichiers présent sur le disque en un seul clic. Il permet aussi de construire un PDF complet par aggrégation des différents PDF. Je trouve cet outils très intéressant dans le cas d'une veille technologique : vous browser le net et lorsque vous tromber sur une doc intéressant vous l'ajoutez au PDF. Une fois que vous avez fini de browser le net, vous générez le PDF qui est la somme de toute les docs que vous avez trouvé intéressantes et du coup vous avez dans un seul fichier PDF toute votre base documentaire pour pouvoir travailler.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fabsoft.com/products/ruler/ruler.html"&gt;CoolRuler&lt;/a&gt; : Règle virtuelle, utile lors que l'on développe des intefaces graphiques afin de mesurer les dimensions des composants affichés.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.sysinternals.com/Utilities/ProcessExplorer.html"&gt;Process Explorer&lt;/a&gt; : Un gestionnaire de tâches comme celui de Windows, mais en mieux, il permet de voir les accés au disque, les handles utilisés par les processus, changer le niveau de priorité de processus, ...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;a href="http://www.flos-freeware.ch/notepad2.html"&gt;Notepad2&lt;/a&gt; et&lt;/span&gt; &lt;a href="http://notepad-plus.sourceforge.net/fr/site.htm"&gt;Notepad++&lt;/a&gt;: C'est un notepad amélioré, après avoir utilisé les deux je préfère Notepad++.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/technet/sysinternals/utilities/TcpView.mspx"&gt;TCPView&lt;/a&gt; : Pour connaître les ports utilisés par ses applications internet, TCPView gère la liste des ports sur TCP et UDP utilisés et les applications internet associées, ainsi que l'adresse des serveurs distants.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.launchy.net/"&gt;Launchy&lt;/a&gt; : C'est un utilitaire inspiré de &lt;a href="http://docs.blacktree.com/quicksilver/quicksilver"&gt;quicksilver&lt;/a&gt; dont vous n’allez bientôt plus pouvoir vous passer. Sous Windows, il permet de lancer des applications et d’ouvrir des fichiers au clavier. Pour cela, rien de plus simple : vous appuyez sur la combinaison « Alt + Barre d’espacement » puis vous saisissez le nom de votre application ou de votre fichier. Au fur et à mesure de la saisie, Launchy vous propose les applications et les fichiers pouvant correspondre aux premières lettres écrites.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.2brightsparks.com/downloads.html#freeware"&gt;SyncBack&lt;/a&gt; : C'est un outils très simple à utiliser permettant de faire de la synchronisation et de la sauvegarde de répertoires. En plus, il est possible de faire de la planification de synchronisation. Je l'ai utilisé sur un projet d'architecture où je rédigé ma documentation en local et je planifiais des synchronisation le midi sur un serveur partagé et qui est backupé, cela a super bien fonctionné. J'ai lu de la documentation qui disait que cet outils permet aussi de faire de la synchronisation FTP, pour information, je n'ai pas utilisé cette fonctionnalité, je ne peux donc pas vous faire part de mon avis.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.wireshark.org/"&gt;WireShark&lt;/a&gt; : C'est un utilitaire permettant d'analyser le traffic réseau d'une interface réseau. Cet outils est très utile dans le cas de développement de protocole mais aussi pour débugger des applications clients-serveur ou bien même des applications qui communiquent via HTTP et même HTTPs à condition de fournir la clé privée. Un bémol toutefois, il est assez difficile de le faire fonctionner sur le loopback.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.httrack.com/"&gt;HTTrack&lt;/a&gt; : C'est un aspirateur de site web. Cela vous permez d'aspirer un site web afin de pouvoir travailler hors ligne sur ce site web.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mythicsoft.com/page.aspx?type=agentransack&amp;page=home"&gt;Agent Ransack&lt;/a&gt;: Outils permettant le recherche de fichiers, il est plus avancé que le search Windows.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.scootersoftware.com/index.php"&gt;Beyond Compare&lt;/a&gt;: Outils de comparaison de fichiers et de répertoires.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.vim.org/"&gt;Vim&lt;/a&gt;: Un éditeur de texte pour Windows à la mode vi.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fiddler2.com/fiddler2/"&gt;Fiddler&lt;/a&gt;: Un proxy spécialisé dans le débogage des applications.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Gestion de projet&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="text-decoration: line-through;"&gt;&lt;a href="http://ganttproject.biz/"&gt;Gantt Project&lt;/a&gt; et&lt;/span&gt; &lt;a href="http://www.projity.com/"&gt;OpenProj&lt;/a&gt; : C'est projet opensource permettant de faire des diagrammes de gantt un peu comme les diagrammes de gantt MS Project (et c'est opensource donc c'est mieux). Après avoir utilisé les 2, je préfère nettement OpenProj car il est plus aboutit que Gantt Project, il permet d'avoir la gestion des coûts, capacité, durée et travail. De plus, il très proche de MS Project.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/applications/todolist2.aspx"&gt;Todo list&lt;/a&gt; : C'est un petit exe, permettant de gérer une liste de tâches avec la possibilité d'affecter des priorités, des dead lines, des risques, la progression, ... sur les tâches, de hiérarchiser les tâches et des exports vers différents format excel, texte, Gantt Project, ...&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-418392879134435617?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/418392879134435617/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=418392879134435617&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/418392879134435617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/418392879134435617'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/10/bote-outils-pour-le-dveloppement.html' title='Boîte à outils pour le développement'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5531547524580677728</id><published>2010-11-21T18:19:00.018+01:00</published><updated>2011-04-07T21:27:00.314+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='memo'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><title type='text'>Memo - Drivers JDBC</title><content type='html'>Un petit mémo afin d'avoir la liste des configurations des drivers JDBC des principales bases de données. C'est toujours un casse tête pour retrouver ces configurations, un petit index est toujours utile.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;IBM DB2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Driver Class:&lt;/b&gt; com.ibm.db2.jdbc.app.DB2Driver&lt;br /&gt;&lt;b&gt;Default Port:&lt;/b&gt; ???&lt;br /&gt;&lt;b&gt;JDBC URL:&lt;/b&gt; jdbc:db2://[host][:port]/[database]&lt;br /&gt;&lt;b&gt;Hibernate Dialect:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.DB2Dialect&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.DB2400Dialect (DB2 AS/400)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.DB2390Dialect (DB2 OS390)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;HypersonicSQL&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Driver Class:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hsqldb.jdbcDriver (v1.x)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hsqldb.jdbc.JDBCDriver (v2.x)&lt;br /&gt;&lt;b&gt;Default Port:&lt;/b&gt; 9001&lt;br /&gt;&lt;b&gt;JDBC URL:&lt;/b&gt; jdbc:hsqldb:hsql://[host][:port]/[database][;propertyName1=propertyValue1][;propertyName2=propertyValue2]...&lt;br /&gt;&lt;b&gt;Hibernate Dialect:&lt;/b&gt; org.hibernate.dialect.HSQLDialect&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;MySQL (Connector/J)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Driver Class:&lt;/b&gt; com.mysql.jdbc.Driver&lt;br /&gt;&lt;b&gt;Default Port:&lt;/b&gt; 3306&lt;br /&gt;&lt;b&gt;JDBC URL:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jdbc:mysql://[host][,failoverhost...][:port]/[database]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;jdbc:mysql://[host][,failoverhost...][:port]/[database][?propertyName1][=propertyValue1][&amp;amp;propertyName2][=propertyValue2]...&lt;br /&gt;&lt;b&gt;Hibernate Dialect:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.MySQLDialect&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.MySQLInnoDBDialect (InnoDB)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.MySQLMyISAMDialect (MyIsam)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;font-style:italic;"&gt;Oracle 9i/10g&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Driver Class:&lt;/b&gt; oracle.jdbc.driver.OracleDriver&lt;br /&gt;&lt;b&gt;Default Port:&lt;/b&gt; 1521 &lt;br /&gt;&lt;b&gt;JDBC URL:&lt;/b&gt; jdbc:oracle:thin:@[host]:[port]:[sid]&lt;br /&gt;&lt;b&gt;Hibernate Dialect:&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.OracleDialect (Toute version)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.Oracle9iDialect (9i)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.hibernate.dialect.Oracle10gDialect (10g)&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5531547524580677728?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5531547524580677728/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5531547524580677728&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5531547524580677728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5531547524580677728'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2010/11/un-petit-memo-afin-davoir-la-liste-des.html' title='Memo - Drivers JDBC'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5642761247590870812</id><published>2010-05-27T19:22:00.004+02:00</published><updated>2010-05-27T19:26:35.296+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Best Practices Hibernate</title><content type='html'>Les best practices Hibernate sont nombreuses et permettent de solutionner pas mal de problèmes, en voilà un petit extrait: &lt;a href="http://hibernatebp.blogspot.com/" target="_blank"&gt;http://hibernatebp.blogspot.com/&lt;/a&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bonne lecture&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5642761247590870812?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5642761247590870812/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5642761247590870812&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5642761247590870812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5642761247590870812'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2010/05/best-practices-hibernate.html' title='Best Practices Hibernate'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6114392173579564075</id><published>2010-05-26T21:05:00.003+02:00</published><updated>2010-05-27T19:27:09.704+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Hibernate et Envers: L'audit des modifications avec Hibernate</title><content type='html'>Voilà un lien vers Hibernate et Envers afin de faire de l'audit de modifications sur une base de données. L'article étant de qualité, simple, clair et concis, cela vaut le coup d'être souligné et lu.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://marakana.com/forums/hibernate/general/115.html" target="_blank"&gt;http://marakana.com/forums/hibernate/general/115.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bonne lecture&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6114392173579564075?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6114392173579564075/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6114392173579564075&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6114392173579564075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6114392173579564075'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2010/05/hibernate-et-envers-laudit-des.html' title='Hibernate et Envers: L&apos;audit des modifications avec Hibernate'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6760930297793084356</id><published>2010-05-17T23:47:00.002+02:00</published><updated>2010-05-17T23:54:03.525+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Tutoriel : Load balancing avec Apache et Tomcat</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;26/09/2008&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.1.0&lt;/td&gt;&lt;td&gt;17/05/2010&lt;/td&gt;&lt;td&gt;Mise à jour de l'article nouvelle façon de configurer apache2 depuis la version 2.1.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;br /&gt;I - Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;"&gt;I-1 - Présentation&lt;/span&gt;&lt;br /&gt;Lors de la mise en production d'une application internet ou intranet, il est fréquent de vouloir mettre en frontal un Apache HTTP Server devant un Tomcat. Cela permet une integration plus aisée et plus flexible que la simple utilisation d'un Tomcat. En effet, cela permet d'utiliser pleins de fonctionnalités d'Apache:&lt;ul&gt;&lt;li&gt;Re-écriture d'URLs;&lt;/li&gt;&lt;li&gt;Compression des flux HTTP (pour une meilleure performance);&lt;/li&gt;&lt;li&gt;Utilisation des mécanismes de caches HTTP (pour une meilleure performance);&lt;/li&gt;&lt;li&gt;Intégration d'un environnement de répartition de charge "Load Balancing", c'est ce que nous allons voir dans cet article.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;I-2 - Qu'est-ce que le load balancing?&lt;/span&gt;&lt;br /&gt;L'équilibrage de charge (parfois appelé répartition de charge ou en anglais load balancing) consiste à distribuer une tâche à un pool de machines ou de périphériques afin :&lt;ul&gt;&lt;li&gt;de lisser le trafic réseau, c'est-à-dire de répartir la charge globale vers différents équipements;&lt;/li&gt;&lt;li&gt;de s'assurer de la disponibilité des équipements, en n'envoyant des données qu'aux équipements en mesure de répondre, voire à ceux offrant le meilleur temps de réponse.&lt;/li&gt;&lt;/ul&gt;Ce type de mécanisme s'appuie sur un élément, appelé répartiteur de charge (en anglais load balancer) chargé de distribuer le travail entre les différentes machines.&lt;br /&gt;&lt;br /&gt;Les avantages du load balancing sont donc multiples:&lt;ul&gt;&lt;li&gt;Meilleur performance du service demandé: les requêtes sont réparties sur les différentes machines;&lt;/li&gt;&lt;li&gt;Tolérance aux pannes: si un serveur s'arrête, les nouvelles requêtes sont réparties sur le pool de serveurs restant;&lt;/li&gt;&lt;li&gt;Continuité du service en cas de maintenance: si un serveur est arrêté pour être maintenu, les nouvelles requêtes sont réparties sur le pool de serveurs restant en service.&lt;/li&gt;&lt;/ul&gt;L'infrastructure cible de load balancing est la suivante:&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ASMxX831Doo/SNv5Uj3BwqI/AAAAAAAAAbc/aKbPEcMInIY/s1600-h/loadbalancing.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ASMxX831Doo/SNv5Uj3BwqI/AAAAAAAAAbc/aKbPEcMInIY/s320/loadbalancing.png" alt="" id="BLOGGER_PHOTO_ID_5250063922249188002" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Infrastructure avec load balancing&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Attention, il ne faut pas confondre load balancing et clustering. Le load balancing consiste à répartir de la charge de travail sur un pool de serveurs. Le clustering consiste à avoir une réplication de l'état des objets sur tous les noeuds du cluster. Une infrastructure en mode clustering ressemble au schéma suivant:&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_ASMxX831Doo/SNv5oB9r3oI/AAAAAAAAAbk/wvagDnbC1tQ/s1600-h/clustering.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_ASMxX831Doo/SNv5oB9r3oI/AAAAAAAAAbk/wvagDnbC1tQ/s320/clustering.png" alt="" id="BLOGGER_PHOTO_ID_5250064256747691650" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Infrastructure avec load balancing et clustering de sessions&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;II - Configuration utilisée&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour ce tutoriel (mise en place du load balancing sans clustering), voilà la configuration que j'ai utilisée:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 10.4 - &lt;a href="http://www.ubuntu.com/"&gt;http://www.ubuntu.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Apache HTTP Server v2.2.14 - &lt;a href="http://httpd.apache.org/"&gt;http://httpd.apache.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Apache Tomcat v6.0.24 - &lt;a href="http://httpd.apache.org/"&gt;http://tomcat.apache.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;III - Installation&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;III-1 - Installation d'Apache HTTP Server&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lancez l'installation du serveur HTTP: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo apt-get install apache2&lt;/span&gt; (le serveur apache est installé sous &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/apache2&lt;/span&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;III-2 - Installation d'Apache Tomcat&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lancez l'installation de Tomcat: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo apt-get install tomcat6&lt;/span&gt; (le serveur tomcat est installé sous &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/tomcat6&lt;/span&gt;) sur une machine A (dans mon cas 192.168.0.10).&lt;/li&gt;&lt;li&gt;Lancez une seconde fois l'installation de Tomcat: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo apt-get install tomcat6&lt;/span&gt; (le serveur tomcat est installé sous &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/tomcat6&lt;/span&gt;) sur une machine B (dans mon cas 192.168.0.11).&lt;/li&gt;&lt;/ul&gt;Au terme de cette installation, nous avons 2 installations de tomcat, une pour chacun des noeuds du pool de serveurs (sur les machines A et B).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;III-3 - Installation des mods&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo cp /etc/apache2/mods-available/proxy_ajp.load /etc/apache2/mods-enabled/&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;sudo cp /etc/apache2/mods-available/proxy_balancer.load /etc/apache2/mods-enabled/&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;IV - Configuration&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;IV-1 - Configuration du premier noeud tomcat (Machine A)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Editez le fichier &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/tomcat6/server.xml&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;/span&gt;Décommentez le connecteur AJP: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;connector port="8009" protocol="AJP/1.3" redirectport="8443"&gt;&lt;/connector&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Positionner l'attribut &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;jvmRoute &lt;/span&gt;de l'élément Engine à &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;node1&lt;/span&gt;: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;engine name="Catalina" defaulthost="localhost" jvmroute="node1"&gt;&lt;/engine&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Sauvegardez et fermez.&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;connector port="8009" protocol="AJP/1.3" redirectport="8443"/&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;engine name="Catalina" defaulthost="localhost" jvmroute="node1"&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;&lt;/engine&gt;&lt;/connector&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;server.xml (Machine A)&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;IV-2 - Configuration du second noeud tomcat (Machine B)&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Editez le fichier &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/etc/tomcat6/server.xml&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;Décommentez le connecteur AJP: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;connector port="8009" protocol="AJP/1.3" redirectport="8443"&gt;&lt;/connector&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;span class="Apple-style-span"  style=" ;font-family:Georgia, serif;"&gt;Positionner l'attribut &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;jvmRoute &lt;/span&gt;de l'élément Engine à &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;node2&lt;/span&gt;: &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;engine name="Catalina" defaulthost="localhost" jvmroute="node2"&gt;&lt;/engine&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;connector port="8009" protocol="AJP/1.3" redirectport="8443"/&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;engine name="Catalina" defaulthost="localhost" jvmroute="node2"&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;&lt;/engine&gt;&lt;/connector&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;server.xml (Machine B)&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;span style="font-weight: bold;"&gt;IV-3 - Configuration des mods&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Créez un fichier /etc/apache2/mods-enabled/proxy_balancer.conf avec le contenu suivant:&lt;/li&gt;&lt;li&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;Proxy balancer://mycluster&amp;gt;&lt;br /&gt;     BalancerMember ajp://192.168.0.10:8009 min=10 max=100 route=node1 loadfactor=1&lt;br /&gt;     BalancerMember ajp://192.168.0.11:8009 min=10 max=100 route=node2 loadfactor=1&lt;br /&gt;     Order deny,allow&lt;br /&gt;     Allow from all&lt;br /&gt;&amp;lt;/Proxy&amp;gt;&lt;br /&gt;&lt;br /&gt;ProxyPass / balancer://mycluster/&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;proxy_balancer.conf&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;li&gt;Enregistrez et fermez.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;V - Lancement des serveurs et test&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Démarrez votre premier noeud tomcat.&lt;/li&gt;&lt;li&gt;Une fois le premier noeud démarré, il doit être accessible sur l'URL &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://&lt;/span&gt;&lt;hostname&gt;&lt;hostname&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;machine_a:8080&lt;/span&gt; (dans mon cas &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://192.168.0.10:8080&lt;/span&gt;)&lt;br /&gt;&lt;/hostname&gt;&lt;/hostname&gt;&lt;/li&gt;&lt;li&gt;Démarrez votre second noeud tomcat.&lt;/li&gt;&lt;li&gt;Une fois le second noeud démarré, il doit être accessible sur l'URL &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://machine_b&lt;/span&gt;&lt;hostname&gt;&lt;hostname&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;:8080&lt;/span&gt; (dans mon cas &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://192.168.0.11:8080&lt;/span&gt;). Il se peut que le serveur n'arrive pas à démarré si les numéros de port ont mal été configuré et/ou qu'un port déjà ouvert soit utilisé.&lt;br /&gt;&lt;/hostname&gt;&lt;/hostname&gt;&lt;/li&gt;&lt;li&gt;Démarrer ou re-démarrez votre serveur Apache.&lt;/li&gt;&lt;li&gt;Une fois le serveur Apache démarré, il doit être accessible sur l'URL &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://loadbalancer&lt;/span&gt;&lt;hostname&gt; (dans mon cas &lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;http://192.168.0.11&lt;/span&gt; car mon serveur apache se trouve sur la même machine qu'une de mes instances Tomcat) Sur cette URL le contenu du serveur tomcat doit être visible.&lt;/hostname&gt;&lt;/li&gt;&lt;li&gt;Faites des tests en stoppant, un seuveur tomcat (l'application doit toujours être accessible via le second tomcat), puis en stoppant les 2 serveurs tomcat (l'application ne doit plus être accessible), puis redémarrez un tomcat (l'application doit de nouveau être accessible).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;VI - Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les avantages du load balancing sont nombreux: maintenance, continuité du service en cas de panne d'un serveur, répartition de la charge de travail sur les différents serveurs, ...&lt;br /&gt;L'utilisation des sticky sessions (affinité de sessions) implique qu'un utilisateur ayant une session active travaillera toujours avec le même serveur. Cela à l'avantage, d'alléger l'infrastructure car il n'est pas nécessaire de mettre en place du clustering (avec de la réplication de sessions) car c'est lourds à mettre en oeuvre et cela à un cout en terme de réplication de session (surcharge réseau lié à la réplication, plus il y aura de noeuds plus la réplication sera couteuse, ...). Le désavantage est que sans clustering, si un utilisateur travaille avec un serveur et que celui-ci s'arrête (panne, arrêt pour maintenance, ...), l'utilisateur perdra sa session. Cela peut-être problématique pour certaines applications, mais dans la majeur partie des cas cela ne l'est pas. C'est donc à vous de voir en fonction de vos besoins et de vos contraintes.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;VII - Bibliographie&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ubuntu 10.4 - &lt;a href="http://www.ubuntu.com/"&gt;http://www.ubuntu.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ubuntu.com/"&gt;&lt;/a&gt;Apache HTTP Server v2.2.14 - &lt;a href="http://httpd.apache.org/"&gt;http://httpd.apache.org/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Apache Tomcat v6.0.24 - &lt;a href="http://httpd.apache.org/"&gt;http://tomcat.apache.org/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6760930297793084356?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6760930297793084356/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6760930297793084356&amp;isPopup=true' title='7 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6760930297793084356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6760930297793084356'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/09/tutoriel-load-balancing-avec-apache-et.html' title='Tutoriel : Load balancing avec Apache et Tomcat'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_ASMxX831Doo/SNv5Uj3BwqI/AAAAAAAAAbc/aKbPEcMInIY/s72-c/loadbalancing.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3392568560051499385</id><published>2009-04-12T22:56:00.005+02:00</published><updated>2009-04-13T09:57:26.992+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Vertical Scaling vs Horizontal Scaling</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Vertical Scaling&lt;/span&gt;: également connu sous le nom de &lt;span style="font-weight: bold;"&gt;scaling up&lt;/span&gt;, cette technique consiste à ajouter plus de ressources matérielles à la même machine, en général en ajoutant plus de puissance processeurs (CPU) et de mémoire (RAM). Cette solution est :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Chère&lt;/li&gt;&lt;li&gt;Très facile à mettre en œuvre (en général, pas de changement nécessaire dans votre application)&lt;/li&gt;&lt;li&gt;Un seul point de défaillance (si serveur plante, que faire?)&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Horizontal Scaling&lt;/span&gt;: également connu sous le nom de &lt;span style="font-weight: bold;"&gt;scaling out&lt;/span&gt;, cette technique consiste à ajouter plus de machines dans l'infrastructure (architecture), en général en ajoutant du matériel bon marché (comme ce bon vieil ordinateur sous votre bureau). Cette solution est :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Moins couteuse : du moins les dépenses sont plus linéaires&lt;/li&gt;&lt;li&gt;Difficile à mettre en place techniquement parlant (beaucoup plus difficile que la verticale), il faut que l'application supporte cette architecture&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Beaucoup de points de défaillances possibles, il faut traiter élégamment les points de défaillance (avoir de la haute disponibilité avec de la redondance)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Avant de choisir, l'une ou l'autre des solutions, il faut se poser la question de savoir laquelle est la plus rentable. En effet, est-ce que le cout du matériel pour le vertical scaling est plus rentable que le cout d'un ingénieur et de son travail pour mettre en place la solution pour faire fonctionner de façon transparente l'horizontal scaling ? A vous de juger en fonction de vos contraintes (budgétaires ou autres) et de celles de votre projet (contraintes de cout, disponibilité, scaling, ...).&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3392568560051499385?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3392568560051499385/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3392568560051499385&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3392568560051499385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3392568560051499385'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2009/04/vertical-scaling-vs-horizontal-scaling.html' title='Vertical Scaling vs Horizontal Scaling'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6256262160049437348</id><published>2008-10-19T14:07:00.004+02:00</published><updated>2008-10-19T14:16:46.770+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Passage à Ubuntu</title><content type='html'>Je me suis enfin décidé à lâcher mon vieux Windows 2K pour le remplacer par ubuntu et je ne vous cache pas que j'en suis ravi.&lt;br /&gt;&lt;br /&gt;Ubuntu étant un fork de debian, il permet donc d'installer des paquets .deb, mais je suis aggréablement surpris car contrairement à ce que l'on m'avait dit, on peut également installer des .rpm. Afin de faire cela, il suffit d'installer le paquet &lt;a href="http://doc.ubuntu-fr.org/alien"&gt;alien&lt;/a&gt; qui permet la conversion RPM -&gt; DEB et inversement. Alien supporte également d'autres format, il permet aussi d'installer directement des RPM et des DEB.&lt;br /&gt;&lt;br /&gt;La documentation est disponible sur ubuntu : &lt;a href="http://doc.ubuntu-fr.org/alien"&gt;http://doc.ubuntu-fr.org/alien&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6256262160049437348?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6256262160049437348/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6256262160049437348&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6256262160049437348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6256262160049437348'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/10/passage-ubuntu.html' title='Passage à Ubuntu'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7391115130293643507</id><published>2008-08-15T23:13:00.000+02:00</published><updated>2008-08-15T23:17:15.836+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Cours : Design Patterns</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;11/07/2008&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.1&lt;/td&gt;&lt;td&gt;30/07/2008&lt;/td&gt;&lt;td&gt;Ajout du cours sur le design pattern de Singleton.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="vertical-align: top;"&gt;1.0.2&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;15/08/2008&lt;br /&gt;&lt;/td&gt;&lt;td style="vertical-align: top;"&gt;Ajout du cours sur le design pattern de Factory Method&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Ensemble de cours présentant des design patterns accompagné d'exemples illustrés en Java :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Design Patterns créationnel&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Singleton (Singleton) - &lt;a href="http://www.scribd.com/word/full/4258116?access_key=key-2n9voe8bugfyi2v5ifmc"&gt;Voir le cours&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fabrique (Factory Method) - &lt;a href="http://www.scribd.com/word/full/4795167?access_key=key-dinvzqk4mjm70xfrxln"&gt;Voir le cours&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Prototype (Prototype)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Design Patterns structurel&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Adaptateur (Adapter)&lt;/li&gt;&lt;li&gt;Pont (Bridge)&lt;/li&gt;&lt;li&gt;Objet composite (Composite)&lt;/li&gt;&lt;li&gt;Décorateur (Decorator)&lt;/li&gt;&lt;li&gt;Façade (Facade) - &lt;a href="http://www.scribd.com/word/full/2438462?access_key=key-2mz4b3o9hxmfjjiac9a8"&gt;Voir le cours&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Proxy (Proxy)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Design Patterns comportemental&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Chaîne de responsabilité (Chain of responsibility)&lt;/li&gt;&lt;li&gt;Commande (Command)&lt;/li&gt;&lt;li&gt;Observeur (Observer)&lt;/li&gt;&lt;li&gt;Visiteur (Visitor)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;Design Patterns J2EE&lt;/b&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;DAO (Data Access Object) - &lt;a href="http://www.scribd.com/word/full/2438463?access_key=key-3kqu5rclh24kqdez8c1"&gt;Voir le cours&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7391115130293643507?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7391115130293643507/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7391115130293643507&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7391115130293643507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7391115130293643507'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/07/cours-design-patterns.html' title='Cours : Design Patterns'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4465709885788709030</id><published>2008-04-29T13:15:00.001+02:00</published><updated>2008-04-29T16:23:09.101+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Tutoriel : Développer des EJB 3.0</title><content type='html'>Je viens trouver un tutoriel expliquant comment faire des EJBs 3.0. Ayant fait des EJBs 2.0 dans le passé, j'ai trouvé que l'essentiel était présent dans ce tutoriel : &lt;a href="http://www.eclipsetotale.com/articles/Introduction_EJB3_avec_Eclipse.html"&gt;Tutorial : développer des EJB 3 avec Eclipse et JBoss&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Notez que les liens suivants sont aussi pas mal:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://docs.jboss.org/ejb3/app-server/tutorial/"&gt;EJB 3.0 Tutorial&lt;/a&gt; : Tutoriel de JBoss illustrant chacune des fonctionnalités EJB 3.0.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://knotty.developpez.com/j2ee/ejb/"&gt;Patterns J2EE / EJB&lt;/a&gt; : Présente les design patterns J2EE à mettre en œuvre pour faire une application fondée sur des EJBs.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4465709885788709030?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4465709885788709030/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4465709885788709030&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4465709885788709030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4465709885788709030'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/04/tutoriel-dvelopper-des-ejb-30.html' title='Tutoriel : Développer des EJB 3.0'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-2529531452628001108</id><published>2008-04-21T13:32:00.001+02:00</published><updated>2008-04-21T15:56:56.940+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Présentation : XML - Cours sur l'API Java XPath</title><content type='html'>Cours présentant les concepts de l'API XML XPath ainsi que les fonctionnalités de base de cette API.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scribd.com/full/2434000?access_key=key-1s6mmw9hvonvwn7zuxue"&gt;Voir le cours&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-2529531452628001108?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/2529531452628001108/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=2529531452628001108&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2529531452628001108'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2529531452628001108'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/04/prsentation-xml-cours-sur-lapi-java.html' title='Présentation : XML - Cours sur l&apos;API Java XPath'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3524986459552777476</id><published>2008-04-04T13:35:00.000+02:00</published><updated>2008-04-04T13:32:37.588+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Présentation : StAX - Streaming API for XML</title><content type='html'>Présentation des concepts de l'API XML StAX ainsi que les fonctionnalités de base de cette API.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scribd.com/full/2422555?access_key=key-y7a4416xa0vzn47gcd7"&gt;Voir la présentation&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Remarque : Quand j'aurais un peu de temps, j'étofferais cette présentation afin de présenter aussi l'API event et filter de StAX.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3524986459552777476?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3524986459552777476/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3524986459552777476&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3524986459552777476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3524986459552777476'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/04/prsentation-stax-streaming-api-for-xml.html' title='Présentation : StAX - Streaming API for XML'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7855597471994647703</id><published>2008-03-28T19:34:00.002+01:00</published><updated>2008-03-28T18:07:59.455+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='cache'/><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Présentation : Cache Java - Etude des systèmes de cache Java</title><content type='html'>Présentation et étude comparative des principaux systèmes de cache implémentés en Java. L'étude détails les caches cache4j, OSCache, JCS Cache, EHCache et JBoss Cache, puis fournit une synthèse comparative.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scribd.com/full/2357323?access_key=key-2a4pb7reilmjdgejhsst"&gt;Voir la présentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7855597471994647703?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7855597471994647703/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7855597471994647703&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7855597471994647703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7855597471994647703'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/02/prsentation-cache-java-etude-des.html' title='Présentation : Cache Java - Etude des systèmes de cache Java'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8804882436833973133</id><published>2008-03-12T13:16:00.001+01:00</published><updated>2008-03-13T09:55:09.619+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Tips: API Java de connection à un répertoire partagé Windows</title><content type='html'>L'API Java ne permet pas en natif de se connecter à des répertoires partagés windows en utilisant une URL du type &lt;span style="font-family: courier new;"&gt;\\192.168.1.1\shared\dir\file.xml&lt;/span&gt;. Il existe une API Java prévue à cet effet &lt;a href="http://jcifs.samba.org"&gt;JCIFS&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;L'avantage c'est que cette API est simple d'utilisation, l'idée est de créer un objet &lt;span style="font-family: courier new;"&gt;SmbFile&lt;/span&gt;, puis à partir de cet objet, il suffit de récupérer le stream  (&lt;span style="font-family: courier new;"&gt;InputStream&lt;/span&gt; ou &lt;span style="font-family: courier new;"&gt;OutputStream&lt;/span&gt;) nécessaire afin de lire ou bien d'écrire le fichier. Voilà un petit exemple d'illustration montrant comment lire un fichier sécurisé par login et mot de passe:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;String domain = ...;    // Assign domain with targeted domain&lt;br /&gt;String user = ...;      // Assign user with user name&lt;br /&gt;String password = ...;  // Assign password with user password&lt;br /&gt;String url = ...;       // Assign url with smb file url (ie: smb://192.168.1.1/shared/dir/file.xml)&lt;br /&gt;&lt;br /&gt;NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(domain, user, password);&lt;br /&gt;SmbFile smbFile = new SmbFile(url, iAuth);&lt;br /&gt;InputStream is = smbFile.getInputStream();&lt;br /&gt;// Do work with the InputStream&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;TestJcifs.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Pour en savoir plus rendez-vous sur le site officiel de JCIFS : &lt;a href="http://jcifs.samba.org"&gt;http://jcifs.samba.org&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8804882436833973133?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8804882436833973133/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8804882436833973133&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8804882436833973133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8804882436833973133'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/03/tips-api-java-de-connection-un.html' title='Tips: API Java de connection à un répertoire partagé Windows'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1993307132477335079</id><published>2008-02-15T17:39:00.003+01:00</published><updated>2008-02-15T18:02:53.710+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Lire un fichier dans un JAR</title><content type='html'>Il existe plusieurs façons de lire un fichier qui se trouve dans un JAR. La première consiste à utiliser le protocole JAR, la second consiste à utiliser le classpath.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1 - Utilisation du protocole JAR&lt;/span&gt;&lt;br /&gt;La syntaxe d'une URL afin d'utiliser le protocole JAR est la suivante:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;jar:&lt;url&gt;!/{entry}&lt;/url&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Syntaxe d'une URL de JAR&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;L'exemple de code suivant illustre comment utiliser l'API Java afin de lire un fichier contenu dans un JAR.&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;URL url = new URL("jar:file:C:/path/to/my_jar.jar!/path/to/file.xml");&lt;br /&gt;InputStream is = url.openStream();&lt;br /&gt;// ... use the InputStream&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;TestJarProtocol.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Pour plus d'information reportez-vous à la javadoc de la classe &lt;a style="font-family: courier new;" href="http://java.sun.com/j2se/1.5.0/docs/api/java/net/JarURLConnection.html"&gt;java.net.JarURLConnection&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2 - Utilisation du classpath&lt;/span&gt;&lt;br /&gt;Cette technique consiste à profiter du fait que le jar soit dans le classpath de l'application, du coup le fichier est accessible en donnant le path du fichier à l'intérieur du JAR.&lt;br /&gt;&lt;br /&gt;L'exemple de code suivant illustre comment utiliser le classpath pour lire un fichier qui se trouve dans le chemin /path/to/file.xml à l'intérieur du JAR.&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;ClassLoader cl = Thread.currentThread().getContextClassLoader();&lt;br /&gt;cl.getResourceAsStream("/path/to/files.xml");&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;TestClassPath.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Pour plus d'information reportez-vous à la javadoc de la classe &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/index.html?java/lang/ClassLoader.html"&gt;java.lang.ClassLoader&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1993307132477335079?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1993307132477335079/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1993307132477335079&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1993307132477335079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1993307132477335079'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/02/lire-un-fichier-dans-un-jar.html' title='Lire un fichier dans un JAR'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-9181745205910091818</id><published>2008-02-15T13:02:00.002+01:00</published><updated>2008-02-15T14:25:29.931+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Différences entre String, StringBuffer et StringBuilder</title><content type='html'>&lt;p&gt;Pour un développeur Java confirmé les différences sont évidente en revanche pour un développeur Java junior, c'est n'est pas évident. Voilà donc une petite explication rapide.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Un objet de type &lt;span style="font-family:courier new;"&gt;String&lt;/span&gt; est un objet non mutable tandis qu'un objet de type &lt;span style="font-family:courier new;"&gt;StringBuffer&lt;/span&gt; et &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; est mutable (sa valeur peut changer au cours du temps).&lt;/p&gt;  &lt;p&gt;La seule différence qui existe entre un objet de type &lt;span style="font-family:courier new;"&gt;StringBuffer&lt;/span&gt; et &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; est qu'un objet de type &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; n'est pas synchronisé alors que &lt;span style="font-family:courier new;"&gt;StringBuffer&lt;/span&gt; est synchronisé. Il en résulte donc qu'une application qui n'a pas le besoin d'un environnement multi-threadé peut utiliser &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; pour avoir de meilleure performance. En effet &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; est plus efficace que &lt;span style="font-family:courier new;"&gt;StringBuffer&lt;/span&gt;.&lt;/p&gt;&lt;p&gt;Notez que &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; a été introduit à partir du JDK5.0, donc si vous êtes en JDK inférieur, vous ne pouvez pas utiliser cette classe.&lt;br /&gt;&lt;/p&gt;   &lt;p&gt;Critère de sélection entre &lt;span style="font-family:courier new;"&gt;String&lt;/span&gt;, &lt;span style="font-family: courier new;"&gt;StringBuffer&lt;/span&gt; et &lt;span style="font-family: courier new;"&gt;StringBuilder&lt;/span&gt;:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Si votre chaine de caractères ne va pas changer, utilisez la classe String parce qu'un objet de type &lt;span style="font-family: courier new;"&gt;String&lt;/span&gt; est un objet non mutable.&lt;/li&gt;&lt;li&gt;Si votre chaine de caractères va changer et est accédée par un seul thread, utilisez &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; parce que &lt;span style="font-family:courier new;"&gt;StringBuilder&lt;/span&gt; n'est pas synchronisé et sera donc plus rapide que &lt;span style="font-family: courier new;"&gt;StringBuffer&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;Si votre chaine de caractères va changer et est accédée par plusieurs threads, utilisez &lt;span style="font-family: courier new;"&gt;StringBuffer&lt;/span&gt; parce que &lt;span style="font-family: courier new;"&gt;StringBuffer&lt;/span&gt; est synchronisé.&lt;/li&gt;&lt;/ol&gt;Pour plus d'informations sur ces 3 classes, reportez-vous à la javadoc du JDK pour chacune des classes.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-9181745205910091818?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/9181745205910091818/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=9181745205910091818&amp;isPopup=true' title='10 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9181745205910091818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9181745205910091818'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/02/diffrences-entre-string-stringbuffer-et.html' title='Différences entre String, StringBuffer et StringBuilder'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8550034791168370902</id><published>2008-01-31T18:59:00.000+01:00</published><updated>2008-01-31T18:09:57.519+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sécurité'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Sécurité Web : 3 erreurs à éviter</title><content type='html'>Voilà un article très intéressant détaillant 3 failles de sécurités qui peuvent être rencontrées dans des applications Web : &lt;a href="http://www.fdeshayes.net/index.php?2008/01/06/166-securite-web-petit-tour-d-horizon" lang="fr"&gt;Sécurité Web : petit tour d'horizon&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ces 3 failles de sécurités à garder à l'esprit lors du développement d'applications Web sont les suivantes :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;L'injection de SQL&lt;/li&gt;&lt;li&gt;XSS - Cross Site Scripting&lt;/li&gt;&lt;li&gt;CSRF - Cross Site Request Forgery&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8550034791168370902?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8550034791168370902/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8550034791168370902&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8550034791168370902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8550034791168370902'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/01/scurit-web-3-erreurs-viter.html' title='Sécurité Web : 3 erreurs à éviter'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5850052837363139644</id><published>2008-01-11T12:54:00.000+01:00</published><updated>2008-01-11T12:00:23.818+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Tuning du Garbage Collector</title><content type='html'>La configuration de votre garbage collector peut impacter ou bien si il est bien configuré améliorer les performances de votre application. Afin de mieux comprendre comme il fonctionne et qu'elles options utiliser pour le configuer convenablement, je vous recommande la documentation officielle de Sun &lt;a href="http://java.sun.com/docs/hotspot/gc1.4.2/"&gt;Tuning Garbage Collection with the 1.4.2 Java[tm] Virtual Machine&lt;/a&gt;, ou alors pour les plus paresseux un résumé du même article contenant uniquement l'essentiel &lt;a href="http://www.petefreitag.com/articles/gctuning/"&gt;Tuning Garbage Collection Outline&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5850052837363139644?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5850052837363139644/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5850052837363139644&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5850052837363139644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5850052837363139644'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2008/01/tuning-du-garbage-collector.html' title='Tuning du Garbage Collector'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3246444781600174652</id><published>2007-12-18T16:22:00.000+01:00</published><updated>2007-12-18T22:55:27.664+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Firefox : Changer de profil</title><content type='html'>Un profil Firefox stocke différentes informations tels que vos bookmarks, votre configuration de connection (nom et port du proxy, ...), vos mots de passe enregistrés, vos extensions, ... bref toute la configuration de votre navigateur favoris.&lt;br /&gt;&lt;br /&gt;Avec Firefox, il est donc possible d'avoir plusieurs profils et d'ouvrir Firefox avec le profil qui vous intéresse. A quoi cela peut-il bien servir allez-vous me dire ? Eh bien je vous répond que cela peut servir à avoir un Firefox customisé pour tester les applications web que vous développez sans avoir à modifier le profil par défaut ('&lt;span style="font-family:courier new;"&gt;default&lt;/span&gt;') de votre navigateur que vous utilisez pour browser le web et faire du googling. Par exemple, imaginer que vous avez besoin de tester votre application web avec une certaine version du plugin acrobat pour afficher du PDF ou bien avec une version de flash qui est différente de celle que vous avez installée sur votre Firefox. Vous souhaitez donc faire votre test mais sans pour autant modifier votre profil navigateur par défaut car vous avez la toute dernière version de flash, d'acrobat, ... et des extensions Firefox à gogo (weather, ...).&lt;br /&gt;&lt;br /&gt;Une situation dans laquelle je me suis trouvée était la suivante, pour faire de tests de charge, l'outils que j'utilise fournis un proxy virtuel par lequel je dois passer afin que l'outils acquière le scénario de test, or je ne voulais pas changer ma configuration de connection au proxy. Du coup, je me suis crée un profil pour faire cela. Comme ça, une fois le scenario acquis, il n'y plus qu'a supprimer le profil (ou bien à le conserver pour une futur utilisation) et hop, je n'ai pas touché à la configuration de mon profil par défaut. J'ai ainsi 2 environnements Firefox un pour faire du googling et un autre pour les acquisitions de tests de montée en charge, rien n'empêche d'en avoir d'autres.&lt;br /&gt;&lt;br /&gt;Pour ouvrir le gestionnaire de profils, il faut exécuter les actions suivantes :&lt;ol&gt;&lt;li&gt;Démarrer -&gt; Exécuter ...&lt;/li&gt;&lt;li&gt;Saisissez la commande &lt;span style="font-family:courier new;"&gt;firefox.exe -ProfileManager&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Le gestionnaire de profil s'ouvre, cliquez sur &lt;span style="font-family:courier new;"&gt;Créer un profil ...&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ASMxX831Doo/R2g--yoZhRI/AAAAAAAAAV4/5ZsSbgtw9GA/s1600-h/FF_ProfileManager_01.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_ASMxX831Doo/R2g--yoZhRI/AAAAAAAAAV4/5ZsSbgtw9GA/s320/FF_ProfileManager_01.jpg" alt="" id="BLOGGER_PHOTO_ID_5145431822734820626" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Le wizard de création de profils s'ouvre et cliquez sur le bouton &lt;span style="font-family:courier new;"&gt;Suivant &gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ASMxX831Doo/R2g_YSoZhSI/AAAAAAAAAWA/38mxAZpTyvQ/s1600-h/FF_ProfileManager_02.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_ASMxX831Doo/R2g_YSoZhSI/AAAAAAAAAWA/38mxAZpTyvQ/s320/FF_ProfileManager_02.jpg" alt="" id="BLOGGER_PHOTO_ID_5145432260821484834" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Saisissez un nom de profil et cliquez sur le bouton &lt;span style="font-family:courier new;"&gt;Terminer&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ASMxX831Doo/R2g_uCoZhTI/AAAAAAAAAWI/CAe0rZgRjSs/s1600-h/FF_ProfileManager_03.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ASMxX831Doo/R2g_uCoZhTI/AAAAAAAAAWI/CAe0rZgRjSs/s320/FF_ProfileManager_03.jpg" alt="" id="BLOGGER_PHOTO_ID_5145432634483639602" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Sélectionnez le nouveau profil dans la liste, puis cliquez sur le bouton &lt;span style="font-family:courier new;"&gt;Démarrer Firefox&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ASMxX831Doo/R2g_-CoZhUI/AAAAAAAAAWQ/C5QSXU_N4YU/s1600-h/FF_ProfileManager_04.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ASMxX831Doo/R2g_-CoZhUI/AAAAAAAAAWQ/C5QSXU_N4YU/s320/FF_ProfileManager_04.jpg" alt="" id="BLOGGER_PHOTO_ID_5145432909361546562" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Votre firefox utilisant le nouveau profil s'ouvre, enjoy it.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;"&gt;Notes:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Afin d'ouvrir le gestionnaire de profil ou bien de changer de profil, il faut que toutes les instances de Firefox soient fermées.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Si vous souhaitez que Firefox vous demande de choisir le profil à chaque nouveau démarrage, décocher la case "&lt;span style="font-family:courier new;"&gt;Ne pas demander au démarrage&lt;/span&gt;".&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3246444781600174652?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3246444781600174652/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3246444781600174652&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3246444781600174652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3246444781600174652'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/12/firefox-changer-de-profil.html' title='Firefox : Changer de profil'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_ASMxX831Doo/R2g--yoZhRI/AAAAAAAAAV4/5ZsSbgtw9GA/s72-c/FF_ProfileManager_01.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7021573763963774059</id><published>2007-12-06T22:39:00.000+01:00</published><updated>2007-12-07T00:03:45.216+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Créer un fichier MANIFEST.MF avec Maven 2</title><content type='html'>Créer un fichier MANIFEST.MF avec Maven 2 est très simple, il sufflit juste de déclarer le plugin jar et de définir la configuration de ce plugin. Chaque sous-tags de manifestEntries sera une clé du manifeste ayant pour valeur le contenu de ce sous-tag. Par exemple le fragment de pom.xml suivant:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&amp;lt;build&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;    &amp;lt;plugins&amp;gt;&lt;br /&gt;        &amp;lt;plugin&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;org.apache.maven.plugins&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;maven-jar-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;            &amp;lt;configuration&amp;gt;&lt;br /&gt;                &amp;lt;archive&amp;gt;&lt;br /&gt;                    &amp;lt;manifestEntries&amp;gt;&lt;br /&gt;                        &amp;lt;Specification-Title&amp;gt;J2EE Servlet&amp;lt;/Specification-Title&amp;gt;&lt;br /&gt;                        &amp;lt;Specification-Version&amp;gt;2.4&amp;lt;/Specification-Version&amp;gt;&lt;br /&gt;                        &amp;lt;Specification-Vendor&amp;gt;Sun Microsystems&amp;lt;/Specification-Vendor&amp;gt;&lt;br /&gt;                        &amp;lt;Implementation-Title&amp;gt;${pom.name}&amp;lt;/Implementation-Title&amp;gt;&lt;br /&gt;                        &amp;lt;Implementation-Version&amp;gt;${pom.version}&amp;lt;/Implementation-Version&amp;gt;&lt;br /&gt;                        &amp;lt;Implementation-Vendor&amp;gt;${pom.organization.name}&amp;lt;/Implementation-Vendor&amp;gt;&lt;br /&gt;                        &amp;lt;Built-By&amp;gt;lbert&amp;lt;/Built-By&amp;gt;&lt;br /&gt;                        &amp;lt;Implementation-URL&amp;gt;${pom.url}&amp;lt;/Implementation-URL&amp;gt;&lt;br /&gt;                    &amp;lt;/manifestEntries&amp;gt;&lt;br /&gt;                &amp;lt;/archive&amp;gt;&lt;br /&gt;            &amp;lt;/configuration&amp;gt;&lt;br /&gt;        &amp;lt;/plugin&amp;gt;&lt;br /&gt;    &amp;lt;/plugins&amp;gt;&lt;br /&gt;    ...&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;pom.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Va générer le manifeste suivant dans le jar lors de la génération de celui-ci:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;Manifest-Version: 1.0&lt;br /&gt;Archiver-Version: Plexus Archiver&lt;br /&gt;Created-By: Apache Maven&lt;br /&gt;Build-Jdk: 1.6.0&lt;br /&gt;Built-By: lbert&lt;br /&gt;Implementation-Title: Commons Filters&lt;br /&gt;Implementation-URL: http://ludovic.bert.free.fr/projects/commons-filters&lt;br /&gt;Implementation-Vendor: The Commons Filters Team&lt;br /&gt;Implementation-Version: 1.0.0M1-dev&lt;br /&gt;Specification-Title: J2EE Servlet&lt;br /&gt;Specification-Vendor: Sun Microsystems&lt;br /&gt;Specification-Version: 2.4&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;META-INF/MANIFEST.MF&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Pour ceux qui ne savent pas ce qu'est un manifest, référrez-vous à la spécification des fichiers Jar de Sun : &lt;a href="http://java.sun.com/j2se/1.4.2/docs/guide/jar/jar.html"&gt;JAR File Specification&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7021573763963774059?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7021573763963774059/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7021573763963774059&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7021573763963774059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7021573763963774059'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/12/crer-un-fichier-manifestmf-avec-maven-2.html' title='Créer un fichier MANIFEST.MF avec Maven 2'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7094474054429939695</id><published>2007-11-30T22:56:00.000+01:00</published><updated>2007-11-30T23:00:30.708+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Hébergement SVN + Issue Tracking = Google Code Hosting</title><content type='html'>Dans un de mes billets précédents, je vous avez parlé d'assembla (&lt;a href="http://java4it.blogspot.com/2007/01/hbergement-svn-trac-assembla.html"&gt;Hébergement SVN + TRAC = assembla&lt;/a&gt;) mais j'avais oublié de parler d'un hébergement similaire : &lt;a href="http://code.google.com/hosting/"&gt;Google Code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;J'en profite également pour donner une petite comparaison de ces deux hébergements:&lt;br /&gt;&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Fonctionalité&lt;/th&gt;&lt;th&gt;&lt;a href="http://www.assembla.com/"&gt;Assembla&lt;/a&gt;&lt;/th&gt;&lt;th&gt;&lt;a href="http://code.google.com/hosting/"&gt;Google Code&lt;/a&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Outils de gestion de configuration&lt;br /&gt;&lt;/td&gt;&lt;td&gt;SVN&lt;/td&gt;&lt;td&gt;SVN&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Outils de gestion de bugs&lt;/td&gt;&lt;td&gt;TRAC&lt;/td&gt;&lt;td&gt;Solution Google&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Wiki&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Download de fichiers (sources et/ou binaires)&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Console d'administration&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Taille de l'équipe de développement&lt;/td&gt;&lt;td&gt;Illimitée&lt;/td&gt;&lt;td&gt;???&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Chat&lt;/td&gt;&lt;td&gt;Oui&lt;/td&gt;&lt;td&gt;Non&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Quota&lt;/td&gt;&lt;td&gt;&lt;span style="text-decoration: line-through;"&gt;200Mo&lt;/span&gt; 500Mo&lt;br /&gt;&lt;/td&gt;&lt;td&gt;100 Mo&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Je concluerais en disant donc que ces deux solutions sont très similaires, mais j'accode plus de crédit à la solution Google car cette société fait preuve de beaucoup de sérieux et compétences. Concernant assembla, je connais moins la société pour ne pas dire pas du tout.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7094474054429939695?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7094474054429939695/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7094474054429939695&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7094474054429939695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7094474054429939695'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/hbergement-svn-issue-tracking-google.html' title='Hébergement SVN + Issue Tracking = Google Code Hosting'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7419317674002579203</id><published>2007-11-13T22:32:00.000+01:00</published><updated>2007-11-13T22:34:56.825+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Optimisation : Améliorer le chargement des pages Web</title><content type='html'>Je viens de tomber sur un article d'Ajaxian qui reprend plusieurs thèmes que j'ai déjà abordés dans différents posts de mon blog (&lt;a href="http://ajaxian.com/archives/how-to-minimize-your-javascript-and-css-files-for-faster-page-loads"&gt;How to Minimize Your Javascript and CSS Files for Faster Page Loads&lt;/a&gt;). D'après ce que l'on a pu me demander à plusieurs reprises, c'est est-ce que ces techniques apportent une amélioration visible sur les performances de rendering de l'application Web. Le problème, c'est que je n'ai jamais essayé de quantifier le gain en terme de temps de réponse afin de voir quel est l'ordre de grandeur du gain de temps. Si Ajaxian en parle, c'est bien qu'il doit y avoir un intérêt significatif. &lt;span style="font-style: italic;"&gt;Je suis très occupé mais il faudrait que je prenne le temps d'étudier cela et de vous faire partager mes réponses à ce sujet.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dans plusieurs de mes posts, j'ai déjà parlé de différentes techniques pour optimiser le rendering des applications Web (qui sont également présenté dans le post d'Ajaxian). Voilà la synthèse afin d'y voir un peu plus clair. Je dénombre pour le moment 4 techniques qui peuvent être utilisées simultanément :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;La &lt;a href="http://java4it.blogspot.com/2007/08/outils-de-compression-pour-les.html"&gt;compression de CSS et de JavaScript&lt;/a&gt; : C'est une technique bien connue qui consiste à compresser les CSS et les JavaScript afin de diminuer le poids des fichiers à récupérer.&lt;/li&gt;&lt;li&gt;L'utilisation de &lt;a href="http://java4it.blogspot.com/2007/10/css-sprite-generator-pour-loptimisation.html"&gt;Sprites&lt;/a&gt; : C'est une technique qui à l'origine était utilisée dans les jeux vidéos pour le chargement d'images et d'animations. Cette technique consiste à regrouper dans un fichier (le sprite), un ensemble d'images et de n'afficher qu'une partie du sprite afin d'économiser des requêtes HTTP, et donc du temps (notamment les temps de latence).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;L'utilisation du &lt;a href="http://www.onjava.com/pub/a/onjava/2003/11/19/filters.html"&gt;GZIP Filter&lt;/a&gt; : Cette technique consiste à regarder dans les en-têtes HTTP client si le navigateur client supporte le GZIP, si tel est le cas le serveur doit gzipper les réponses qui seront envoyées au client. Cela permet ainsi d'alléger encore un peu le poids de la réponse. Notez qu'il faut faire attention de ne pas compresser les réponses dont le gain en compression est quasi nul, car le temps va être consommé pour compresser la réponse, mais il n'y aura quasiement aucun gain en transfert, sur de petites réponses par exemple, dont la taille compressée et + ou - égale à la taille originale.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;L'utilisation du cache navigateur &lt;a href="http://flavio.tordini.org/http-headers-filter/"&gt;HTTP Headers Filter&lt;/a&gt; : Pensez aussi à jouer avec les en-têtes HTTP "Expires" et "Last-Modified" afin de conserver les ressources (images, CSS, JavaScript) dans le cache navigateur.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pour terminer, je dirais qu'il faut surtout économiser le nombre sous-requêtes HTTP induites par la page Web (images, CSS, JavaScript), qui peuvent dégrader énormément les performances de rendering.&lt;br /&gt;&lt;br /&gt;L'utilisation de YSlow est très formateur et permet de diagnostiquer les problèmes de performances de votre application Web. YSlow donne également pas mal de recommandations supplémentaires très intéressantes : &lt;a href="http://developer.yahoo.com/performance/rules.html"&gt;http://developer.yahoo.com/performance/rules.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7419317674002579203?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7419317674002579203/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7419317674002579203&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7419317674002579203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7419317674002579203'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/11/optimisation-amliorer-le-chargement-des.html' title='Optimisation : Améliorer le chargement des pages Web'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4611187076104809019</id><published>2007-11-03T14:50:00.000+01:00</published><updated>2007-11-03T14:58:30.809+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>RAP : Rich Ajax Platform</title><content type='html'>Le projet &lt;a href="http://www.eclipse.org/rap/"&gt;RAP&lt;/a&gt; permet aux développeurs de créer des applications riches web et Ajax en utilisant le modèle de développement d'eclipse : plug-ins, point d'extension du workbench Eclipse, Face, widget SWT.&lt;br /&gt;&lt;br /&gt;RAP essaye de tirer profit à la fois des avantages du développement Java et du principe de développement à base de plug-ins.&lt;br /&gt;&lt;br /&gt;Pour avoir plus d'information consultez : &lt;a href="http://www.eclipse.org/rap/about.php"&gt;http://www.eclipse.org/rap/about.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4611187076104809019?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4611187076104809019/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4611187076104809019&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4611187076104809019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4611187076104809019'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/11/rap-rich-ajax-platform.html' title='RAP : Rich Ajax Platform'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1770515955712500836</id><published>2007-11-01T18:40:00.000+01:00</published><updated>2007-11-03T14:50:21.868+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>SWFUpload : Un file upload avancé</title><content type='html'>Lars Huring et son équipe a crée &lt;a title="Aller sur le site de SWFUpload" target="_blank" href="http://labb.dev.mammon.se/swfupload/" id="z7gn"&gt;SWFUpload&lt;/a&gt;, une petite librairie JavaScript/Flash qui permet d'implémenter de façon plus complète les possibilités de file upload via le web.&lt;br /&gt;&lt;br /&gt;Cette librairie permet :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;De spécifier quels types de fichiers sont affichés dans la boîte de dialogue d'upload.&lt;/li&gt;&lt;li&gt;D'effectuer des sélections multiples de fichiers via le ctrl/shit-clic.&lt;/li&gt;&lt;li&gt;D'obtenir des informations sur la taille et autre des fichiers à uploader.&lt;/li&gt;&lt;li&gt;De styler les boutons d'upload en utilisant HTML et CSS.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Au cas où JavaScript et/ou Flash n'est pas installé sont fonctionnement est dégradé en champs HTML standard de file upload.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1770515955712500836?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1770515955712500836/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1770515955712500836&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1770515955712500836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1770515955712500836'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/11/lars-huring-et-son-quipe-cre-swfupload.html' title='SWFUpload : Un file upload avancé'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6002025663546345659</id><published>2007-10-11T21:49:00.001+02:00</published><updated>2008-03-28T18:06:28.640+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Présentation : Hibernate - Tuning de performances</title><content type='html'>Présentation des fonctionnalités avancées de hibernate permettant d'optimiser et de customiser les performances d'une application utilisant hibernate.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scribd.com/full/2366046?access_key=key-1dbcc8q7r2pdu7lkxb8n"&gt;Voir la présentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6002025663546345659?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6002025663546345659/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6002025663546345659&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6002025663546345659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6002025663546345659'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/10/prsentation-hibernate-tuning-de.html' title='Présentation : Hibernate - Tuning de performances'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-2866618616607399279</id><published>2007-10-11T21:31:00.001+02:00</published><updated>2008-03-28T18:07:27.061+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='base documentaire'/><title type='text'>Présentation : Hibernate - Outil de Mapping Objet Relationnel</title><content type='html'>Présentation des concepts des outils de mapping objet relationnel ainsi que les fonctionalités de base de hibernate.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.scribd.com/full/2366029?access_key=key-1be2eecxp6opyx5bqnyz"&gt;Voir la présentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-2866618616607399279?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/2866618616607399279/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=2866618616607399279&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2866618616607399279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2866618616607399279'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/10/hibernate.html' title='Présentation : Hibernate - Outil de Mapping Objet Relationnel'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-2884799333335819232</id><published>2007-10-01T22:25:00.000+02:00</published><updated>2007-10-01T22:28:46.794+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>CSS Sprite Generator : pour l'optimisation du rendering des applications web</title><content type='html'>&lt;a href="http://muffinresearch.co.uk/archives/2007/09/27/css-sprite-generator-tool/"&gt;Stuart Collville&lt;/a&gt; et &lt;a href="http://www.ejeliot.com/blog/112"&gt;Ed Eliot&lt;/a&gt; viennent juste de un nouvel outils "&lt;a href="http://spritegen.website-performance.org/"&gt;CSS Sprite Generator&lt;/a&gt;", qui est le premier d'une longue série d'outils d'amélioration de performances des applications Web.&lt;br /&gt;&lt;br /&gt;Pour les novices un CSS &lt;a href="http://fr.wikipedia.org/wiki/Sprite"&gt;Sprite&lt;/a&gt; est un seul fichier image qui contient plusieurs graphiques (comme par exemple les boutons d'une barre d'outils). En utilisant la propriété CSS background-position, il est possible d'afficher un graphique parmis l'ensemble de graphiques du Sprite. Le fait d'utiliser un Sprite, il en résulte donc que vous éviter de faire des requêtes HTTP, économisant ainsi du temps lors de l'étape de rendering de la page Web car il n'y aura qu'une requête HTTP pour récupérer le Sprite.&lt;br /&gt;&lt;br /&gt;L'outils CSS Sprite Generator vous permet d'uploader un zip contenant vos images, puis concatène toutes les images en une seule image afin d'être utilisé dans un CSS Sprite. L'outils génère aussi un CSS pour chaque image et calculer le bon background-position de chaque image du Sprite.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-2884799333335819232?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/2884799333335819232/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=2884799333335819232&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2884799333335819232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2884799333335819232'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/10/css-sprite-generator-pour-loptimisation.html' title='CSS Sprite Generator : pour l&apos;optimisation du rendering des applications web'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-930841044945722536</id><published>2007-09-26T07:06:00.000+02:00</published><updated>2007-09-25T23:52:57.410+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel : Jakarta Commons EL (Javakarta Commons Expression Language)</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;26/09/2006&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;I - Introduction&lt;/span&gt;&lt;br /&gt;&lt;a href="http://commons.apache.org/el/"&gt;Jakarta Commons EL (Jakarta Expression Language)&lt;/a&gt; est l'interpréteur d'expressions JSP 2.0 d'Apache. Il permet de parser des expressions en langage JSP 2.0 et de les évaluer. L'utilisation de Jakarta Commons EL permet d'utiliser le formalisme d'expression JSP 2.0 pour évaluer des expressions en Java. En d'autres termes, il est possible d'utiliser Jakarta Commons EL dans des applications Java pour évaluer des expressions respectant la syntaxe JSP 2.0 (la spécification EL de JSTL).&lt;br /&gt;&lt;br /&gt;Par exemple les expressions suivantes peuvent être évaluées dans des applications Java à l'aide de Jakarta Commons EL:&lt;br /&gt;&lt;ul style="font-family: courier new;"&gt;&lt;li&gt;${bean.intProperty + 10}&lt;br /&gt;&lt;/li&gt;&lt;li&gt;${bean.property}&lt;/li&gt;&lt;li&gt;...&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;II - Installation&lt;/span&gt;&lt;br /&gt;L'installation de commons-el est très simple, il sufflit de télécharger le jar &lt;span style="font-family:courier new;"&gt;commons-el-x.x.x.jar&lt;/span&gt; de Jakarta Commons EL et de le mettre dans votre répertoire lib.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;III - Utilisation - Evaluation d'une expression&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Imaginons que nous ayons une instance d'objet &lt;span style="font-family:courier new;"&gt;Date&lt;/span&gt; bindé sous le nom &lt;span style="font-family:courier new;"&gt;now&lt;/span&gt; et que souhaitons avoir le temps en millisecondes de cette &lt;span style="font-family:courier new;"&gt;Date&lt;/span&gt; plus 60 000 ms (1 min) via une expression EL.&lt;br /&gt;&lt;br /&gt;L'évaluation de l'expression se fera de la façon suivante:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;    // Get expression&lt;br /&gt;   String expression = "${now.time + 1000 * 60}";&lt;br /&gt;&lt;br /&gt;   // Create expression evaluator&lt;br /&gt;   ExpressionEvaluator exprEvaluator = new ExpressionEvaluatorImpl();&lt;br /&gt;&lt;br /&gt;   // Create the variable resolver&lt;br /&gt;   VariableResolver variableResolver = new VariableResolverImpl();&lt;br /&gt;&lt;br /&gt;   // Evaluate EL expression&lt;br /&gt;   Long value;&lt;br /&gt;   try {&lt;br /&gt;       value = (Long) exprEvaluator.evaluate(expression, Long.class, variableResolver, null);&lt;br /&gt;   } catch (ELException e) {&lt;br /&gt;       // TODO - handle exception&lt;br /&gt;   }&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Main.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Le variable resolver est une classe permettant de mapper le nom de variable &lt;span style="font-family:courier new;"&gt;now&lt;/span&gt; à l'objet Java souhaité dans notre cas c'est la &lt;span style="font-family:courier new;"&gt;Date&lt;/span&gt; courante. Notre variable resolver est donc le suivant:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;    public class VariableResolverImpl implements VariableResolver {&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * The current date variable.&lt;br /&gt;    */&lt;br /&gt;   private final static String VARIABLE_NOW = "now";&lt;br /&gt;&lt;br /&gt;   /**&lt;br /&gt;    * @see javax.servlet.jsp.el.VariableResolver#resolveVariable(String)&lt;br /&gt;    */&lt;br /&gt;   public Object resolveVariable(String variable) throws ELException {&lt;br /&gt;       if (VARIABLE_NOW.equals(variable)) {&lt;br /&gt;           return new Date();&lt;br /&gt;       }&lt;br /&gt;       return null;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;VariableResolverImpl.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;IV - Conclusion&lt;/span&gt;&lt;br /&gt;Il est très simple et très pratique d'utiliser Jakarta Commons EL pour évaluer des expressions dans des applications Java. Le fait d'utiliser Jakarta Commons EL permet de s'affranchir de la complexité du parseur et de l'analyseur syntaxique de l'expression car il est géré par Jakarta Commons EL. Le développeur doit donc uniquement concentrer sont effort sur le mapping entre les nom de variables et les objets associés à ces variables.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;V - Bibliographie&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://commons.apache.org/el/"&gt;Jakarta Commons EL (Jakarta Expression Language)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-930841044945722536?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/930841044945722536/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=930841044945722536&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/930841044945722536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/930841044945722536'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/tutoriel-jakarta-commons-el-javakarta.html' title='Tutoriel : Jakarta Commons EL (Javakarta Commons Expression Language)'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5015633105406190724</id><published>2007-09-24T21:44:00.000+02:00</published><updated>2007-09-24T21:46:49.652+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Librairies Ajax</title><content type='html'>Après 2 ans déjà de Web 2.0, les frameworks AJAX fleurissent de tous les côtés, il serait intéressant de s'arrêter un moment pour faire le tri et comparer uniquement les plus prometteurs et les plus ambitieux.&lt;br /&gt;&lt;br /&gt;Je fournis donc ici une liste des frameworks AJAX qui valent le coup d'être étudiés :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://dojotoolkit.org/"&gt;Dojo&lt;/a&gt; (&lt;a href="http://dojotoolkit.org/demos"&gt;Les exemples de démons Dojo&lt;/a&gt;) : On lui reproche souvent d'être lourd à charger, mais dojo offre un panel complet de widgets, le support d'AJAX, et il offre également la possibilité de développer des applications offline.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developer.yahoo.com/yui/"&gt;Yahoo UI&lt;/a&gt; (&lt;a href="http://developer.yahoo.com/yui/examples/"&gt;Les exemples de démos YUI&lt;/a&gt;): C'est la bibliothèque de widget développé par yahoo pour ses applications tel que son web mail, ses widget supportent un mécanisme de skin, et AJAX.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://extjs.com/"&gt;Ext&lt;/a&gt; (&lt;a href="http://extjs.com/playpen/ext-2.0-dev5/examples/"&gt;Les exemples de démos Ext v2.0&lt;/a&gt;): C'est une nouvelle librairie AJAX. Je suis bluffé par le rendu de cette librairies.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5015633105406190724?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5015633105406190724/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5015633105406190724&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5015633105406190724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5015633105406190724'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/librairies-ajax.html' title='Librairies Ajax'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4109654429654878539</id><published>2007-09-19T20:21:00.000+02:00</published><updated>2007-09-19T20:23:29.583+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Proximity : Un proxy pour Maven</title><content type='html'>&lt;a href="http://proximity.abstracthorizon.org/"&gt;Proximity&lt;/a&gt; est un proxy pour Maven. Proximity n'est pas un proxy HTTP au pur sens du terme tel que Squid, mais un proxy pour Maven utile dans les réseaux d'entreprise.&lt;br /&gt;&lt;br /&gt;Ce proxy permet de minimiser les téléchargements de dépendences Maven en privilègiant son repository plutôt que les repositories du Web.&lt;br /&gt;&lt;br /&gt;Il permet également de mettre vos propres dépendences telles que vos projets et/ou bibliothèques internes ou encore les jars qui ne sont pas téléchargeables depuis ibiblio comme les jars J2EE (jta.jar, ...) ou bien des librairies payantes.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4109654429654878539?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4109654429654878539/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4109654429654878539&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4109654429654878539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4109654429654878539'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/proximity-un-proxy-pour-maven.html' title='Proximity : Un proxy pour Maven'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1303767176877309674</id><published>2007-09-14T11:17:00.000+02:00</published><updated>2007-09-14T17:16:06.611+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Snap : Tooltips de prévisualisation</title><content type='html'>&lt;a href="http://www.snap.com/"&gt;Snap&lt;/a&gt; permet d'ajouter sur les liens de votre site web et/ou blog un tooltip de prévisualisation permettant de prévisualiser la cible du lien afin d'éviter les clics inutiles. Snap offre un générateur en ligne de tooltips avec plein d'options de paramétrage (couleur du tooltip, langue, taille, comportement, ...).&lt;br /&gt;&lt;br /&gt;Je trouve ce truc tellement pratique et simple d'utilisation que j'en profite pour le mettre sur mon blog.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1303767176877309674?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1303767176877309674/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1303767176877309674&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1303767176877309674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1303767176877309674'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/snap-tooltips-de-prvisualisation.html' title='Snap : Tooltips de prévisualisation'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-419171678897203080</id><published>2007-09-04T12:26:00.000+02:00</published><updated>2007-09-04T11:28:52.063+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Outils de compression pour les applications web</title><content type='html'>De nos jours avec l'installation de plus en plus fréquente d'AJAX dans les applications web, les JavaScript et les CSS permettent en effet de faire des choses de plus en plus complexe. Et cette complexité se retrouve bien évidemment dans la logique des framework AJAX et des librairies JavaScript entrainant ainsi une augmentation de la taille des JavaScript et des CSS à télécharger par le client.&lt;br /&gt;&lt;br /&gt;Afin de limiter le volume des JavaScript et des CSS à télécharger, il est de bonne augure de compresser au maximun ces JavaScript et ces CSS afin de diminuer les temps de téléchargement.&lt;br /&gt;&lt;br /&gt;J'ai donc fais un peu de googling afin de trouver des outils permettant de compresser des JavaScript et des CSS. Parmi, mes recherches voilà les outils que j'ai trouvé et que j'ai retenu comme solution intéressante en terme de compresseurs on-line :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cssdrive.com/index.php/main/csscompressor/"&gt;Compresseur de CSS en ligne (CSS Compressor)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.cleancss.com/"&gt;Compresseur de CSS en ligne (Clean CSS) &lt;/a&gt;: Je préfère Clean CSS à CSS Compressor car Clean CSS log les modifications qu'il effectue comme ça il est toujours possible de corriger les problèmes à la source plus aisément.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://javascriptcompressor.com/"&gt;Compresseur de JavaScript en ligne (Javascript compressor)&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://alex.dojotoolkit.org/shrinksafe/"&gt;Compresseur de JavaScript Dojo en ligne (ShrinkSafe)&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;u&gt;Remarque :&lt;/u&gt; Je vous mets également le compresseur de JavaScript de dojo, même si il n'y a pas d'accès direct on-line. Car il peut-être intéressant dans le cadre d'une génération automatique de WAR de compresser le JavaScript au moment de la génération du WAR : &lt;a href="http://dojotoolkit.org/docs/shrinksafe"&gt;Compresseur de JavaScript de Dojo&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-419171678897203080?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/419171678897203080/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=419171678897203080&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/419171678897203080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/419171678897203080'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/08/outils-de-compression-pour-les.html' title='Outils de compression pour les applications web'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-573568223625611552</id><published>2007-09-03T17:41:00.000+02:00</published><updated>2007-09-03T17:44:50.329+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Ces entreprises et organismes qui modifient Wikipédia dans leur intérêt</title><content type='html'>Comment s'assurer que les informations fournis par Wikipédia sont correct ou tout bonnement non tronquées afin d'induire le lecteur en erreur. Eh bien forcé de constater que c'est impossible. Pour preuve voici quelques exemples bien précis : &lt;a href="http://www.lemonde.fr/web/article/0,1-0@2-651865,36-944852@51-944875,0.html"&gt;http://www.lemonde.fr/web/article/0,1-0@2-651865,36-944852@51-944875,0.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-573568223625611552?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/573568223625611552/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=573568223625611552&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/573568223625611552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/573568223625611552'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/09/ces-entreprises-et-organismes-qui.html' title='Ces entreprises et organismes qui modifient Wikipédia dans leur intérêt'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8783873735931411599</id><published>2007-08-09T09:39:00.000+02:00</published><updated>2007-08-09T09:47:29.596+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ant'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Afficher un path / classpath avec Ant</title><content type='html'>Pour faire cela, il faut utiliser la tâche Ant &amp;lt;pathconvert&amp;gt; de la façon suivante :&lt;br /&gt;&lt;pre&gt;&amp;lt;pathconvert property="my.prop" pathsep=", " refid="project.classpath"/&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ensuite, il suffit d'afficher la propriété :&lt;br /&gt;&lt;pre&gt;&amp;lt;echo message="Classpath: ${my.prop}"/&amp;gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8783873735931411599?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8783873735931411599/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8783873735931411599&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8783873735931411599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8783873735931411599'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/08/afficher-un-path-classpath-avec-ant.html' title='Afficher un path / classpath avec Ant'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-273944014904562521</id><published>2007-07-20T23:51:00.000+02:00</published><updated>2007-07-20T23:54:47.623+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='test'/><title type='text'>Outils de test et de mesure de performances</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;20/07/2007&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Il existe deux familles d'outils de mesure de performance. La première famille regroupe les outils permettant d'injecter de la charge à une application afin de voir comment celle-ci se comporte en cas de stress et d'avoir une vision macroscopique : ce sont les outils de test de charge. La seconde famille regroupe les outils de mesures permettant l'obtention d'indicateurs (temps d'exécution des méthodes, nombre d'appels, nombre d'instance d'objets d'une classe données en mémoire, ...) : ce sont les outils de profiling.&lt;br /&gt;&lt;br /&gt;Dans ce petit post, je vous indique les outils que j'utilise pour faire du test de charge et du profiling d'application Java/Web. Si vous avez d'autres outils très sympatiques, n'hésitez pas à m'en faire part.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Test de charge - Load testing&lt;ul&gt;&lt;li&gt;&lt;a href="http://jakarta.apache.org/jmeter/"&gt;JMeter&lt;/a&gt; : C'est une application 100% Java/Swing et open source permettant de réaliser du test de charge et de faire des mesures de performances. Mon point de vu sur cet outils c'est qu'il est un peu trop simpliste à mon goût, en effet les rapports obtenu avec cet outils me semble peu pertinent et trop simple.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.opensta.org/"&gt;OpenSTA&lt;/a&gt; : C'est une application open source permettant également de réaliser du test de charge et de faire des mesures de performances. Mon point de vu sur cet outils c'est que c'est plus complet que JMeter et les rapport obtenu sont plus pertinents en revanche j'ai pas l'impression que ce projet soit toujours vivant, la dernière version date de mai 2005 et la documentation n'est pas à jour.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.webload.org/"&gt;WebLoad&lt;/a&gt; : C'est une application permettant également de réaliser du test de charge et de faire des mesures de performances. La bonne nouvelle avec cet outils c'est que depuis le 20 juin 2007, il vient de passer dans le monde open source, du coup cela devient intéressant car cet outils est très complet et très professionnel. Pour monter en compétences dessus, en revanche, ce n'est pas tout à fait trivial. &lt;span style="font-style: italic;"&gt;Je recommande vraiment cet outils si vous avez besoin de faire des tests de charge.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Outils de profiling&lt;ul&gt;&lt;li&gt;&lt;a href="http://profiler4j.sourceforge.net/"&gt;Profiler4J&lt;/a&gt; : J'ai lancé cet outils sur mon server JBoss et il a grandiosement planté. J'ai toutefois réussi à le faire marcher avec Tomcat et j'ai eu la désagreable surprise de voir un outils trop léger. Je trouve qu'il n'y a pas grand chose.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jboss.org/wiki/Wiki.jsp?page=JBossProfiler"&gt;JBossProfiler&lt;/a&gt; : Je ne connais pas cet outils car je ne l'ai jamais utilisé, je le mets juste pour information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/tptp/"&gt;TPTP&lt;/a&gt; : C'est le meilleur outils de profiling open source que je connaisse à ce jour. En plus, il est intégré comme plug-in eclipse.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-273944014904562521?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/273944014904562521/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=273944014904562521&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/273944014904562521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/273944014904562521'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/07/outils-de-test-et-de-mesure-de.html' title='Outils de test et de mesure de performances'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4020035062403443023</id><published>2007-07-10T12:10:00.000+02:00</published><updated>2007-07-10T13:59:49.405+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>JAXP - Java API for XML Processing</title><content type='html'>En ce moment, je travaille énormément avec du XML et les API Java relatives à ces traitements XML :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SAX - Simple API for XML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;DOM - Document Object Model&lt;br /&gt;&lt;/li&gt;&lt;li&gt;StAX - Streaming API for XML&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XSL/XSLT - XML Stylesheet Language&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XPath - XML Path&lt;br /&gt;&lt;/li&gt;&lt;li&gt;XInclude - XML Inclusions&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;J'utilise donc à tout bout de champs l'&lt;a href="https://jaxp-sources.dev.java.net/nonav/docs/api/"&gt;API Java&lt;/a&gt; de traitement des fichiers XML (&lt;a href="https://jaxp.dev.java.net/"&gt;JAXP&lt;/a&gt;). Lors de mes différentes recherches je suis tomber par hasard sur un site qui référence les différentes implémentations des API de JAXP : &lt;a href="http://www.edankert.com/jaxpimplementations.html"&gt;http://www.edankert.com/jaxpimplementations.html&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Bibliographie:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;JAXP - &lt;a href="https://jaxp.dev.java.net/"&gt;Site&lt;/a&gt;&lt;/li&gt;&lt;li&gt;JAXP - &lt;a href="https://jaxp-sources.dev.java.net/nonav/docs/api/"&gt;Javadoc&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4020035062403443023?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4020035062403443023/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4020035062403443023&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4020035062403443023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4020035062403443023'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/07/jaxp-java-api-for-xml-processing.html' title='JAXP - Java API for XML Processing'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-2285638082823395024</id><published>2007-06-20T16:42:00.000+02:00</published><updated>2007-06-20T16:48:20.818+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Gestion des exceptions en Java - Eviter les anti-patterns</title><content type='html'>Gérer les exceptions en Java est une chose simple, mais il arrive souvent de voir des développeurs novice faire des erreurs très courantes: catcher une exception et faire un printStackTrace. Des développeurs plus expérimentés oublient quand à eux parfois les erreurs à éviter.&lt;br /&gt;&lt;br /&gt;Voilà donc dans cet article &lt;a href="http://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html"&gt;Exception-Handling Antipatterns&lt;/a&gt;, les erreurs classiques qu'il ne faut pas faire.&lt;br /&gt;&lt;br /&gt;PS: Un grand merci à Igor pour me partager cette lecture très interressante.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-2285638082823395024?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/2285638082823395024/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=2285638082823395024&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2285638082823395024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2285638082823395024'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/06/gestion-des-exceptions-en-java-eviter.html' title='Gestion des exceptions en Java - Eviter les anti-patterns'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-762333407061943642</id><published>2007-06-09T21:28:00.000+02:00</published><updated>2007-06-09T21:33:03.799+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Eclipse 3.2.1 - Out of memory</title><content type='html'>Mon eclipse 3.2.1 était particulièrement instable. Je n’avais pas besoin de faire grand chose pour planter avec un lamentable “Out of memory” java.lang.OutOfMemoryError. Il se bloque et puis il plante à tout moment.&lt;br /&gt;&lt;br /&gt;Pourtant j’avais modifié mon eclipse.ini, afin d'augmenter les tailles mémoires :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-vmargs&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xms512m&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-Xmx1024m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mais cela n'a rien fait. En fait, c’est un autre paramètre qu’il fallait ajouter dans ce fichier de configuration, afin d'augmenter la permanent size :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;-XX:MaxPermSize=256m&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Depuis que j'ai ajouté ce paramètre, cela semble aller beaucoup mieux.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-762333407061943642?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/762333407061943642/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=762333407061943642&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/762333407061943642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/762333407061943642'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/06/eclipse-321-out-of-memory.html' title='Eclipse 3.2.1 - Out of memory'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-9065257966632902601</id><published>2007-06-01T22:29:00.000+02:00</published><updated>2007-06-01T22:30:41.051+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>XInclude - Les inclusions XML</title><content type='html'>XInclude est une spécification du W3C qui spécifie comment doivent être défini et implémenter les inclusions de XML au sein d'un fichier XML.&lt;br /&gt;&lt;br /&gt;Plutôt que de faire de longues explications, je pense qu'un exemple très simple pour illustrer les inclusions XML serait plus parlant.&lt;br /&gt;&lt;br /&gt;En utilisant un parsing avec activation de XInclude, un document XML contenant:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;foo xmlns:xi="http://www.w3.org/2001/XInclude"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xi:include href="bar.xml"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xi:fallback&amp;gt;MISSING XINCLUDE CONTENT&amp;lt;/xi:fallback&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xi:include&amp;gt;&lt;br /&gt;&amp;lt;/foo&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;foo.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Et un autre document contenant:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;bar&amp;gt;...&amp;lt;/bar&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;bar.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Est équivalant à:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&amp;lt;foo xmlns:xi="http://www.w3.org/2001/XInclude"&amp;gt;&lt;br /&gt;&amp;lt;bar&amp;gt;...&amp;lt;/bar&amp;gt;&lt;br /&gt;&amp;lt;/foo&amp;gt;&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;result.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Remarque: Il est aussi possible de passer au tag xinclude un attribut xpointer qui est une expression xpointer (ressemblant à XPath) permettant ainsi d'inclure une partie d'un fichier XML au lieu d'en inclure la totalité.&lt;br /&gt;&lt;br /&gt;En Java, il est possible d'activer ce mécanisme de XInclude par exemple pour faire un parsing DOM et remonter directement l'arbre DOM résultat en déléguant le mécanisme d'inclusion au parseur DOM (Cela marche également avec SAX, mais je n'ai pas eu l'occasion de tester).&lt;br /&gt;&lt;br /&gt;Exemple avec le JDK 1.4.2:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.w3c.dom.Element;&lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;&lt;br /&gt;public class TestXIncludeJdk14 {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;dbf.setNamespaceAware(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dbf.setAttribute("http://apache.org/xml/features/xinclude", Boolean.TRUE);&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DocumentBuilder db = dbf.newDocumentBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Document doc = db.parse("foo.xml");&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Element rootElt = doc.getDocumentElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(rootElt.getNodeName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NodeList childNodes = rootElt.getChildNodes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &lt; childNodes.getLength(); i++) {&lt;br /&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;System.out.println(childNodes.item(i).getNodeName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;TestXIncludeJdk14.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Remarque: Avec le JDK 1.4.2 c'est un peu complexe à mettre en oeuvre car il faut installer une version de Xerces-J supérieure à 2.7.0 car premièrement le parseur par défaut du JDK est crimson qui ne supporte pas les XIncludes, il faut donc installer Xerces-J et deuxièmement, il faut une version supérieure à la 2.7 qui est la première version supportant partiellement les xinclude. Je vous recommande d'utiliser la version la plus récente (la 2.9 au moment où j'écris ce post).&lt;br /&gt;&lt;br /&gt;Exemple avec le JDK 1.5+:&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import javax.xml.parsers.DocumentBuilder;&lt;br /&gt;import javax.xml.parsers.DocumentBuilderFactory;&lt;br /&gt;&lt;br /&gt;import org.w3c.dom.Document;&lt;br /&gt;import org.w3c.dom.Element;&lt;br /&gt;import org.w3c.dom.NodeList;&lt;br /&gt;&lt;br /&gt;public class TestXIncludeJdk15 {&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public static void main(String[] args) throws Exception {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt;dbf.setNamespaceAware(true);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dbf.setXIncludeAware(true);&lt;/b&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DocumentBuilder db = dbf.newDocumentBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Document doc = db.parse("foo.xml");&lt;br /&gt;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Element rootElt = doc.getDocumentElement();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(rootElt.getNodeName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;NodeList childNodes = rootElt.getChildNodes();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &lt; childNodes.getLength(); i++) {&lt;br /&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;System.out.println(childNodes.item(i).getNodeName());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;TestXIncludeJdk15.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Ce mécanisme de XInclude marche très bien avec le JDK 1.5 car il support Xerces-J en standard. Il n'y a donc pas d'installation particulière à effectuer.&lt;br /&gt;&lt;br /&gt;Bibliographie&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.w3.org/TR/xinclude/"&gt;XML Inclusions (XInclude) Version 1.0 (Second Edition)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.brics.dk/%7Eamoeller/XML/common/index.html"&gt;Namespaces, XInclude, and XML Base&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-9065257966632902601?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/9065257966632902601/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=9065257966632902601&amp;isPopup=true' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9065257966632902601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9065257966632902601'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/06/xinclude-les-inclusions-xml.html' title='XInclude - Les inclusions XML'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-9071544762161057028</id><published>2007-05-17T09:19:00.000+02:00</published><updated>2007-05-17T09:20:38.062+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='http'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='struts'/><title type='text'>Accéder aux informations de l'utilisateur avec Struts2</title><content type='html'>Le protocole HTTP offre un moyen standard d'accéder aux informations de l'utilisateur connecté dans le cas d'une authentification utilisant le standard HTTP. Dans ce cas, pour récupérer les informations utilisateur dans une Servlet, ou controlleur HTTP classique, il faut utiliser les méthodes suivantes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;request.getRemoteUser() : Retourne le login de l'utilisateur qui exécute la requête si celui-ci est authentifié, ou bien null si celui-ci n'est pas authentifié.&lt;/li&gt;&lt;li&gt;request.isUserInRole(String role) : Retourne un booleen indicant si l'utilisateur authentifié  possède le role spécifié.&lt;/li&gt;&lt;li&gt;request.getUserPrincipal() : Retourne l'objet &lt;code&gt;java.security.Principal&lt;/code&gt; contenant le nom de l'utilisateur authentifié.&lt;/li&gt;&lt;/ul&gt;Or avec la venue de Struts2, l'accès à l'object HttpServletRequest n'est plus directement accéssible dans les actions Struts2, ceci est fait afin d'avoir un controlleur pouvant s'affranchir du contexte dans lequel les actions sont exécutées. Biensur il existe une solution afin de pouvoir récupérer les informations utilisateurs.&lt;br /&gt;&lt;br /&gt;Pour faire cela, il faut que l'action Struts2 implémente l'interface &lt;code&gt;PrincipalAware&lt;/code&gt; et utilise le &lt;code&gt;PrincipalProxy&lt;/code&gt; qui est fourni :&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;package net.stinfoservices.account.web.actions.user;&lt;br /&gt;&lt;br /&gt;import net.stinfoservices.directory.shared.domain.user.User;&lt;br /&gt;import net.stinfoservices.directory.shared.service.user.UserService;&lt;br /&gt;&lt;br /&gt;import org.apache.struts2.interceptor.PrincipalAware;&lt;br /&gt;import org.apache.struts2.interceptor.PrincipalProxy;&lt;br /&gt;&lt;br /&gt;import com.opensymphony.xwork2.ActionSupport;&lt;br /&gt;&lt;br /&gt;public class EditUserAction extends ActionSupport implements PrincipalAware {&lt;br /&gt;&lt;br /&gt;  private static final long serialVersionUID = 1L;&lt;br /&gt;  &lt;b&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Attribut utilisé pour stocker le PrincipalProxy.&lt;br /&gt;   */&lt;br /&gt;  private PrincipalProxy principalProxy;&lt;br /&gt;  &lt;/b&gt;&lt;br /&gt;  private UserService userService;&lt;br /&gt;&lt;br /&gt;  private User user;&lt;br /&gt;&lt;br /&gt;  public EditUserAction() {&lt;br /&gt;      super();&lt;br /&gt;  }&lt;br /&gt;  &lt;b&gt;&lt;br /&gt;  /**&lt;br /&gt;   * Méthode héritée de la classe PrincipalAware.&lt;br /&gt;   */&lt;br /&gt;  public void setPrincipalProxy(PrincipalProxy principalProxy) {&lt;br /&gt;      this.principalProxy = principalProxy;&lt;br /&gt;  }&lt;br /&gt;  &lt;/b&gt;&lt;br /&gt;  public UserService getUserService() {&lt;br /&gt;      return userService;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setUserService(UserService userService) {&lt;br /&gt;      this.userService = userService;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public User getUser() {&lt;br /&gt;      return user;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  public void setUser(User user) {&lt;br /&gt;      this.user = user;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public String execute() throws Exception {&lt;br /&gt;      &lt;b&gt;// Utilisation de l'API standard via le PrincipalProxy&lt;br /&gt;      String userId = this.principalProxy.getRemoteUser();&lt;/b&gt;&lt;br /&gt;      user = userService.getUserByLogin(userId);&lt;br /&gt;&lt;br /&gt;      return SUCCESS;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;EditUserAction.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Pour plus d'information sur l'utilisation de l'API standard, référez vous à la javadoc de la spécification servlet ou bien à ce tutoriel en anglais (&lt;a href="http://www.informit.com/articles/article.asp?p=24253&amp;amp;rl=1"&gt;Java Servlet Authentication&lt;/a&gt;) .&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-9071544762161057028?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/9071544762161057028/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=9071544762161057028&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9071544762161057028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/9071544762161057028'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/05/accder-aux-informations-de-lutilisateur.html' title='Accéder aux informations de l&apos;utilisateur avec Struts2'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-428892471182086040</id><published>2007-05-13T20:42:00.000+02:00</published><updated>2007-05-13T20:44:58.150+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Aspirateur de site web</title><content type='html'>Parfois, il est nécessaire de sauvegarder le contenu d'une partie d'un site web afin de pouvoir accéder à son contenu en mode déconnecté ou par ce que vous n'avez pas d'accès internet (eh oui de nos jours cela peut encore arriver). Pour cela il existe des outils permettant d'aspirer les sites web tel que &lt;a href="http://www.httrack.com/page/1/fr/index.html"&gt;HTTrack&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;HTTRack est un outils très simple et fait très bien son travail.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-428892471182086040?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/428892471182086040/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=428892471182086040&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/428892471182086040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/428892471182086040'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/aspirateur-de-site-web.html' title='Aspirateur de site web'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5756651436087075790</id><published>2007-04-15T18:29:00.000+02:00</published><updated>2007-04-15T18:33:16.555+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>L'API Java RegEx</title><content type='html'>J'ai souvent rencontré des développeurs qui ne savais même pas que cette API existait, ou bien quand ils le savent, ils ne savent pas du tout s'en servir. Et pourtant c'est très simple et très puissant. Voila donc une petite présentation sur le sujet afin d'éclaircir les idées.&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://ftp-developpez.com/cyberzoide/java/regex.pdf" target="_blank"&gt;Expressions régulières en Java avec l’API Regex&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5756651436087075790?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5756651436087075790/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5756651436087075790&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5756651436087075790'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5756651436087075790'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/04/lapi-java-regex.html' title='L&apos;API Java RegEx'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6677137684078340515</id><published>2007-04-13T23:42:00.000+02:00</published><updated>2007-04-13T23:45:34.336+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>L'API Java Random</title><content type='html'>Il m'est arrivé plusieurs fois en (5 ans de développement) de rencontrer des personnes qui ne savaient pas utiliser l'API random du JDK et qui ne savent pas ce qu'est le germe (=seed) d'une pseudo-séquence random. Voila donc une petite présentation (en français) très intéressante pour démistifier tout cela.&lt;br /&gt;&lt;br /&gt;&lt;a href="ftp://ftp-developpez.com/cyberzoide/java/random.pdf" target="_blank"&gt;Génération de variables aléatoires avec l’API Random&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6677137684078340515?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6677137684078340515/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6677137684078340515&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6677137684078340515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6677137684078340515'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/04/lapi-java-random.html' title='L&apos;API Java Random'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3562864166802946651</id><published>2007-04-08T19:02:00.000+02:00</published><updated>2007-04-08T19:05:57.620+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><title type='text'>Bonnes pratiques pour écrire des portlets compatibles JSR 168</title><content type='html'>Voilà quelques une des bonnes pratiques afin de rédiger des portlets JSR 168 et éviter des erreurs qui peuvent empêcher la portabilité :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Utiliser impérativement l'API de re-écriture d'URL&lt;/li&gt;&lt;li&gt;Ne pas concaténer de path après une URL re-écrite&lt;/li&gt;&lt;li&gt;Qualifier toutes les méthodes et les variables des scripts client avec l'espace de nommage (&amp;lt;portlet:namespace /&amp;gt;)&lt;/li&gt;&lt;li&gt;Positionner impérativement un content-type pour les réponses de portlets&lt;/li&gt;&lt;li&gt;Ne pas envoyer de coockies depuis une portlet&lt;/li&gt;&lt;li&gt;Séparé la logique métier de la présentation&lt;/li&gt;&lt;/ul&gt;Pour plus d'information lisez cet article : &lt;a href="http://dev2dev.bea.com/pub/a/2006/12/writing-jsr-168-portlets.html"&gt;Guidelines for Writing JSR-168 Portlets&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3562864166802946651?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3562864166802946651/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3562864166802946651&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3562864166802946651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3562864166802946651'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/bonnes-pratiques-pour-crire-des.html' title='Bonnes pratiques pour écrire des portlets compatibles JSR 168'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-854030352636904686</id><published>2007-03-24T10:45:00.000+01:00</published><updated>2007-03-24T10:46:53.651+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Publications avec Google Docs et Spreadsheets</title><content type='html'>Je viens de voir qu'avec Google Docs &amp;amp; Spreadsheets, il est possible de rédiger un document et de le publier directement sur un BLOG. Ce petit post sert donc de test afin de voir comment cela marche.&lt;br&gt; &lt;br&gt; Effectivement cela marche trop bien. En plus j'ai accès aux fonctionnalités de révisions et d'historique. Google c'est vraiment génial.&lt;br&gt; &lt;br&gt;PS : Je viens de m'apercevoir qu'il y a un hic en effet j'ai pas l'impression que cela soit possible d'avoir un titre pour l'article et qu'il soit également possible de mettre des tags sur les articles, à voir.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-854030352636904686?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/854030352636904686/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=854030352636904686&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/854030352636904686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/854030352636904686'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/03/publications-avec-google-docs-et.html' title='Publications avec Google Docs et Spreadsheets'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8140791636790986053</id><published>2007-03-24T07:44:00.003+01:00</published><updated>2009-04-19T18:02:23.535+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='protocole'/><title type='text'>Tutoriel - Configurer Tomcat avec HTTPS (HTTP+SSL)</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;22/03/2007&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a name="toc_8140791636790986053"&gt;Table des matières&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=1165385818525541410&amp;amp;postID=8140791636790986053#part_intro_8140791636790986053"&gt;I - Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=1165385818525541410&amp;amp;postID=8140791636790986053#part_expe_8140791636790986053"&gt;II - Expérimentation&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=1165385818525541410&amp;amp;postID=8140791636790986053#part_conclusion_8140791636790986053"&gt;III - Conclusion&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www2.blogger.com/post-edit.g?blogID=1165385818525541410&amp;amp;postID=8140791636790986053#part_biblio_8140791636790986053"&gt;IV - Bibliographie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;I - Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;HTTPS (HTTP Sécurisé) c'est en fait HTTP+SSL. Ce protocole est inclus dans pratiquement tous les navigateurs. Il vous permet, par exemple, de consulter vos comptes bancaires par le web de façon sécurisée, ou bien d'effectuer des paiements ou de régler votre impôts en ligne en toute sécurité. HTTPS est donc une version sécurisée du protocole HTTP.&lt;br /&gt;&lt;br /&gt;Dans ce tutoriel je vais vous expliquer comment mettre rapidement en place un connecteur HTTP/SSL avec Tomcat afin de sécuriser les communications entre le client et le serveur.&lt;br /&gt;&lt;br /&gt;Pour information, lors de mon expérimentation, mon environnement était le suivant :&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Windows 2000 Professionnel&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tomcat 5.5.23&lt;/li&gt;&lt;br /&gt;&lt;li&gt;JDK 1.6.0-b105&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;II - Expérimentation&lt;/span&gt;&lt;span style="display: block;" id="formatbar_Buttons"&gt;&lt;span class="on down" style="display: block;" id="formatbar_CreateLink" title="Lien" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;img src="http://www.blogger.com/img/blank.gif" alt="Lien" class="gl_link" border="0" /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Afin de mettre en place HTTPS, faite les étapes suivantes:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Créez un keystore pour le certificat&lt;br /&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;C:\&gt;keytool -genkey -alias tomcat -keyalg RSA -keystore D:\java\temp.keystore&lt;br /&gt;Tapez le mot de passe du Keystore :&lt;br /&gt;Ressaisissez le nouveau mot de passe :&lt;br /&gt;Quels sont vos prénom et nom ?&lt;br /&gt;[Unknown] :  Ludovic BERT&lt;br /&gt;Quel est le nom de votre unité organisationnelle ?&lt;br /&gt;[Unknown] :  Développement&lt;br /&gt;Quelle est le nom de votre organisation ?&lt;br /&gt;[Unknown] :  ST Informatique Services&lt;br /&gt;Quel est le nom de votre ville de résidence ?&lt;br /&gt;[Unknown] :  Toulouse&lt;br /&gt;Quel est le nom de votre état ou province ?&lt;br /&gt;[Unknown] :  Haute-Garonne&lt;br /&gt;Quel est le code de pays à deux lettres pour cette unité ?&lt;br /&gt;[Unknown] :  FR&lt;br /&gt;Est-ce CN=Ludovic BERT, OU=Développement, O=ST Informatique Services, L=Toulouse, ST=Haute-Garonne,&lt;br /&gt;C=FR ?&lt;br /&gt;[non] :  oui&lt;br /&gt;&lt;br /&gt;Spécifiez le mot de passe de la clé pour &amp;lt;tomcat&amp;gt;&lt;br /&gt;(appuyez sur Entrée s'il s'agit du mot de passe du Keystore) :&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Génération du keystore pour le certificat&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Un fichier temp.keystore est créer : c'est ce fichier qui stocke le certificat.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Remarque:&lt;/span&gt; Il est possible de spécifier toute les saisies manuelles par des arguments dans la ligne de commande. Pour plus d'information cf. &lt;a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html"&gt;keytool&lt;/a&gt;.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Mettez en place le connecteur HTTPS&lt;br /&gt;&lt;br /&gt;Editez le fichier server.xml et décommentez la configuration du connecteur HTTPS. Pensez également à indiquer le chemin vers le keystore ainsi que le mot de passe pour le keystore.&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;. . .&lt;br /&gt;&amp;lt;Connector&lt;br /&gt;acceptCount="100" clientAuth="false" disableUploadTimeout="true"&lt;br /&gt;enableLookups="false" &lt;span style="font-weight: bold;"&gt;keystoreFile="D:\java\temp.keystore"&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;keystorePass="password"&lt;/span&gt;&lt;br /&gt;maxHttpHeaderSize="8192" maxSpareThreads="75" maxThreads="150"&lt;br /&gt;minSpareThreads="25" port="8443" scheme="https" secure="true"&lt;br /&gt;sslProtocol="TLS"/&amp;gt;&lt;br /&gt;. . .&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;%TOMCAT_HOME%\conf\server.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Modifiez votre web.xml&lt;br /&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;br /&gt;. . .&lt;br /&gt;&amp;lt;security-constraint&gt;&lt;br /&gt;&amp;lt;display-name&gt;Security constarint&amp;lt;/display-name&gt;&lt;br /&gt;&amp;lt;web-resource-collection&gt;&lt;br /&gt;&amp;lt;web-resource-name&gt;Automatic SLL Forwarding&lt;br /&gt;&amp;lt;url-pattern&gt;/*&amp;lt;/url-pattern&gt;&lt;br /&gt;&amp;lt;/web-resource-collection&gt;&lt;br /&gt;&amp;lt;user-data-constraint&gt;&lt;br /&gt;&amp;lt;transport-guarantee&gt;CONFIDENTIAL&amp;lt;/transport-guarantee&gt;&lt;br /&gt;&amp;lt;/user-data-constraint&gt;&lt;br /&gt;&amp;lt;/security-constraint&gt;&lt;br /&gt;. . .&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;web.xml&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Démarrez Tomcat&lt;br /&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;C:\&gt;startup.bat&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;cmd.exe&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;III - Conclusion&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il est très simple de mettre en place HTTPS avec Tomcat afin de sécuriser la communication entre le client (navigateur) et le serveur (Tomcat). Deplus cette mise en place n'inpacte pas le code de l'application.&lt;br /&gt;&lt;br /&gt;Faites donc du HTTS puisque c'est simple lorsqu'il est nécessaire de sécuriser des communications.&lt;br /&gt;&lt;br /&gt;Sachez qu'il est également possible de mettre en place des transferts par connexion sécurisée HTTPS en utilisant le server HTTP Apache en frontal d'un ou plusieurs serveurs Tomcat afin d'effectuer ce traitement. Pour plus d'information: &lt;a href="http://zekey.developpez.com/tutoriel/apache/tomcat/"&gt;Couplage Apache HTTP &amp;amp; Tomcat&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;IV - Bibliographie&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://tomcat.apache.org/tomcat-5.5-doc/ssl-howto.html"&gt;SSL Configuration HOW-TO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://sebsauvage.net/comprendre/ssl/"&gt;C'est quoi SSL, SSH, HTTPS ?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8140791636790986053?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8140791636790986053/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8140791636790986053&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8140791636790986053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8140791636790986053'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/how-to-configurer-tomcat-avec-https.html' title='Tutoriel - Configurer Tomcat avec HTTPS (HTTP+SSL)'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3812948983874308200</id><published>2007-03-23T21:12:00.000+01:00</published><updated>2007-03-23T21:18:39.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Premier pas avec ACEGI Security - Sécuriser une application</title><content type='html'>Pour les inconditionnels de Spring et ceux qui souhaitent mettre en place des mécanismes de sécurités (authentification et autorisation) afin de sécuriser des applications à base de Spring, voilà un petit tutoriel très intéressant pour faire ses premiers pas : &lt;a href="http://ego.developpez.com/acegi/acegi.pdf"&gt;Sécuriser une application avec ACEGI SECURITY SYSTEM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Ce tutoriel explique comment mettre en place tout cela simplement sur une application web, puis sur une application client/serveur via HTTP. Une fois les concepts ACEGI acquis, cela devient très simple et très souple comme abstraction pour la gestion de la sécurité. En plus c'est en français, alors bonne lecture.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3812948983874308200?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3812948983874308200/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3812948983874308200&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3812948983874308200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3812948983874308200'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/03/premier-pas-avec-acegi-security.html' title='Premier pas avec ACEGI Security - Sécuriser une application'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3272532581917937268</id><published>2007-02-26T22:45:00.000+01:00</published><updated>2007-02-26T23:35:00.736+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Stopper un parsing SAX</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;26/02/2007&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="toc_3272532581917937268"&gt;&lt;/a&gt;Table des matières&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="#part_pb_3272532581917937268"&gt;I - Problématique&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_sol_3272532581917937268"&gt;II - Solution&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_sol_delegation_3272532581917937268"&gt;II-1 - Solution par délégation&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_sol_inheritance_3272532581917937268"&gt;II-2 - Solution par héritage&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_conclusion_3272532581917937268"&gt;III - Conclusion&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_biblio_3272532581917937268"&gt;IV - Bibliographie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_pb_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;I - Problématique&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Parfois lorsque vous parser des fichiers XML vous n'avez pas besoin de la totalité des informations contenu dans celui-ci et vous aimeriez bien stopper le parseur SAX. Le problème c'est que SAX parse le fichier XML de façon séquentielle en partant du début et s'arrête une fois que la fin du fichier XML est atteinte. Vous êtes donc face à un problème : comment faire pour stopper le parseur SAX lorsque que le parseur a collecté assez de données ?&lt;br /&gt;&lt;br /&gt;&lt;a name="part_sol_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;II - Solution&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La solution consiste à déclencher (dans l'handler SAX) une &lt;span style="font-family:courier new;"&gt;Exception &lt;/span&gt;spécifique compréhensible par la classe appelant le parseur (J'ai choisi de l'appeler &lt;span style="font-family:courier new;"&gt;ParsingDoneException&lt;/span&gt;). Cette Exception servant à notifier le fait que le parsing s'est finit correctement, mais avant la fin du fichier XML. La classe appelant le parseur SAX catchera donc l'&lt;span style="font-family:courier new;"&gt;Exception&lt;/span&gt; et continuera son traitement.&lt;br /&gt;&lt;br /&gt;Cette solution peut s'implémenter suivant deux variantes :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Soit la &lt;span style="font-family:courier new;"&gt;SAXException &lt;/span&gt;encapsule la &lt;span style="font-family:courier new;"&gt;ParsingDoneException &lt;/span&gt;(Solution par délégation)&lt;/li&gt;&lt;li&gt;Soit la &lt;span style="font-family:courier new;"&gt;ParsingDoneException &lt;/span&gt;hérite de la &lt;span style="font-family:courier new;"&gt;SAXException &lt;/span&gt;(Solution par héritage)&lt;/li&gt;&lt;/ol&gt;&lt;a name="part_sol_delegation_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;"&gt;1 - Solution par délégation&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Le solution par délégation consiste encapsuler la &lt;span style="font-family:courier new;"&gt;ParsingDoneException &lt;/span&gt;dans la  &lt;span style="font-family:courier new;"&gt;SAXException&lt;/span&gt;.&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;try {&lt;br /&gt;    String parserClass = "org.apache.crimson.parser.XMLReaderImpl";&lt;br /&gt;    XMLReader reader = XMLReaderFactory.createXMLReader(parserClass);&lt;br /&gt;&lt;br /&gt;    // Lancer le parsing&lt;br /&gt;} catch(SAXException e) {&lt;br /&gt;    if (e.getCause() != null &amp;&amp;amp; e.getCause() instanceof ParsingDoneException) {&lt;br /&gt;        // Ici le parsing s'arrête normalement.&lt;br /&gt;    } else {&lt;br /&gt;        // Ici le parsing s'arrête à cause d'une erreur.&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Solution par délégation&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_sol_inheritance_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;"&gt;2 - Solution par héritage&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La solution par héritage consiste à faire hériter la &lt;span style="font-family:courier new;"&gt;ParsingDoneException &lt;/span&gt;de la &lt;span style="font-family:courier new;"&gt;SAXException&lt;/span&gt;.&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;try {&lt;br /&gt;    String parserClass = "org.apache.crimson.parser.XMLReaderImpl";&lt;br /&gt;    XMLReader reader = XMLReaderFactory.createXMLReader(parserClass);&lt;br /&gt;&lt;br /&gt;    // Lancer le parsing&lt;br /&gt;} catch(ParsingDoneException e) {&lt;br /&gt;    // Ici le parsing s'arrête normalement.&lt;br /&gt;} catch(SAXException e) {&lt;br /&gt;    // Ici le parsing s'arrête à cause d'une erreur.&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Solution par héritage&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a name="part_conclusion_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;"&gt;III - Conclusion&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pour ma part, je préfère la deuxième solution (Solution par héritage) car le code à produire est plus simple, cela permet donc d'éviter les erreurs. De plus,  cette solution se rapproche plus de la philosophie objet que la solution par délégation.&lt;br /&gt;&lt;br /&gt;&lt;a name="part_biblio_3272532581917937268" href="#toc_3272532581917937268"&gt;&lt;span style="font-weight: bold;"&gt;IV - Bibliographie&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www-128.ibm.com/developerworks/xml/library/x-tipsaxstop/"&gt;Tip :  Stop a SAX parser when you have enough data&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3272532581917937268?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3272532581917937268/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3272532581917937268&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3272532581917937268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3272532581917937268'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/11/stopper-un-parsing-sax.html' title='Stopper un parsing SAX'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4654555777678983560</id><published>2007-02-25T21:09:00.000+01:00</published><updated>2007-02-26T23:35:43.024+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Manipulation des événements en JavaScript</title><content type='html'>La manipulation des événements en JavaScript s'effectue différemment en fonction du navigateur Web. On oublie trop souvent comment cela fonctionne (car cela se gère différemment sous IE et FF).&lt;br /&gt;&lt;br /&gt;Pour faire simple, FF prends les events comme paramètre des fonctions JavaScript, tandis qu'IE utilise window.event pour récupérer l'évènement. Voilà donc une petite astuce pour être sûr de récupérer a chaque fois l'événement dans votre handler d'événements :&lt;br /&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;function myEventHandler(evt) {&lt;br /&gt;  // récupèration de l'event dans la variable evt&lt;br /&gt;  evt = (evt) ? evt : (window.event) ? window.event : "";&lt;br /&gt;  // dans evt on a l'évènement.&lt;br /&gt;  /* ... */&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;your_file.js&lt;/th&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4654555777678983560?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4654555777678983560/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4654555777678983560&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4654555777678983560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4654555777678983560'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/manipulation-des-vnements-en-javascript.html' title='Manipulation des événements en JavaScript'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7386041906434168503</id><published>2007-02-09T22:25:00.000+01:00</published><updated>2007-02-09T22:31:07.832+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>StAX - Streaming API for XML</title><content type='html'>StAX est la toute dernière API Java sortie pour faire de la lecture et de l'écriture de XML. Elle a pour but de tirer profit des avantages de SAX en ce qui concerne le parsing XML (l'optimisation mémoire)  et des avantages de DOM en ce qui concerne l'écriture de fichers XML (API simple d'utilisation).&lt;br /&gt;&lt;br /&gt;Voilà une présentation succincte de &lt;a href="http://ludovic.bert.free.fr/presentations/StAX" target="_blank"&gt;StAX&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7386041906434168503?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7386041906434168503/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7386041906434168503&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7386041906434168503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7386041906434168503'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/stax-streaming-api-for-xml.html' title='StAX - Streaming API for XML'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3597333795162240381</id><published>2007-02-08T20:47:00.000+01:00</published><updated>2007-02-08T20:57:30.723+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='Portlet'/><title type='text'>Echanger des données entre portlets</title><content type='html'>La JSR168 (Spécification Portlet v1.0) a des limitations bien connues dont notamment la communication et l'échange de données inter-portlets. Pour répondre à cette limitation (mais aussi à d'autres limitations de la JSR168), la JSR286 (Spécification Portlet v2.0) est en cours de rédaction. Dans cette spécification apparaît la notion d'évènement entre les portlets. Cette spécification est actuellement en early draft et une finale est prévue pour 2007, ce qui veut dire que les portails ne sont pas encore prêt d'intégrer ce mécanisme.&lt;br /&gt;&lt;br /&gt;Il existe toutefois une solution compatible avec la JSR168 utilisable sous forme de librairie pour faire échanger des données entre différentes portlets d'un portail. Voilà la solution : &lt;a href="http://www.doc.ic.ac.uk/%7Emo197/portlets/portlet_messaging/"&gt;A JSR168-compliant implementation of inter-portlet communication&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3597333795162240381?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3597333795162240381/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3597333795162240381&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3597333795162240381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3597333795162240381'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/echanger-des-donnes-entre-portlets.html' title='Echanger des données entre portlets'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-83729042732583081</id><published>2007-02-01T20:40:00.000+01:00</published><updated>2007-02-26T23:34:00.451+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel - Comment stocker et afficher des images depuis une base de données</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;01/02/2007&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a name="toc_83729042732583081"&gt;&lt;/a&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="toc_83729042732583081"&gt;Table des matières&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="#part_intro_83729042732583081"&gt;I - Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_intro_goals_83729042732583081"&gt;I-1 - But et portée du document&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_intro_why_83729042732583081"&gt;I-2 - Pourquoi stocker des images en base de données&lt;/a&gt;&lt;a&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="#part_define_83729042732583081"&gt;II - Définition du schéma de base de données et du Transfer Object associé&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_define_schema_83729042732583081"&gt;II-1 - Définition du schéma de base de données&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_define_to_83729042732583081"&gt;II-2 - Définition du Transfer Object (TO)&lt;/a&gt;&lt;br /&gt;&lt;a href="#store_db_83729042732583081"&gt;III - Stocker des images en base de données&lt;/a&gt;&lt;br /&gt;&lt;a href="#store_db_part1_83729042732583081"&gt;III-1 - Récupérer les données binaires depuis le client&lt;/a&gt;&lt;br /&gt;&lt;a href="#store_db_part2_83729042732583081"&gt;III-2 - Sauvegarder les données binaires en base de données&lt;/a&gt;&lt;br /&gt;&lt;a href="#display_83729042732583081"&gt;IV - Afficher des images depuis une base de données&lt;/a&gt;&lt;br /&gt;&lt;a href="#conclusion_83729042732583081"&gt;V - Conclusion&lt;/a&gt;&lt;br /&gt;&lt;a href="#biblio_83729042732583081"&gt;VI - Bibliographie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_intro_83729042732583081" href="#toc_83729042732583081"&gt;I - Introduction&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_intro_goals_83729042732583081" href="#toc_83729042732583081"&gt;1 - But et portée du document&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ce tutoriel s'adresse aux personnes connaissant les bases de données SQL, ainsi que l'API Java JDBC et étant désireuse de savoir comment lire et écrire des images en base de données.&lt;br /&gt;&lt;br /&gt;Ce tutoriel a été élaboré en utilisant HSQLDB, certaines spécificités liées à hypersonic ont donc été utilisé, si vous utilisez une autre base de données, veuillez consulter la documentation de celle-ci.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_intro_why_83729042732583081" href="#toc_83729042732583081"&gt;2 - Pourquoi stocker des images en base de données&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Stocker des images en base de données est très intéressant dans le cadre d'applications web, afin de ne pas stocker les images sur le disque dur, car une application web n'a pas à accéder aux ressources via le file system.&lt;br /&gt;&lt;br /&gt;Un autre avantage plus évident de la base de données par rapport au file system, c'est que celui-ci supporte les opérations transactionnelles et atomiques.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_define_83729042732583081" href="#toc_83729042732583081"&gt;II - Définition du schéma de base de données et du Transfer Object associé&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_define_schema_83729042732583081" href="#toc_83729042732583081"&gt;1 - Définition du schéma de base de données&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour stocker des images en base de données, il faut un schéma de base de données permettant de faire cela, un type de colonne bien spécifique est nécessaire pour faire cela : le type BLOB (Binary Long OBject) comme son nom l'indique ce type de colonne sert a stocker à base de données des objets sous forme binaire. Dans notre cas des images :&lt;br /&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;CREATE TABLE IMAGE_DATA (&lt;br /&gt;    ID INTEGER PRIMARY KEY,&lt;br /&gt;    MIME_TYPE VARCHAR(20) NOT NULL,&lt;br /&gt;    DATA LONGVARBINARY NOT NULL&lt;br /&gt;);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;schema.sql&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="part_define_to_83729042732583081" href="#toc_83729042732583081"&gt;2 - Définition du Transfer Object (TO)&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour stocker les images en base de données, il faut également définir un Transfer Object associé au schéma de base de données afin de pouvoir manipuler les données :&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;public class ImageData {&lt;br /&gt;&lt;br /&gt;    private String contentType;&lt;br /&gt;&lt;br /&gt;    private byte[] data;&lt;br /&gt;&lt;br /&gt;    public ImageData() {&lt;br /&gt;        super();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    // Definir ici les getters et les setters pour contentType et data.&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;ImageData.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="store_db_83729042732583081" href="#toc_83729042732583081"&gt;III - Stocker des images en base de données&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="store_db_part1_83729042732583081" href="#toc_83729042732583081"&gt;1 - Récupérer les données binaires depuis le client&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour la récupération des données, je conseille d'utiliser jakarta commons file upload, comme dans l'exemple ci-dessous :&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;ImageData imgData = new ImageData();&lt;br /&gt;&lt;br /&gt;DiskFileItemFactory factory = new DiskFileItemFactory();&lt;br /&gt;ServletFileUpload upload = new ServletFileUpload(factory);&lt;br /&gt;&lt;br /&gt;List itemlist = upload.parseRequest(request);&lt;br /&gt;&lt;br /&gt;Iterator iter = itemlist.iterator();&lt;br /&gt;while (iter.hasNext()) {&lt;br /&gt;    FileItem itemFile = (FileItem) iter.next();&lt;br /&gt;    if (!itemFile.isFormField()) {&lt;br /&gt;        imgData.setData(itemFile);&lt;br /&gt;    } else {&lt;br /&gt;        if (itemFile.getFieldName().equals("content_type")) {&lt;br /&gt;            imgData.setContentType(itemFile.getString());&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;this.yourDao.saveImageData(imbData);&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;YourStrutsAction.java ou YourServlet.java ou YourSpringController.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="store_db_part2_83729042732583081" href="#toc_83729042732583081"&gt;2 - Sauvegarder les données binaires en base de données&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le DAO :&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;public void saveImageData(ImageData imgData) {&lt;br /&gt;    // c = ... récupérer votre connection JDBC&lt;br /&gt;    PreparedStatement stmt = c.prepareStatement("INSERT INTO IMAGE_DATA VALUES (?,?,?)")&lt;br /&gt;    // ... id&lt;br /&gt;    stmt.setString(2, imgData.getContentType());&lt;br /&gt;    stmt.setBytes(3, imgData.getData());&lt;br /&gt;    stmt.executeUpdate();&lt;br /&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;YourDao.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a name="display_83729042732583081" href="#toc_83729042732583081"&gt;IV - Afficher des images depuis une base de données&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Les fragments de code qui suivent expliquent comment afficher des images depuis la base de données sans stocker les fichiers sur le disque de façon temporaire dans une architecture à base de DAOs.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le DAO :&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;public ImageData getImageData(long id) {&lt;br /&gt;    try {&lt;br /&gt;        // ...&lt;br /&gt;        ResultSet rs = null; // ... SELECT * FROM IMAGE_DATA WHERE ID=?&lt;br /&gt;        if (rs.next()) {&lt;br /&gt;            ImageData imgData = new ImageData();&lt;br /&gt;            imgData.setContentType(rs.getString(2));&lt;br /&gt;            imgData.setData(rs.getBytes(3));&lt;br /&gt;&lt;br /&gt;            return imgData;&lt;br /&gt;        }&lt;br /&gt;        return null;&lt;br /&gt;    } catch (Exception e) {&lt;br /&gt;        // Handle exception&lt;br /&gt;    } finally {&lt;br /&gt;        // ... Close input stream&lt;br /&gt;        // ... Flush and close ouput stream&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;YourDao.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;L'action Struts :&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;// Récupérer les données depuis la BD via le DAO&lt;br /&gt;ImageData imgData = yourDao.getImageData(id);&lt;br /&gt;// Positionner le content type&lt;br /&gt;response.setContentType(imgData.getContentType());&lt;br /&gt;// Ecrire les données dans le ServletOutputStream&lt;br /&gt;ServletOutputStream output = response.getOutputStream();&lt;br /&gt;output.write(imgData.getData());&lt;br /&gt;// ...&lt;br /&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;YourStrutsAction.java ou YourServlet.java ou YourSpringController.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;a name="conclusion_83729042732583081" href="#toc_83729042732583081"&gt;V - Conclusion&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Il est très simple de développer une application qui va sauvegarder et lire des données binaires en base de données.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;a name="biblio_83729042732583081" href="#toc_83729042732583081"&gt;VI - Bibliographie&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jakarta.apache.org/commons/fileupload/streaming.html"&gt;Jakarta Commons - File Upload&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/thread.jspa?threadID=730262&amp;amp;messageID=4204446"&gt;Forum Sun - How to display a blob as an image&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-83729042732583081?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/83729042732583081/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=83729042732583081&amp;isPopup=true' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/83729042732583081'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/83729042732583081'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/tutoriel-comment-stocker-et-afficher.html' title='Tutoriel - Comment stocker et afficher des images depuis une base de données'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1998099176729812124</id><published>2007-01-30T12:08:00.000+01:00</published><updated>2007-02-25T21:07:16.273+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Ajouter une invite DOS sur le clique droit avec Window 2000/XP</title><content type='html'>Quand on effectue du développement, il est très intéressant de pouvoir ouvrir rapidement une invite dos directement dans un répertoire de votre explorateur windows. Il est possible de rajouter cette fonctionnalité simplement en modifiant la base de registre.&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1 - Installer la fonctionnalité&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Copiez les lignes suivantes et sauvegardez les dans un fichier .reg (add_cmd.reg par exemple) :&lt;/li&gt;&lt;/ul&gt;&lt;table class="sample_code"&gt;&lt;tr&gt;&lt;td&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Prompt]&lt;br /&gt;@="CMD"&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\Command Prompt\command]&lt;br /&gt;@="Cmd.exe /k pushd %L"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;add_cmd.reg&lt;/th&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lancer le fichier .reg en double cliquant dessus et accepter les modifications de la base de registre, ca y est la fonctionnalité est installée.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;2 - Utiliser la fonctionnalité&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ouvrir l'explorateur windows et faire un clique droit sur le répertoire où se positionner :&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_ASMxX831Doo/RbvG2YWhH-I/AAAAAAAAABU/X4jblV7RpcQ/s1600-h/add_cmd01.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_ASMxX831Doo/RbvG2YWhH-I/AAAAAAAAABU/X4jblV7RpcQ/s400/add_cmd01.png" alt="" id="BLOGGER_PHOTO_ID_5024828446814052322" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Cliquer sur CMD, l'invite DOS s'ouvre dans le répertoire sélectionné :&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ASMxX831Doo/RbvHN4WhH_I/AAAAAAAAABc/25fx9rp4Gwc/s1600-h/add_cmd02.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_ASMxX831Doo/RbvHN4WhH_I/AAAAAAAAABc/25fx9rp4Gwc/s400/add_cmd02.png" alt="" id="BLOGGER_PHOTO_ID_5024828850540978162" border="0" /&gt;&lt;/a&gt;&lt;ul&gt;&lt;li&gt;Enjoy it !!!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1998099176729812124?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1998099176729812124/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1998099176729812124&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1998099176729812124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1998099176729812124'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/02/ajouter-une-invite-dos-sur-le-clique.html' title='Ajouter une invite DOS sur le clique droit avec Window 2000/XP'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_ASMxX831Doo/RbvG2YWhH-I/AAAAAAAAABU/X4jblV7RpcQ/s72-c/add_cmd01.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-958163000141973153</id><published>2007-01-26T10:53:00.000+01:00</published><updated>2007-12-22T23:06:03.242+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Gérer les type mime en Java</title><content type='html'>Dans des applications Java, il est parfois nécessaire de calculer des types mime à partir d'extension de fichiers et inversement. Pour faire cela j'ai développé une classe utilitaire que j'ai mis dans mon projet personnel de &lt;a href="http://code.google.com/p/commons-utils"&gt;commons-utils&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Voilà l'interface très simple de cette classe utilitaire permettant de travailler avec les types mime :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;MimeUtil.getDefaultExtension(String type) : retourne l'extension par défaut associée aux type mime passé en paramètre.&lt;/li&gt;&lt;li&gt;MimeUtil.String getMimeType(File file) : retourne le type mime du fichier passé en paramètre.&lt;/li&gt;&lt;li&gt;MimeUtil.getMimeType(String ext) : retourne le type mime pour les fichiers ayant l'extension passée en paramètre.&lt;/li&gt;&lt;li&gt;MimeUtil.getType(String ext) : retourne le type de fichier (image, audio, vidéo, application, ...) pour les fichiers ayant l'extension passée en paramètre.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;u&gt;Remarque :&lt;/u&gt; Cette classe utilitaire est configurable en utilisant le fichier mime.types qui permet de stocker la correspondance entre le type mime et les extensions.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-958163000141973153?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/958163000141973153/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=958163000141973153&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/958163000141973153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/958163000141973153'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/grer-les-type-mime-en-java.html' title='Gérer les type mime en Java'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4959631385758324674</id><published>2007-01-26T07:30:00.000+01:00</published><updated>2007-12-22T23:07:47.216+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Comment créer une image vignette au format JPG ?</title><content type='html'>&lt;div style="text-align: justify;"&gt;La création d'une vignette d'une image est souvent utile dans le développement d'application web afin d'afficher une pré-visualisation d'une image sans risquer d'impacter les performances à cause du poids de l'image : la solution consiste à pré-calculer une image de pré-visualisation.&lt;br /&gt;&lt;br /&gt;La classe utilitaire que j'ai développé s'inspire de l'article &lt;a href="http://www.informit.com/guides/content.asp?g=java&amp;seqNum=167&amp;amp;rl=1"&gt;Image Manipulation&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Pour calculer la vignette, il suffit d'utiliser une des méthodes suivantes :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ThumbUtil.constrain(String srcFilename, String destFilename, int boxSize);&lt;/li&gt;&lt;li&gt;ThumbUtil.constrain(String srcFilename, String destFilename, int boxSize, float quality);&lt;/li&gt;&lt;li&gt;ThumbUtil.constrain(InputStream is, OutputStream os, int boxSize);&lt;/li&gt;&lt;li&gt;ThumbUtil.constrain(InputStream is, OutputStream os, int boxSize, float quality);&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Le code source et les binaires sont téléchargeables sur mon projet &lt;a href="http://code.google.com/p/commons-utils"&gt;commons-utils&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4959631385758324674?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4959631385758324674/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4959631385758324674&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4959631385758324674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4959631385758324674'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/comment-crer-une-image-vignette-au.html' title='Comment créer une image vignette au format JPG ?'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5145038609822537658</id><published>2007-01-23T16:47:00.000+01:00</published><updated>2007-01-23T16:53:50.405+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='SVN'/><title type='text'>Hébergement SVN + TRAC = assembla</title><content type='html'>Je viens de tomber sur une solution d'hébergement gratuite qui fourni des plusieurs outils pour la gestion de configuration, la communication et la gestion des bugs, évolutions.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.assembla.com/"&gt;http://www.assembla.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ce site est plus complet que la solution OpenSVN que j'ai également déjà utilisé. Les temps de réponse me semble nettement meilleurs et la gamme d'outils et également plus étoffée (SVN, Track, Wiki, ...). En plus, il possible de travailler avec plusieurs projets avec le même compte.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5145038609822537658?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5145038609822537658/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5145038609822537658&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5145038609822537658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5145038609822537658'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/hbergement-svn-trac-assembla.html' title='Hébergement SVN + TRAC = assembla'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1904599851427470558</id><published>2007-01-05T15:56:00.000+01:00</published><updated>2007-01-05T16:00:58.063+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Deux nouvelles versions de DWR</title><content type='html'>DWR vient de sortir 2 nouvelles versions :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;1.1.4 : Qui est une version de maintenance de DWR 1.1.x et qui contient principalement des corrections de bugs des anciennes versions.&lt;/li&gt;&lt;li&gt;2.0RC2 : Qui est une release candidate pour la nouvelle version de DWR 2.0 et qui contient également des corrections de bugs.&lt;/li&gt;&lt;/ul&gt;Pour plus d'information voir le &lt;a href="http://getahead.ltd.uk/blog/joe/2007/01/04/new_dwr_releases.html"&gt;blog de DWR&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1904599851427470558?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1904599851427470558/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1904599851427470558&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1904599851427470558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1904599851427470558'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2007/01/deux-nouvelles-versions-de-dwr.html' title='Deux nouvelles versions de DWR'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3372079854490748053</id><published>2006-12-07T21:54:00.000+01:00</published><updated>2006-12-07T21:55:03.041+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>GWT vs Echo2</title><content type='html'>Parmi les frameworks Java permettant de développer des applications Web AJAX sans développer une ligne de HTML, JavaScript et CSS, il y a deux frameworks à la mode.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/webtoolkit/"&gt;Google Web Toolkit&lt;/a&gt; (&lt;a href="http://code.google.com/webtoolkit/documentation/examples/"&gt;Démos&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://nextapp.com/platform/echo2/echo/"&gt;Echo2&lt;/a&gt; (&lt;a href="http://nextapp.com/platform/echo2/echo/demo/"&gt;Démos&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;Ces deux frameworks ne sont pas à proprement dire des concurrents direct, mais plutôt deux alternatives possibles car leur philosophie et leur implémentation est différente. Pour GWT toute l'application (JavaScript, ...) est sur une seule page Web chargée entièrement lors de l'accès à la page. En ce qui concerne Echo2, l'interface est chargée au fur et à mesure depuis le serveur afin de minimiser les interactions entre le client et le serveur.&lt;br /&gt;&lt;br /&gt;Pour plus d'explication, sur la comparaison entre GWT et Echo2 : &lt;a href="http://www.theserverside.com/news/thread.tss?thread_id=40804"&gt;http://www.theserverside.com/news/thread.tss?thread_id=40804&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3372079854490748053?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3372079854490748053/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3372079854490748053&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3372079854490748053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3372079854490748053'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/12/gwt-vs-echo2.html' title='GWT vs Echo2'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6972115564338411977</id><published>2006-12-03T18:23:00.000+01:00</published><updated>2006-12-03T18:24:59.661+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Debuggage à distance avec eclipse - Remote Debugging</title><content type='html'>Pourquoi faire du debuggage à distance avec eclipse me diriez vous car avec eclipse on peut très bien debugger une application ? Faire du debuggage à distance permet de séparer la JVM dans laquelle est exécutée l'application de celle du debuggeur.&lt;p&gt;L'utilisation du debuggage distant permet donc d'avoir une application sur un serveur et de faire du debuggage (pas à pas) à partir du poste local (comme un poste de développeur par exemple).&lt;/p&gt; &lt;p&gt;L'utilisation que j'en ai fait, c'est lors de la phase de validation d'une application, j'ai installé l'application et j'ai joué les scénarios de tests. Lorsque je rencontre un bug je branche eclipse en remote debugging sur l'application pour voir où se trouve le problème (cela permet de débugger une application sans impact de la part de l'environnement de développement sur l'environnement de l'application installée).&lt;/p&gt;&lt;p&gt;Le principe du debugage distant est le suivant :&lt;/p&gt;&lt;ol&gt;&lt;li&gt;La JVM ouvre un socket.&lt;/li&gt;&lt;li&gt;Eclipse va se connecter sur ce socket afin d'intercepter les points d'arrêts et de communiquer avec la JVM distante.&lt;/li&gt;&lt;/ol&gt;Procédure à suivre :&lt;ol&gt;&lt;li&gt;Compiler les sources avec l'option permettant d'avoir les informations de debug (&lt;span style="font-style: italic;"&gt;javac -g&lt;/span&gt; en ligne de commande ou bien &lt;span style="font-style: italic;"&gt;&amp;lt;javac debug="true"&amp;gt;&lt;/span&gt; avec ant).&lt;/li&gt;&lt;li&gt;Lancer l'application pour accepter le remote debugging avec l'option &lt;span style="font-style: italic;"&gt;-Xdebug -Xrunjdwp:transport=dt_socket,serve&lt;/span&gt;&lt;span style="font-style: italic;"&gt;r=y,suspend=n,address=&amp;lt;port&amp;gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Lancer eclipse en remote debug sur le même port que l'étape précédente &lt;span style="font-style: italic;"&gt;&amp;lt;port&amp;gt; (Run -&amp;gt; Debug ... -&amp;gt; Remot&lt;/span&gt;&lt;span style="font-style: italic;"&gt;e Java Application)&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;ul&gt;&lt;li&gt;&lt;span&gt;Sélectionner Run -&amp;gt; Debug ...&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_ASMxX831Doo/RXMEYlXxQYI/AAAAAAAAAAM/FdlH-lttkaA/s1600-h/Remote_Debug01.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp0.blogger.com/_ASMxX831Doo/RXMEYlXxQYI/AAAAAAAAAAM/FdlH-lttkaA/s200/Remote_Debug01.png" alt="" id="BLOGGER_PHOTO_ID_5004348431333933442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Sélectionner Remote Java Application.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_ASMxX831Doo/RXMEY1XxQZI/AAAAAAAAAAU/fCoSo0EwHSY/s1600-h/Remote_Debug02.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp1.blogger.com/_ASMxX831Doo/RXMEY1XxQZI/AAAAAAAAAAU/fCoSo0EwHSY/s200/Remote_Debug02.png" alt="" id="BLOGGER_PHOTO_ID_5004348435628900754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;Créer et remplir le formulaire de lancement du débuggage à distance, en indiquant bien le projet, le type de connexion le nom de la machine et le port de la JVM.&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_ASMxX831Doo/RXMHJFXxQaI/AAAAAAAAAAk/BvPNxemgH3Y/s1600-h/Remote_Debug03.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; cursor: pointer;" src="http://bp2.blogger.com/_ASMxX831Doo/RXMHJFXxQaI/AAAAAAAAAAk/BvPNxemgH3Y/s200/Remote_Debug03.png" alt="" id="BLOGGER_PHOTO_ID_5004351463580844450" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6972115564338411977?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6972115564338411977/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6972115564338411977&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6972115564338411977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6972115564338411977'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/11/debuggage-distance-avec-eclipse-remote.html' title='Debuggage à distance avec eclipse - Remote Debugging'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_ASMxX831Doo/RXMEYlXxQYI/AAAAAAAAAAM/FdlH-lttkaA/s72-c/Remote_Debug01.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8044951660950648793</id><published>2006-11-19T23:16:00.000+01:00</published><updated>2007-10-28T14:52:44.794+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>JavaScript Non-Intrusif</title><content type='html'>JavaScript non-intrusif ou comment séparer le rendu HTML du comportement JavaScript.&lt;br /&gt;&lt;br /&gt;Je viens de rédiger une présentation au format &lt;a href="http://meyerweb.com/eric/tools/s5/"&gt;S5&lt;/a&gt; sur le concept de JavaScript Non-Intrusif, vous trouverez la présentation sur &lt;a href="http://ludovic.bert.free.fr/presentations/JavaScript%20Non-Intrusif" target="_blank" onclick="return top.js.OpenExtLink(window,event,this)"&gt;http://ludovic.bert.free.fr/presentations/JavaScript%20Non-Intrusif/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8044951660950648793?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8044951660950648793/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8044951660950648793&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8044951660950648793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8044951660950648793'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/11/javascript-non-intrusif.html' title='JavaScript Non-Intrusif'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3257389749470250607</id><published>2006-11-13T12:24:00.000+01:00</published><updated>2006-11-13T12:42:44.185+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='protocole'/><title type='text'>Le protocle FTP</title><content type='html'>Sur un projet, j'ai dû utiliser l'API Java &lt;a href="http://jakarta.apache.org/commons/net/"&gt;commons-net&lt;/a&gt; afin de faire communiquer mon application avec le serveur FTP.&lt;br /&gt;&lt;br /&gt;Voila un petit article qui rappel comment marche &lt;a href="http://www.commentcamarche.net/internet/ftp.php3"&gt;FTP&lt;/a&gt;. Lors de mon projet, je dû passer du mode active au mode passif, vous trouverez donc &lt;a href="http://slacksite.com/other/ftp.html"&gt;ici&lt;/a&gt; la distinction entre FTP actif et FTP passif.&lt;br /&gt;&lt;br /&gt;Vous trouverez la liste des codes d'erreurs FTP sur &lt;a href="http://www.ftpplanet.com/ftpresources/ftp_codes.htm"&gt;http://www.ftpplanet.com/ftpresources/ftp_codes.htm&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3257389749470250607?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3257389749470250607/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3257389749470250607&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3257389749470250607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3257389749470250607'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/11/le-protocle-ftp.html' title='Le protocle FTP'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-655863454848413238</id><published>2006-11-13T12:15:00.000+01:00</published><updated>2006-11-13T12:19:14.049+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel - OSGi</title><content type='html'>OSGi est un framework orienté SOA (Service Oriented Architecture) permettant de gérer (déployer et supprimer) des services, de créer également des dépendances entre les services.&lt;br /&gt;&lt;br /&gt;Voilà tout d'abord un petit tour d'horizon avec une présentation et un tutoriel en français :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www-adele.imag.fr/users/Didier.Donsez/cours/osgi.pdf"&gt;Présentation sur OSGi en français&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www-adele.imag.fr/users/Didier.Donsez/cours/exemplesosgi/tutorialoscar.htm"&gt;Tutoriel sur OSGi avec un conteneur OSGi (Oscar) en français&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Article très intéressant sur l'intégration d'OSGi dans des applications Web avec Struts :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://eclipsezone.com/eclipse/forums/t64085.html"&gt;Developing Eclipse/OSGi Web Applications (Part I)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://eclipsezone.com/eclipse/forums/t64096.html"&gt;Developing Eclipse/OSGi Web Applications (Part II)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Article très intéressant sur l'intégration de equinox et des bundles OSGi et dans les applications Web :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eclipse.org/equinox/incubator/server/"&gt;Equinox Incubator - Server-Side&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;La javadoc de l'API OSGi est disponible &lt;a href="http://bundles.osgi.org/javadoc/r4/"&gt;ici&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-655863454848413238?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/655863454848413238/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=655863454848413238&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/655863454848413238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/655863454848413238'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/12/tutoriel-osgi.html' title='Tutoriel - OSGi'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1621302160150415478</id><published>2006-11-07T13:55:00.000+01:00</published><updated>2006-11-07T14:07:19.400+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel - Java et la synchronisation</title><content type='html'>La synchronisation et les accès concurrents en Java était souvent problématiques car l'API Java ne permettait pas de faire beaucoup de chose.&lt;br /&gt;&lt;br /&gt;Depuis la sortie du JDK 5, les choses se sont grandement simplifiée, améliorant ainsi la simplicité du code produit et la productivité du développer grâce à l'ajout du package &lt;span style="font-weight: bold;"&gt;java.util.concurrent&lt;/span&gt;. Ce package implémente les concepts de &lt;span style="font-weight: bold;"&gt;Lock&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Sémaphore&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Queue&lt;/span&gt;, ... très utile dans le développement d'applications nécessitant des accès concurrents.&lt;br /&gt;&lt;br /&gt;Afin de s'y retrouver un peu avec tout cela, voilà un article qui aide à clarifier les choses et à comparer comment on faisait avant le JDK 5 et comment on travail avec le JDK 5 : &lt;a href="http://rom.developpez.com/java-synchronisation/"&gt;Tutoriel Java et la synchronisation&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1621302160150415478?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1621302160150415478/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1621302160150415478&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1621302160150415478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1621302160150415478'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/11/tutoriel-java-et-la-synchronisation.html' title='Tutoriel - Java et la synchronisation'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4752996606770350805</id><published>2006-10-31T10:21:00.000+01:00</published><updated>2006-10-31T11:21:12.022+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Reverse AJAX ?</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Présentation de reverse AJAX&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Pour ceux qui ne savent pas ce que c'est AJAX, c'est simple ! C'est le client envoie des requêtes au serveur mais il n'est pas gelé pendant qu'il attend la réponse (fonctionnement asynchrone). En général c'est très souvent un petit volume de données et pas une page entière contrairement au web traditionnel, ensuite le client utilise du javascript pour afficher les données retournées par le serveur.&lt;br /&gt;&lt;br /&gt;Alors Reverse AJAX, c'est quoi ? C'est le serveur qui envoie les données au client sans pour autant qu'il n'y ait eu d'action de la part du client (clic sur un bouton, un lien...). Ca peut paraître difficile à comprendre, mais en réalité, c'est très simple, la communication de fait dans le sens inverse d'où le nom de reverse AJAX. Prenons l'exemple d'un chat. Vous êtes plusieurs à bavarder, quelqu'un envoie un message, le serveur le reçoit et va le renvoyer à tous les autres et sans aucune action de leur part, la conversation va être mise à jour. Ce concept est déjà vieux, mais il n'était que très peu utilisé dans des sites ou des applications web.&lt;br /&gt;&lt;br /&gt;Il y a &lt;a hreflang="en" href="http://prokata.com/reverseajax"&gt;plusieurs méthodes pour arriver à cela&lt;/a&gt; et c'est là tout le problème. Quelle est la meilleure solution ? Comment l'implémenter ? etc... La méthode qui semble la plus populaire en ce moment, c'est Comet que l'on appelle aussi "The slow load technique" (technique du chargement lent). Voilà un &lt;a hreflang="en" href="http://www.obviously.com/tech_tips/slow_load_technique"&gt;exemple avec des iframes&lt;/a&gt;, mais maintenant de plus en plus de frameworks web commencent à l'implémenter et ça va devenir plus facile :)&lt;br /&gt;&lt;br /&gt;La plupart des implémentations que je connais ont été faites dans des frameworks Java, comme &lt;a hreflang="en" href="http://ajaxian.com/archives/dwr-20-reverse-ajax"&gt;cet exemple avec DWR&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Les différentes techniques de reverse AJAX&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Polling &lt;/span&gt;: Cette méthode qui à mon avis est l’une des plus simple à mettre en place, se résume à mettre en place du code coté client qui appelera le serveur toutes les x secondes de façon périodique. Cette méthode engendre du trafic superflu une des solutions consiste à bien régler le timer périodique pour ne pas se synchroniser avec le serveur trop souvent, mais ne pas être trop dé-synchroniser non plus.  &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Comet, long lived HTTP &lt;/span&gt;&lt;span&gt;ou&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; slow load technique &lt;/span&gt;: Ces trois termes désignent la même technique, elle a pour but de lancer une requête extrêmement lente, le serveur maintenant ainsi le contact avec le client sur une longue durée. C'est le choix fait par DWR nous avons donc un framework permettant de mettre en place simplement une technique de reverse AJAX, la contrepartie c'est que ce mode de fonctionnement impose qu'une connection soit toujours ouverte entre le client et le serveur, cela demande donc une surcharge de travail au serveur. &lt;a href="http://www.obviously.com/tech_tips/slow_load_technique" target="_blank" onclick="javascript:urchinTracker ('/outbound/article/www.obviously.com');"&gt;Un exemple&lt;/a&gt;.  &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;PiggyBack &lt;/span&gt;: Cette technique consiste à envoyer une mise à jour lorsque le navigateur fera une demande au serveur pour quelque chose. Ainsi la réponse et la mise à jour sont envoyées en même temps. Cette technique à pour avantage de ne pas surcharger le trafic entre le client et le serveur, en revanche je pense que c'est assez complexe à mettre en oeuvre, à moins que vous connaissiez des frameworks mettant cela en place je suis preneur.  &lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4752996606770350805?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4752996606770350805/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4752996606770350805&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4752996606770350805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4752996606770350805'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/10/reverse-ajax.html' title='Reverse AJAX ?'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4900439213894284269</id><published>2006-10-25T14:38:00.000+02:00</published><updated>2006-10-25T14:42:17.469+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Sortie de Firefox 2.0</title><content type='html'>&lt;span style="font-style: italic;"&gt;"Le nouveau Firefox est encore plus rapide, plus sûr et totalement personnalisable pour s'adapter à vos besoins."&lt;/span&gt; aux dires de mozilla.&lt;br /&gt;&lt;br /&gt;Firefox 2.0 est téléchargeable sur : &lt;a href="http://www.mozilla-europe.org/fr/products/firefox/"&gt;http://www.mozilla-europe.org/fr/products/firefox/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4900439213894284269?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4900439213894284269/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4900439213894284269&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4900439213894284269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4900439213894284269'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/10/sortie-de-firefox-20.html' title='Sortie de Firefox 2.0'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4072999374239909624</id><published>2006-10-17T22:28:00.000+02:00</published><updated>2006-10-17T22:43:37.068+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>API JavaScript Google Maps</title><content type='html'>Google fournit l'API JavaScript Google Maps qui est faite pour permettre d'inclure Google Maps dans votre site web et d'en customizer le comportement : ajout de marqueurs, d'info bulles avec onglets, ...&lt;br /&gt;&lt;br /&gt;Cette API est très bien faite (c'est normal venant de Google, c'est souvent le cas pour ne pas dire toujours). Cette API est vraiment très intuitive. En plus dans la documentation, vous trouverez des exemples bien précis, illustrant chaque fonctionnalités de Google Maps une à une.&lt;br /&gt;&lt;br /&gt;Pour preuve, voila un exemple simple de ce que j'ai pu faire avec leur API, cliquez sur le marqueur et consultez les onglets que j'ai créée. &lt;a href="http://ludovic.bert.free.fr/google_maps/location.html"&gt;Voir l'exemple&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Tout sur l'API JavaScript Google Maps sur &lt;a href="http://www.google.com/apis/maps/documentation/"&gt;http://www.google.com/apis/maps/documentation/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4072999374239909624?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4072999374239909624/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4072999374239909624&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4072999374239909624'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4072999374239909624'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/10/api-javascript-google-maps.html' title='API JavaScript Google Maps'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7062417263490101564</id><published>2006-10-02T14:59:00.000+02:00</published><updated>2006-10-02T15:04:59.222+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FAI'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Internet et la fibre optique (très haut débit)</title><content type='html'>Ca y est Free se lance dans la fibre optique afin de contrer France Télécom et de prendre de l'avance sur ses concurrents. Voilà à quoi vont ressembler l'offre France Télécom et l'offre Free :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.zdnet.fr/actualites/telecoms/0,39040748,39303658,00.htm"&gt;Très haut débit: France Télécom choisit la fibre optique à 100 Mbits/s&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.matbe.com/actualites/14303/free-fibre-optique/"&gt;Free: fibre optique et gratuité&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7062417263490101564?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7062417263490101564/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7062417263490101564&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7062417263490101564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7062417263490101564'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/10/internet-et-la-fibre-optique-trs-haut.html' title='Internet et la fibre optique (très haut débit)'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-3663746363628835368</id><published>2006-09-26T09:57:00.000+02:00</published><updated>2006-09-26T10:09:07.898+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Retour d'expérience sur Google Web Toolkit</title><content type='html'>Stéphane Traumat a eu la gentillesse de bien vouloir faire un retour d'expérience sur Google Web Toolkit : &lt;a href="http://www.scub.net/blogs/straumat/?postid=4"&gt;Retour d'expérience sur Google Web Toolkit&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;J'aime bien cet article car cela reflète assez bien ce que je pense de GWT.&lt;br /&gt;&lt;br /&gt;PS : Vu sur &lt;a href="http://www.application-servers.com/"&gt;a19s.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-3663746363628835368?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/3663746363628835368/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=3663746363628835368&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3663746363628835368'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/3663746363628835368'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/retour-dexprience-sur-google-web.html' title='Retour d&apos;expérience sur Google Web Toolkit'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-2453015058411040316</id><published>2006-09-25T13:41:00.000+02:00</published><updated>2006-09-25T13:45:00.449+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ca vient du web'/><title type='text'>Pourquoi les utilisateurs finaux refusent-ils les mises à jours</title><content type='html'>Dans cet article l'auteur explique pourquoi les utilisateurs finaux ont une telle résistance aux changements.&lt;br /&gt;Les leçons à tirer de cet article peuvent s'appliquer : aux applications web, aux spécifications, aux frameworks,...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.application-servers.com/links.do?reqCode=showLink&amp;amp;lid=3323" target="_blank"&gt;Why they don't upgrade (and what to do about it)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS : Article vu sur &lt;a href="http://www.application-servers.com"&gt;a19s.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-2453015058411040316?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/2453015058411040316/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=2453015058411040316&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2453015058411040316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/2453015058411040316'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/pourquoi-les-utilisateurs-finaux.html' title='Pourquoi les utilisateurs finaux refusent-ils les mises à jours'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5054453747691263934</id><published>2006-09-19T13:44:00.000+02:00</published><updated>2006-09-19T13:47:38.635+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Limitations avec Spring et RPC</title><content type='html'>Avec Spring, il est possible de faire très simplement des appels de procédures distants (RPC : Remote Procedure Call). Spring offre la possibilité d'exposer des services via RMI, HTTP, Burlap, Hessian, JAX RPC et/ou JMS. Mais chacune de ces technologies couplées avec Spring a des limitations supplémentaires :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;En effet certaines de ces technologies ne fonctionnent qu'avec un client à base de Spring, c'est le cas de RMI et de HTTP.&lt;/li&gt;&lt;li&gt;En revanche pour Burlap et Hessian n'oblige pas d'avoir un client à base de Spring. Par contre si Burlap et Hessian sont utilisés avec Hibernate, il y aura des problèmes de LazyInitialisationException. Dans ce cas, j'utilise une solution de contournement qui consiste à utiliser des TO (Transfer Objects) ou VO (Value Objects) se sont de simples beans servant uniquement à transférer les données entre le client et le serveur. Du coup j'ai une architecture plus propre et je ne rencontre plus ce problème de LazyInitialisationException.&lt;/li&gt;&lt;/ol&gt;Les deux principales limitations étant citées, je complète cet article avec l'extrait du site de Spring qui explique tout cela avec plus de précisions.&lt;br /&gt;&lt;p style="font-style: italic;"&gt;"Each and every technology presented here has its drawbacks. You should carefully    consider you needs, the services your exposing and the objects you'll be sending    over the wire when choosing a technology.   &lt;/p&gt;&lt;p style="font-style: italic;"&gt;    When using RMI, it's not possible to access the objects through the HTTP protocol,    unless you're tunneling the RMI traffic. RMI is a fairly heavy-weight protocol    in that it support full-object serialization which is important when using a    complex data model that needs serialization over the wire. However, RMI-JRMP    is tied to Java clients: It is a Java-to-Java remoting solution.   &lt;/p&gt;&lt;p style="font-style: italic;"&gt;    Spring's HTTP invoker is a good choice if you need HTTP-based remoting but also    rely on Java serialization. It shares the basic infrastructure with RMI invokers,    just using HTTP as transport. Note that HTTP invokers are not only limited to    Java-to-Java remoting but also to Spring on both the client and server side.    (The latter also applies to Spring's RMI invoker for non-RMI interfaces.)   &lt;/p&gt;&lt;p style="font-style: italic;"&gt;    Hessian and/or Burlap might provide significant value when operating in a    heterogeneous environment, because they explicitly allow for non-Java clients.    However, non-Java support is still limited. Known problems include the serialization    of Hibernate objects in combination with lazily initializing collections. If you    have such a data model, consider using RMI or HTTP invokers instead of Hessian.   &lt;/p&gt;&lt;p style="font-style: italic;"&gt;    JMS can be useful for providing clusters of services and allowing the JMS broker       to take care of load balancing, discovery and auto-failover.       By default Java serialization is used when using JMS remoting but       the JMS provider could use a different mechanism for the wire formatting,       such as XStream to allow servers to be implemented in other technologies.   &lt;/p&gt;&lt;p style="font-style: italic;"&gt;    Last but not least, EJB has an advantage over RMI in that it supports standard    role-based authentication and authorization and remote transaction propagation.    It is possible to get RMI invokers or HTTP invokers to support security context    propagation as well, although this is not provided by core Spring: There are    just appropriate hooks for plugging in third-party or custom solutions here."   &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5054453747691263934?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5054453747691263934/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5054453747691263934&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5054453747691263934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5054453747691263934'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/limitations-avec-spring-et-rpc.html' title='Limitations avec Spring et RPC'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-8153101451551611675</id><published>2006-09-15T21:38:00.000+02:00</published><updated>2006-11-07T13:54:08.226+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel - Les streams avec java.io et java.util.zip</title><content type='html'>ByteArrayInputStream, StringBufferInputStream, FileInputStream, PipedInputStream, BufferedInputStream, CheckedInputStream, ZipInputStream, JarInputStream, ..., CharArrayReader, ... : On se perd toujours avec l'utilisation des I/O en Java tellement qu'il y en a. Et pourtant c'est très simple d'utilisation. Utiliser un stream ou bien un reader en Java est très simple, il faut bien évidement utiliser le bon stream pour effectuer le bon travail.&lt;br /&gt;&lt;br /&gt;Afin de s'y retrouver un peu avec tout cela, voilà un article qui aide à clarifier les choses et à se rappeler ce que l'on oublie trop souvent : &lt;a href="http://anisfrikha.developpez.com/tutoriel/java-io/"&gt;Tutoriel java.io&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Afin de compléter un peu la chose et de se rappeler comment utiliser l'API java.util.zip, ce &lt;a href="http://cyberzoide.developpez.com/java/zip/"&gt;tutoriel sur l'API ZIP&lt;/a&gt; est pas mal non plus.&lt;br /&gt;&lt;br /&gt;Biensur la documentation de référence est la javadoc Sun de java.io et java.util.zip&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;Attention &lt;/span&gt;: Si vous voulez zipper une arborescence contenant des répertoires vides et conserver cette structure dans votre fichier zip afin de récupérer strictement la même arborescence au moment du dé-zip, il faut que la ZipEntry qui est ajoutée au zip se termine par le caractère '/'. Ce caractère permet d'informer l'API qu'il s'agit d'un répertoire. Cela paraît tout bête comme cela mais j'ai dû utiliser l'API java.util.zip sur un projet et j'ai perdu un peu de temps à cause de cela, alors ne vous faites pas surprendre ;o).&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-8153101451551611675?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/8153101451551611675/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=8153101451551611675&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8153101451551611675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/8153101451551611675'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/les-streams-dans-javaio-et-javautilzip.html' title='Tutoriel - Les streams avec java.io et java.util.zip'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-664905098111232321</id><published>2006-09-11T12:59:00.000+02:00</published><updated>2006-09-11T13:13:46.306+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Les nouveautés de struts 2.x</title><content type='html'>Struts 2.x est en cours de développement et on ne connait pas encore la date de sortie de celui-ci, mais il est possible de consulter le &lt;a href="http://cwiki.apache.org/WW/release-plan-200.html" target="_blank"&gt;Release Plan de la version 2.0.0&lt;/a&gt;.&lt;br /&gt;Ayant déjà eu l'occasion de faire quelques tests avec une snapshot de struts 2.x, j'en profite pour vous faire un petit retour d'expérience car il y a des choses qui me plaisent bien dans la nouvelle approche struts :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le développement des actions struts permet désormais de masquer totalement le context HTTP, il devient donc possible de développer des actions struts sans faire de références aux classes de la spécification servlets (javax.servlets.*).&lt;/li&gt;&lt;li&gt;Du coup, les actions struts étant uniquement des beans, il devient facile de tester des actions struts avec &lt;a href="http://www.junit.org/" target="_blank"&gt;JUnit&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Il est également possible d'utiliser un mécasnime d'AOP pour les actions struts, utile par exemple pour faire du log ou bien de l'authentification.&lt;/li&gt;&lt;li&gt;Un autre point intéressant, c'est l'utilisation de &lt;a href="http://www.springframework.org/" target="_blank"&gt;spring&lt;/a&gt; est également intégré à cette nouvelle version de struts.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pour plus d'information voilà:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/WW/comparing-struts-1-and-2.html"&gt;Une comparaison entre Struts 1 et Struts 2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cwiki.apache.org/confluence/display/WW/Bootstrap"&gt;Le tutoriel de struts 2.x&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-664905098111232321?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/664905098111232321/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=664905098111232321&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/664905098111232321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/664905098111232321'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/struts-1x-est-mort-vive-struts-2x.html' title='Les nouveautés de struts 2.x'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-500479556719443747</id><published>2006-09-08T09:50:00.000+02:00</published><updated>2006-09-08T09:55:46.608+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Les nouveautés du JDK 6</title><content type='html'>Parmis les évolutions, on remarque des changements au niveau des swing et de AWT, les classiques améliorations de performances au niveau de la JVM lors de l'exécution (un travail a été effectué sur les opérations synchronisées).&lt;br /&gt;&lt;br /&gt;Pour plus d'information, allez sur &lt;a href="http://java.sun.com/javase/6/webnotes/features.html"&gt;http://java.sun.com/javase/6/webnotes/features.html&lt;/a&gt; pour voir toutes les nouveautés et le améliorations du futur JDK 6.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-500479556719443747?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/500479556719443747/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=500479556719443747&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/500479556719443747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/500479556719443747'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/les-nouveauts-du-jdk-6.html' title='Les nouveautés du JDK 6'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-4819679567397573867</id><published>2006-09-06T14:03:00.000+02:00</published><updated>2007-02-26T23:43:58.412+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tutoriels'/><title type='text'>Tutoriel - Développer un custom appender pour log4j</title><content type='html'>&lt;table class="revision_history"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Version&lt;/th&gt;&lt;th&gt;Date&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1.0.0&lt;/td&gt;&lt;td&gt;06/09/2006&lt;/td&gt;&lt;td&gt;Création de l'article.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a name="toc_4819679567397573867"&gt;&lt;/a&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Table des matières&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="#part_intro"&gt;I - Introduction&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_intro_goals"&gt;I-1 - But et portée du document&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_intro_why"&gt;I-2 - Pourquoi développer un custom appender pour log4j&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_customize"&gt;II - Développement et configuration de l'appender&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_customize_dev"&gt;II-1 - Développement de l'appender&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_customize_config"&gt;II-2 - Configuration de l'appender&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_customize_use"&gt;II-3 - Utilisation de l'appender&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_conclusion"&gt;III - Conclusion&lt;/a&gt;&lt;br /&gt;&lt;a href="#part_biblio"&gt;IV - Bibliographie&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_intro" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;I - Introduction&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_intro_goals" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;"&gt;1 - But et portée du document&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ce tutorial s'adresse aux personnes connaissant les bases de log4j (Logger, Appender, Category) et étant désireuse de savoir comment implementer un custom appender pour log4j.&lt;br /&gt;&lt;br /&gt;&lt;a name="part_intro_why" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;"&gt;2 - Pourquoi développer un custom appender pour log4j&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Certes log4j supporte un grand nombre d'appenders différents (JDBCAppender, JMSAppender, LF5Appender, NTEventLogAppender, NullAppender, SMTPAppender, SocketAppender, SyslogAppender, TelnetAppender, ConsoleAppender, FileAppender, RollingFileAppender, ... et bien d'autres encore) , mais peut-être avez vous besoin de développer un appender totalement propriétaire et non fourni par log4j pour répondre à des besoins bien spécifiques.&lt;br /&gt;&lt;br /&gt;Cela peut se faire très simplement en suivant ce tutoriel pas à pas et grace à la classe de base AppenderSkeleton de log4j biensur (Merci log4j ;-).&lt;br /&gt;&lt;br /&gt;&lt;a name="part_customize" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;II - Développement et configuration de l'appender&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_customize_dev" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;"&gt;1 - Développement de l'appender&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;import org.apache.log4j.AppenderSkeleton;&lt;br /&gt;import org.apache.log4j.spi.LoggingEvent;&lt;br /&gt;&lt;br /&gt;public class MyAppender extends AppenderSkeleton {&lt;br /&gt;&lt;br /&gt; public MyAppender() {&lt;br /&gt;     super();&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @see org.apache.log4j.AppenderSkeleton#requiresLayout()&lt;br /&gt;  */&lt;br /&gt; public boolean requiresLayout() {&lt;br /&gt;     return true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @see org.apache.log4j.AppenderSkeleton#append(LoggingEvent)&lt;br /&gt;  */&lt;br /&gt; protected void append(LoggingEvent event) {&lt;br /&gt;     String text = super.getLayout().format(event);&lt;br /&gt;     // A la place du print fait votre traitement&lt;br /&gt;     System.err.print(text);&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; /**&lt;br /&gt;  * @see org.apache.log4j.AppenderSkeleton#close()&lt;br /&gt;  */&lt;br /&gt; public void close() {&lt;br /&gt;     super.closed = true;&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;MyAppender.java&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_customize_config" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;"&gt;2 - Configuration de l'appender&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;table class="sample_code"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;log4j.rootLogger = DEBUG, MY_APPENDER&lt;br /&gt;&lt;br /&gt;log4j.appender.MY_APPENDER = MyAppender&lt;br /&gt;log4j.appender.MY_APPENDER.layout = org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.MY_APPENDER.layout.ConversionPattern = %c - %m%n&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;th&gt;log4j.properties&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_customize_use" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;"&gt;3 - Utilisation de l'appender&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;L'utilisation de l'appender dans votre application ce fait ensuite de manière totalement standard.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;logger.warn("Votre message");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name="part_conclusion" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;III - Conclusion&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Il est très simple de développer et d'integer un appender log4j propriétaire dans une application.&lt;br /&gt;Dans mon cas j'ai dû faire cela pour logger des logs fonctionnels dans un JTextArea d'une application swing.&lt;br /&gt;&lt;br /&gt;&lt;a name="part_biblio" href="#toc_4819679567397573867"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;IV - Bibliographie&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://logging.apache.org/log4j/docs/index.html"&gt;Site officiel de log4j&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-4819679567397573867?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/4819679567397573867/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=4819679567397573867&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4819679567397573867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/4819679567397573867'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/09/tutoriel-dvelopper-un-custom-appender.html' title='Tutoriel - Développer un custom appender pour log4j'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6119695247232715769</id><published>2006-08-31T22:20:00.000+02:00</published><updated>2006-08-31T23:01:33.222+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Google Web Toolkit et ses boîtes à outils</title><content type='html'>Certes GWT est tout récent mais on commence déjà a voir apparaître des outils et des sites dédié à GWT. Voici une petite liste non exhaustive de ce que l'on peut trouver aujourd'hui :&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.googlipse.com/"&gt;Googlipse&lt;/a&gt; : C'est un plugin eclipse permettant de faire du GWT. La dernière version est en 0.03.1 et date du 22 juillet 2006.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gwt-widget.sourceforge.net/"&gt;GWT Widget Library&lt;/a&gt; : C'est une gallerie de Widgets GWT qui permet de compléter la gallerie de widget de GWT par défaut. Par exemple, on y trouve un widget calculatrice, un widget color, ... et bien d'autres. La dernière version est en 0.1.0 et date du 11 août 2006.&lt;/li&gt;&lt;li&gt;&lt;a href="http://gwt.components.googlepages.com/"&gt;GWT Component Library&lt;/a&gt; : C'est une autre gallerie de Widgets GWT.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://gwtpowered.org/"&gt;gwtPowered&lt;/a&gt; : Site contenant énormément de pointeurs vers des widgets, des outils et des ressources liées à GWT.&lt;/li&gt;&lt;li&gt;&lt;a href="http://google.wikia.com/wiki/Google_Web_Toolkit"&gt;Wiki Officiel de GWT&lt;/a&gt; : Ce wiki contient également des pointeurs vers des widgets, des outils et des ressources liées à GWT. Mais il y a pleins d'autres choses très intéressantes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://groups.google.com/group/Google-Web-Toolkit"&gt;Forum GWT&lt;/a&gt; : Pour rechercher des questions/solutions à vos problèmes, mais également pour poser vos questions. Ce forum est vraiment bien fait et agréable à utiliser merci AJAX ;-).&lt;/li&gt;&lt;li&gt;&lt;a href="http://googlewebtoolkit.blogspot.com/"&gt;Blog GWT&lt;/a&gt; : Blog dédié à GWT, pour vous tenir informé des nouveautés.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6119695247232715769?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6119695247232715769/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6119695247232715769&amp;isPopup=true' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6119695247232715769'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6119695247232715769'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/google-web-toolkit-et-ses-botes-outils.html' title='Google Web Toolkit et ses boîtes à outils'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1139729775883729966</id><published>2006-08-26T17:19:00.000+02:00</published><updated>2006-08-26T17:23:38.518+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='frameworks'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>DWR : Direct Web Remoting</title><content type='html'>DWR est un framework permettant de faire de l'ajax en toute simplicité, surtout lorsque vous souhaitez appeler depuis votre page web via du javascript des services exposé côté serveur.&lt;br /&gt;&lt;br /&gt;La force de DWR réside dans sa simplicité et sa légèreté.&lt;br /&gt;&lt;ul&gt;&lt;b&gt;Bibliographie&lt;/b&gt;&lt;li&gt;Le site officiel : &lt;a href="http://getahead.ltd.uk/dwr/"&gt;http://getahead.ltd.uk/dwr/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Tutorial en français sur le site de supinfo : &lt;a href="http://www.supinfo-projects.com/fr/2005/dwr_ajax_java_2005_fr/"&gt;http://www.supinfo-projects.com/fr/2005/dwr_ajax_java_2005_fr/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1139729775883729966?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1139729775883729966/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1139729775883729966&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1139729775883729966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1139729775883729966'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/dwr-direct-web-remoting.html' title='DWR : Direct Web Remoting'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-5453383604380399076</id><published>2006-08-25T23:31:00.000+02:00</published><updated>2006-08-25T23:39:07.923+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><title type='text'>Lightbox, un diaporama en javascript</title><content type='html'>Lightbox est un diaporama en javascript, facilement intégrable dans des applications web. Pour plus d'information rendez-vous sur : &lt;a href="http://www.huddletogether.com/projects/lightbox2/"&gt;http://www.huddletogether.com/projects/lightbox2/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-5453383604380399076?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/5453383604380399076/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=5453383604380399076&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5453383604380399076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/5453383604380399076'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/lightbox-un-diaporama-en-javascript.html' title='Lightbox, un diaporama en javascript'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-1310331405273758330</id><published>2006-08-25T17:17:00.000+02:00</published><updated>2006-08-25T17:20:48.146+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='protocole'/><title type='text'>Le protocole HTTP</title><content type='html'>Les développeurs d'applications Web/J2EE utilisent le protocole HTTP sans cesse dans leurs applications, mais ils ne savent pas toujours ce qu'est concrètement le protocole HTTP ou bien oublient parfois simplement quelques rudiments de ce protocole.&lt;br /&gt;&lt;br /&gt;Pour cela allez faire un tour sur &lt;a href="http://www.commentcamarche.net/internet/http.php3"&gt;http://www.commentcamarche.net/internet/http.php3&lt;/a&gt;, afin de se remémorer les rudiments du HTTP, la signification des codes d'erreurs, les en-têtes HTTP, ...&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-1310331405273758330?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/1310331405273758330/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=1310331405273758330&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1310331405273758330'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/1310331405273758330'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/le-protocole-http.html' title='Le protocole HTTP'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-7061884889629192851</id><published>2006-08-23T23:39:00.000+02:00</published><updated>2006-08-23T23:40:55.241+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Gmail intègre le lecteur MP3 en flux direct de Google</title><content type='html'>Google vient d'ajouter une fonctionnalité intéressante dans son service de courrier Gmail. Le moteur a intégré son lecteur MP3 en ligne directement dans la boîte de réception en ligne, pour éviter les téléchargements inutiles.&lt;br /&gt;&lt;br /&gt;L'utilisateur pourra ainsi lire directement un fichier MP3 en pièce jointe, sans le télécharger préalablement sur son PC. Le lecteur joue alors le morceau directement dans une fenêtre du navigateur en « streaming », une idée plutôt sympa. Notez que cette option n'est pour l'instant disponible que pour la version anglaise (US) de la boîte de réception GMail, une option à changer dans ses paramètres de langue.&lt;br /&gt;&lt;br /&gt;Plus généralement, il sera aussi possible de lire tout type de MP3 en ligne via cette adresse : « http://mail.google.com/mail/html/audio.swf?audioUrl=*** », en remplaçant « *** » par l'URL complète du fichier à lire. L'adresse fonctionne sans avoir à ouvrir une session Gmail. Voici &lt;a class="souligne" href="http://www.pcinpact.com/link.php?url=http%3A%2F%2Fmail.google.com%2Fmail%2Fhtml%2Faudio.swf%3FaudioUrl%3Dhttp%3A%2F%2Fwww.catbirdseat.org%2Fcatbirdseat%2Faug06%2Fblog.mp3" target="_blank"&gt;un exemple&lt;/a&gt; avec l'hymne du bloggeur (oui oui...).&lt;br /&gt;&lt;br /&gt;PS : Ce lecteur MP3 est en fait le lecteur vidéo de Google, qui ne servira ici que pour le son. Et la méthode décrite précédemment fonctionne en fait pour tous les fichiers, et notamment les vidéos. Notez enfin que ce lecteur MP3 peut s'intégrer directement dans une page Web, sur un site quelconque. Tant que le fichier à lire n'est pas piraté bien sûr &lt;em&gt;;-)&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-7061884889629192851?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/7061884889629192851/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=7061884889629192851&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7061884889629192851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/7061884889629192851'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/gmail-intgre-le-lecteur-mp3-en-flux.html' title='Gmail intègre le lecteur MP3 en flux direct de Google'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1165385818525541410.post-6933949946006080834</id><published>2006-08-22T09:22:00.000+02:00</published><updated>2006-08-23T23:11:10.764+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tools'/><title type='text'>Outils pour analyser les projets open source</title><content type='html'>Voila un outils très intéressant permettant d'analyser et de comparer rapidement des projets open source. Cet outils permet d'avoir différentes informations sur le projet (licence, nombre de développeurs, activité du projets, ... et des tas d'autres informations).&lt;br /&gt;&lt;br /&gt;Cet outils est très intéressants lorsque l'on ne connaît pas un projet open source et que l'on souhaite avoir rapidement une vue d'ensemble du projet (évolution à cours terme, à long terme, durée de vie du projet, viabilité, ...).&lt;br /&gt;&lt;br /&gt;Le site officiel : &lt;a href="http://www.ohloh.net/"&gt;http://www.ohloh.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Exemple avec le projet hibernate : &lt;a href="http://www.ohloh.net/opensource/software/hibernate"&gt;http://www.ohloh.net/opensource/software/hibernate&lt;/a&gt;&lt;br /&gt;Exemple avec le projet spring : &lt;a href="http://www.ohloh.net/opensource/software/springframework"&gt;http://www.ohloh.net/opensource/software/springframework&lt;/a&gt;&lt;br /&gt;Après une étude rapide des projets hibernate et spring, on s'apperçoit que spring est un projet assez jeune et qu'a l'inverse hibernate est un projet moins jeune.&lt;div class="blogger-post-footer"&gt;&lt;hr/&gt;
&lt;a href="http://java4it.blogspot.com"&gt;techno.blog("java4it")&lt;/a&gt;&lt;br/&gt;
Points de vues et discussions sur les technologies liées à Java/J2EE et au Web.
&lt;hr/&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1165385818525541410-6933949946006080834?l=java4it.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://java4it.blogspot.com/feeds/6933949946006080834/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1165385818525541410&amp;postID=6933949946006080834&amp;isPopup=true' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6933949946006080834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1165385818525541410/posts/default/6933949946006080834'/><link rel='alternate' type='text/html' href='http://java4it.blogspot.com/2006/08/outils-pour-analyser-les-projets-open.html' title='Outils pour analyser les projets open source'/><author><name>Ludovic BERT</name><uri>http://www.blogger.com/profile/06745319898316226990</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_ASMxX831Doo/TIAJL_unpYI/AAAAAAAABBI/H26vXtD8UYA/S220/ludo_2010.jpg'/></author><thr:total>0</thr:total></entry></feed>
