<?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-381976882413347392</id><updated>2012-02-13T03:14:46.096-08:00</updated><category term='connector'/><category term='sox'/><category term='jonas'/><category term='xsl'/><category term='installation'/><category term='rsync'/><category term='encoding'/><category term='C'/><category term='jndi'/><category term='annotations'/><category term='maven'/><category term='word'/><category term='sqlplus'/><category term='sybase'/><category term='resolved'/><category term='methode'/><category term='validation'/><category term='pmd'/><category term='recommandation'/><category term='balise'/><category term='cursor'/><category term='threadgroup'/><category term='configuration'/><category term='resources'/><category term='spring'/><category term='xpath'/><category term='parcours répertoire'/><category term='mod_proxy'/><category term='forwarding'/><category term='comparatif'/><category term='ligne de commande'/><category term='performance'/><category term='eclipse'/><category term='archiva'/><category term='substitution'/><category term='backup'/><category term='patch'/><category term='xml'/><category term='jsf'/><category term='statistique'/><category term='mysql'/><category term='java'/><category term='authentication'/><category term='xsd'/><category term='httpd'/><category term='webdav'/><category term='msec'/><category term='démarrage'/><category term='mysql export dump load'/><category term='crypt'/><category term='xe client'/><category term='compile'/><category term='gui'/><category term='oracle'/><category term='raisonnable'/><category term='qualité'/><category term='report'/><category term='metrologie'/><category term='load balancing'/><category term='jdom'/><category term='jpa'/><category term='common-httpclient'/><category term='surefire'/><category term='norme'/><category term='coding'/><category term='intégration continue'/><category term='bean'/><category term='VirtualHost'/><category term='ubuntu'/><category term='jms'/><category term='distant'/><category term='generation'/><category term='error'/><category term='hors connexion'/><category term='subversion'/><category term='svn'/><category term='openxml'/><category term='securite'/><category term='mail'/><category term='datasource'/><category term='smtp'/><category term='proxy'/><category term='checkstyle'/><category term='dom'/><category term='grub'/><category term='jdbc'/><category term='emf'/><category term='audir'/><category term='javamail'/><category term='des'/><category term='rsa'/><category term='terminologie'/><category term='appfuse'/><category term='postfix'/><category term='tomcat'/><category term='initialisation'/><category term='joram'/><category term='splash'/><category term='classloader'/><category term='find'/><category term='rad'/><category term='metrics'/><category term='best practice'/><category term='jetty'/><category term='stereo'/><category term='contexte'/><category term='windows'/><category term='encodage'/><category term='sax'/><category term='SSL'/><category term='code'/><category term='port'/><category term='ncss'/><category term='axis2'/><category term='jmx'/><category term='merge'/><category term='deploy'/><category term='apache'/><category term='linux'/><category term='debug'/><category term='hibernate'/><category term='key'/><category term='browse'/><category term='cvs'/><category term='revision'/><category term='proxy apt ubuntu'/><category term='opensuse'/><category term='mandriva'/><category term='relay'/><category term='document'/><category term='mount'/><category term='startup'/><category term='remote'/><category term='ssh'/><category term='hudson'/><category term='context'/><category term='maven deploy deploy-file'/><category term='thread'/><category term='web-service'/><category term='jmeter'/><category term='queue'/><category term='log4j'/><category term='profils'/><category term='cargo'/><category term='clone'/><category term='svn apache install unbuntu'/><category term='synchronisation'/><category term='sql'/><category term='requete'/><category term='namespace'/><category term='ajp13'/><category term='ubuntu https'/><category term='log'/><category term='samba'/><category term='mono'/><category term='iptables'/><category term='axis'/><category term='expression régulière'/><category term='jconsole'/><category term='certificat'/><category term='xstream'/><category term='recursively'/><title type='text'>The French Hack</title><subtitle type='html'>Notes de campagnes accumulées pendant les différents projets auxquels j'ai participé</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>97</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2664617319918357223</id><published>2011-12-03T07:48:00.000-08:00</published><updated>2011-12-03T07:48:34.903-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu https'/><title type='text'>Activer HTTPS de httpd sur ubuntu</title><content type='html'>Pour activer https sur Ubuntu&lt;br /&gt;&lt;br /&gt;a2ensite default-ssl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2664617319918357223?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2664617319918357223/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2664617319918357223' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2664617319918357223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2664617319918357223'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/12/activer-https-de-httpd-sur-ubuntu.html' title='Activer HTTPS de httpd sur ubuntu'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1250171502454074446</id><published>2011-12-02T05:32:00.000-08:00</published><updated>2011-12-02T05:32:39.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Update Grub in Ubuntu</title><content type='html'>In order to start have your windows first in your Ubuntu 11.10, just change the order of the files in /etc/grub.d by changing the number starting each entry.&lt;br /&gt;&lt;br /&gt;By default, the directory contains the files : 00_header, 01_linux, 02_linux_xen, 03_os_probe etc. &lt;br /&gt;If you change the file names so that numbers looks like 00_header, 01_os_probe, 02_linux, 03_linux_xen&lt;br /&gt;&lt;br /&gt;And then run grub-update (to update /boot/grub/grub.cfg) in command line. Windows will launch first at startup.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1250171502454074446?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1250171502454074446/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1250171502454074446' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1250171502454074446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1250171502454074446'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/12/update-grub-in-ubuntu.html' title='Update Grub in Ubuntu'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3677855359026024722</id><published>2011-10-26T00:21:00.000-07:00</published><updated>2011-12-03T07:47:39.800-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='proxy apt ubuntu'/><title type='text'>Aptitude sur Ubuntu</title><content type='html'>&lt;h2&gt;Installation a travers un proxy&lt;/h2&gt;&lt;br /&gt;vi /etc/apt/apt.conf.d/05aptitude&lt;br /&gt;&lt;br /&gt;Ajouter la ligne :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Acquire::http::Proxy &amp;quot;http://myusername:mypasswd@myproxy:3128&amp;quot;;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Rechercher un package à partir de son nom&lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;root@ubuntu:/home/clement# apt-cache search jetty&lt;br /&gt;libjetty-extra - Java servlet engine and webserver -- extra libraries&lt;br /&gt;libjetty-extra-java - Java servlet engine and webserver -- extra libraries&lt;br /&gt;libjetty-java - Java servlet engine and webserver -- core libraries&lt;br /&gt;libjetty-java-doc - Javadoc for the Jetty API&lt;br /&gt;jetty - Java servlet engine and webserver&lt;br /&gt;liblogback-java - flexible logging library for Java&lt;br /&gt;liblogback-java-doc - flexible logging library for Java - documentation&lt;br /&gt;liboauth-signpost-java - simple OAuth message signing for Java&lt;br /&gt;libspring-security-2.0-java-doc - documentation for Spring Security 2.0&lt;br /&gt;libspring-security-acl-2.0-java - modular Java/J2EE application security framework - ACL&lt;br /&gt;libspring-security-core-2.0-java - modular Java/J2EE application security framework - Core&lt;br /&gt;libspring-security-ntlm-2.0-java - modular Java/J2EE application security framework - NTLM&lt;br /&gt;libspring-security-portlet-2.0-java - modular Java/J2EE application security framework - Portlet&lt;br /&gt;libspring-security-taglibs-2.0-java - modular Java/J2EE application security framework - Taglibs&lt;br /&gt;solr-common - enterprise search server based on Lucene - common files&lt;br /&gt;solr-jetty - enterprise search server based on Lucene - Jetty integration&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3677855359026024722?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3677855359026024722/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3677855359026024722' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3677855359026024722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3677855359026024722'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/10/aptiptude-sur-ubuntu.html' title='Aptitude sur Ubuntu'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total><georss:featurename>France</georss:featurename><georss:point>46.227638 2.213749000000007</georss:point><georss:box>41.328188 -5.397050999999993 51.127088 9.824549000000008</georss:box></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3553506575290515250</id><published>2011-03-01T00:28:00.000-08:00</published><updated>2011-03-01T00:30:53.451-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql export dump load'/><title type='text'>Dump et load avec MySQL</title><content type='html'>How to make a dump&lt;br /&gt;&lt;br /&gt;mysqldump -umyuser -pmypasswd mydb &amp;gt;  dumpinteg_20110228.sql&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;How to load a dump&lt;br /&gt;&lt;br /&gt;mysql -umyuser -pmypasswd mydb --default-character-set=utf8 &amp;lt; dumpinteg_20110228.sql&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3553506575290515250?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3553506575290515250/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3553506575290515250' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3553506575290515250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3553506575290515250'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/03/dump-et-load-avec-mysql.html' title='Dump et load avec MySQL'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2380942185395060214</id><published>2011-02-22T08:26:00.000-08:00</published><updated>2011-03-10T14:48:29.068-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='svn apache install unbuntu'/><title type='text'>Installer un serveur subversion sur apache sur Ubuntu</title><content type='html'>Nous allons installer simplement un serveur svn &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;1. Installer les packages:&lt;br /&gt;apt-get install subversion libapache2-svn&lt;br /&gt;&lt;br /&gt;ou &lt;br /&gt; &lt;br /&gt;yum install mod_dav_svn &lt;br /&gt;&lt;br /&gt;(yum search dav)&lt;br /&gt;2. Créer le répository&lt;br /&gt;&lt;br /&gt;mkdir /var/svn&lt;br /&gt;svnadmin create /var/svn/&lt;br /&gt;chown -R www-data:www-data /var/svn/&lt;br /&gt;chmod -R g+ws /var/svn/&lt;br /&gt;&lt;br /&gt;3. Créer le fichier d'authentification&lt;br /&gt;&lt;br /&gt;htpasswd -c -m /etc/apache2/dav_svn.passwd &lt;br /&gt;&lt;br /&gt;4. Configurer apache&lt;br /&gt;&amp;lt;Location /svn &amp;gt;&lt;br /&gt;DAV svn&lt;br /&gt;SVNPath /var/svn&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthName "Subversion Repository"&lt;br /&gt;AuthUserFile /etc/apache2/dav_svn.passwd&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/Location /svn &amp;gt;&lt;br /&gt;5.Redémarrer Apache&lt;br /&gt;/etc/init.d/apache2 restart&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2380942185395060214?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2380942185395060214/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2380942185395060214' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2380942185395060214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2380942185395060214'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/02/installer-un-serveur-subversion-sur.html' title='Installer un serveur subversion sur apache sur Ubuntu'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-142979855751007157</id><published>2011-02-21T06:47:00.000-08:00</published><updated>2011-02-21T06:52:47.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven deploy deploy-file'/><title type='text'>deploiement d'un fichier</title><content type='html'>Pour déployer un fichier sur archiva :&lt;br /&gt;&lt;br /&gt;clement@clement-laptop:~/Bureau$ mvn deploy:deploy-file -Dfile=gwt-servlet.jar -DgroupId=com.google.gwt  -DartifactId= -Dversion=1.3.0 -Dpackaging=jar  -DrepositoryId=archiva.internal -Durl=http://archiva/repository/internal -DgeneratePom=true &lt;br /&gt;&lt;br /&gt;Attention a bien fournir le proxy correct (https) et a fournir le user Id &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt; &amp;lt;proxies&amp;gt;&lt;br /&gt;     &amp;lt;proxy&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;optional&amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;&lt;br /&gt;      &amp;lt;protocol&amp;gt;http https&amp;lt;/protocol&amp;gt;&lt;br /&gt;      &amp;lt;host&amp;gt;proxy.mdp&amp;lt;/host&amp;gt;&lt;br /&gt;      &amp;lt;port&amp;gt;3128&amp;lt;/port&amp;gt;&lt;br /&gt;      &amp;lt;nonProxyHosts&amp;gt;vmjirarh01&amp;#124;archiva&amp;lt;/nonProxyHosts&amp;gt;&lt;br /&gt;    &amp;lt;/proxy&amp;gt;&lt;br /&gt;  &amp;lt;/proxies&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;server&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;archiva.internal&amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;username&amp;gt;upload&amp;lt;/username&amp;gt;&lt;br /&gt;      &amp;lt;password&amp;gt;ftj0bs-09&amp;lt;/password&amp;gt;&lt;br /&gt;    &amp;lt;/server&amp;gt;&lt;br /&gt;    &amp;lt;server&amp;gt;&lt;br /&gt;      &amp;lt;id&amp;gt;archiva.snapshots&amp;lt;/id&amp;gt;&lt;br /&gt;      &amp;lt;username&amp;gt;upload&amp;lt;/username&amp;gt;&lt;br /&gt;      &amp;lt;password&amp;gt;ftj0bs-09&amp;lt;/password&amp;gt;&lt;br /&gt;    &amp;lt;/server&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-142979855751007157?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/142979855751007157/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=142979855751007157' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/142979855751007157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/142979855751007157'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2011/02/deploiement-dun-fichier.html' title='deploiement d&apos;un fichier'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-70821015406328147</id><published>2010-12-08T05:30:00.000-08:00</published><updated>2010-12-08T05:33:43.713-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ligne de commande'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Bréviaire d'Oracle</title><content type='html'>&lt;h2&gt;Se connecter en tant que sysdba&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Se connecter en avec l'utilisateur oracle (utilisateur unix) sur la machine hébergeant l'instance, puis :&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;sqlplus / as sysdba&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Créer un USER&lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;CREATE USER PHARERHCSD IDENTIFIED BY PHARERHCSD&lt;br /&gt;DEFAULT tablespace PHARERHCSD;&lt;br /&gt;&lt;br /&gt;GRANT CONNECT,RESOURCE,DBA to PHARERHCSD;&lt;br /&gt;&lt;br /&gt;connect PHARERHCSD/PHARERHCSD&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Lister toutes les tables&lt;/h2&gt;&lt;br /&gt;Lister toutes les tables de l'utilisateur&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;select * from user_tables&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Lister toutes les tables&lt;/b&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;select * from all_tables&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Create a tablespace&lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;create tablespace PHARERHCSD datafile '/data/ora/D59A001/u03/dta_PHARERHCSD.dbf'&lt;br /&gt;size 10M&lt;br /&gt;autoextend on maxsize 200M&lt;br /&gt;extent management local uniform size 64K;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Drop a tablespace&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;DROP TABLESPACE DTA_ELECTION_ISOPROD_20081216&lt;br /&gt;INCLUDING CONTENTS CASCADE CONSTRAINTS;&lt;br /&gt;DROP TABLESPACE tbs_02 INCLUDING CONTENTS AND DATAFILES;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Libérer de l'espace disque&lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;ALTER DATABASE DATAFILE '/data/ora/D59A001/u03/dta_ELECT_isoprod_20081216.dbf' offline DROP;&lt;br /&gt;conn / as sysdba&lt;br /&gt;shutdown immediate;&lt;br /&gt;startup mount&lt;br /&gt;host&lt;br /&gt;$ cp /u01/oradata/tools01.dbf /u06/oradata/tools01.dbf&lt;br /&gt;$ exit&lt;br /&gt;alter database rename file '/u01/oradata/tools01.dbf' to '/u06/oradata/tools01.dbf';&lt;br /&gt;alter database open&lt;br /&gt;host&lt;br /&gt;$ rm /u01/oradata/tools.01.dbf&lt;br /&gt;$ exit&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si le message est :&lt;br /&gt;ORA-01034: ORACLE not available, cela signifie que l'instance n'est pas démarrée. Et pour démarrer l'instance oracle :&lt;br /&gt;export ORACLE_SID&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;sqlplus /nolog&lt;br /&gt;connect as sysdba&lt;br /&gt;startup&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;Pour créer un tablespace&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;sqlplus system/pwd&lt;br /&gt;CREATE TABLESPACE MYTABLESPACE DATAFILE  '/export/oradata/mynamespace.dbf' size 5M MINIMUM EXTENT 65536 DEFAULT STORAGE (initial 1M next 1M MAXEXTENTS 500 PCTINCREASE 0);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Pour contrôler le listener : &lt;/b&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;lsnrctl stop&lt;br /&gt;lsnrctl start&lt;br /&gt;lsnrctl services&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Voici un exemple de fichier listener.ora&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora&lt;br /&gt;# Generated by Oracle configuration tools.&lt;br /&gt;&lt;br /&gt;LISTENER_MYDB =&lt;br /&gt; (DESCRIPTION_LIST =&lt;br /&gt;   (DESCRIPTION =&lt;br /&gt;     (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mycompany.com)(PORT = 1521))&lt;br /&gt;   )&lt;br /&gt; )&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;b&gt;Voici un exemple de fichier TNSNAMES.ORA&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;MYDB =&lt;br /&gt; (DESCRIPTION =&lt;br /&gt;   (ADDRESS = (PROTOCOL = TCP)(HOST = mymachine.mycompany.com)(PORT = 1521))&lt;br /&gt;   (CONNECT_DATA =&lt;br /&gt;     (SERVER = DEDICATED)&lt;br /&gt;     (SERVICE_NAME = mydb.mycompany.com)&lt;br /&gt;   )&lt;br /&gt; )&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si le message est no services started il y a une erreur d'écriture dans le fichier listener.ora&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Exporter des données, créer des dumps oracle : &lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;exp userid=MYUSERFROM@MYSID file=D:\export_full.dump log=d:\export_full.log&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Importer des données, insérer des dumps oracles : &lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;imp system/mymdp@mydb file=/local/schemas/mydbdump.dmp FULL=Y ROWS=Y Ignore=Y FROMUSER=MYSRCTABLESPACE TOUSER=MYDSTTABLESPACE&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ou&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;imp system/ouch  ROWS=Y Ignore=Y  file=D:\export_full.dump TOUSER=MYUSERFROM FROMUSER=MYUSERFROM&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Créer un user&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;create user myuser identified by myuser_pwd default tablespace MYTABLESPACE temporary tablespace TEMP;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Affecter les droits à cet utilisateur : &lt;/h2&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;grant connect,resource to mydb;&lt;br /&gt;Grant succeeded.&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Vérifier que l'on peut se connecter avec cet utilisateur&lt;br /&gt;&lt;br /&gt;connect myuser/mypwd&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Affecter à cet utilisateur le namespace par défauts&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;ALTER USER myuser  QUOTA UNLIMITED ON MYTABLESPACE;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Créer une instance ORACLE&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Plusieurs instances peuvent tourner sur un même numéro de port. Le SID permet de faire la distinction. Dans le plupart des cas, il vaut mieux éviter de créer de nouvelles instances.&lt;br /&gt;Il est suffisant de créer un nouvel utilisateur, l'utilisateur est une notion confondue avec celle du schéma.&lt;br /&gt;&lt;br /&gt;Copier le fichier&lt;br /&gt;dbca.rsp et l'éditer&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;dbca -progress_only -responseFile dbca.rsp&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;L'instance est créee&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-70821015406328147?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/70821015406328147/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=70821015406328147' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/70821015406328147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/70821015406328147'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/12/breviaire-doracle.html' title='Bréviaire d&apos;Oracle'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4315272567962363965</id><published>2010-12-01T02:38:00.000-08:00</published><updated>2010-12-08T05:36:09.835-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqlplus'/><category scheme='http://www.blogger.com/atom/ns#' term='xe client'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Installer  sqlplus de la version XE (client et serveur)</title><content type='html'>Oracle propose une distribution libre de sa base avec XE(expresse edition). &lt;br /&gt;Téléchargez &lt;a href="http://www.oracle.com/technetwork/database/express-edition/downloads/index.html"&gt;oracle-xe-client-10.2.0.1-1.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Puis installez  :&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;rpm -i oracle-xe-client-10.2.0.1-1.0.rpm&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt; &lt;br /&gt;Comme il fallait s'y attendre, ORACLE ne faitrien pour nous simplifier la tâche. Car à ce point, rien n'est fait :&lt;br /&gt;Il faut d'abord créer le répertoire de configuration :&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;mkdirhier /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Puis&lt;br /&gt;La variable définir la variable TNS_ADMIN pour qu'elle pointe sur le répertoire de configuration :&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;export TNS_ADMIN=/usr/lib/oracle/xe/app/oracle/product/10.2.0/client/network/admin/&lt;br /&gt;export ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server&lt;br /&gt;export ORACLE_SID=ARCHIVER&lt;br /&gt;export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`&lt;br /&gt;PATH=$ORACLE_HOME/bin:$PATH&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Le fichier tnsnames.ora contient les informations suivantes&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;MYSID =&lt;br /&gt;  (DESCRIPTION =&lt;br /&gt;    (ADDRESS = (PROTOCOL = TCP)(HOST = 66.65.66.66)(PORT = 1521))&lt;br /&gt;    (CONNECT_DATA =&lt;br /&gt;      (SERVER = DEDICATED)&lt;br /&gt;      (SERVICE_NAME = ARCHIVER)&lt;br /&gt;    )&lt;br /&gt;  )&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;On s'y connecte ensuite par la ligne de commande :&lt;/p&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;sqlplus MYUSER/MYPWD@MYSID&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4315272567962363965?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4315272567962363965/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4315272567962363965' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4315272567962363965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4315272567962363965'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/12/installer-sqlplus-gratuit-de-la-version.html' title='Installer  sqlplus de la version XE (client et serveur)'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6651252082387475354</id><published>2010-11-29T06:48:00.000-08:00</published><updated>2011-02-20T05:40:42.275-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='forwarding'/><category scheme='http://www.blogger.com/atom/ns#' term='ssh'/><title type='text'>Faire du port forwarding à l'aide de SSH</title><content type='html'>Pour faire du port forwarding, éditer le fichier .ssh/config et lui donne le contenu suivant&lt;br /&gt;(Ici le port 80 de la machine est forwardée sur la machine 55.6.110.96 sur le port 1521)&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Host 127.0.0.1&lt;br /&gt;        LocalForward 80 55.6.110.96:1521&lt;br /&gt;        GatewayPorts yes&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Pour que la connexion fonctionne, il est nécessaire que le programme ssh soit actif (C'est à dire qu'il soit démarré et figure dans les process de la machine locale). Il est également possible de procéder à l'opération inverse en se servant de la commande RemotePort&lt;br /&gt;&lt;br /&gt;To set a specific user to connect a remot host&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Host myhost&lt;br /&gt;        User myuser&lt;br /&gt;        ForwardX11 yes    &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6651252082387475354?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6651252082387475354/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6651252082387475354' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6651252082387475354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6651252082387475354'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/11/faire-du-port-forwarding-laide-de-ssh.html' title='Faire du port forwarding à l&apos;aide de SSH'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7900450924851372551</id><published>2010-11-29T06:39:00.000-08:00</published><updated>2010-11-29T06:40:29.409-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='log4j'/><title type='text'>Externaliser la configuration de ses webapp</title><content type='html'>Dans les webapps utilisant spring il est possible d'externaliser sa configuration à l'aide de variables d'environnement pour log4j : &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;bean id=&amp;quot;log4jConfigurer&amp;quot;&lt;br /&gt;class=&amp;quot;org.springframework.beans.factory.config.MethodInvokingFactoryBean&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;targetClass&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;org.springframework.util.Log4jConfigurer&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;targetMethod&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;initLogging&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;property name=&amp;quot;arguments&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;list&amp;gt;&lt;br /&gt;&amp;lt;value&amp;gt;${MYREP_CONF}/log4j.xml&amp;lt;/value&amp;gt;&lt;br /&gt;&amp;lt;!-- or you could use an absolute path: &amp;lt;value&amp;gt;file:D:\\etc\\myapp\\log4j.properties&amp;lt;/value&amp;gt; --&amp;gt;&lt;br /&gt;&amp;lt;/list&amp;gt;&lt;br /&gt;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7900450924851372551?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7900450924851372551/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7900450924851372551' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7900450924851372551'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7900450924851372551'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/11/externaliser-la-configuration-de-ses.html' title='Externaliser la configuration de ses webapp'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6541514278267190043</id><published>2010-11-25T08:40:00.001-08:00</published><updated>2010-11-25T08:41:37.523-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='forwarding'/><category scheme='http://www.blogger.com/atom/ns#' term='port'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><title type='text'>Port forwarding à l'aide de iptable</title><content type='html'>&lt;h2&gt;Ip/Port rewriting&lt;/h2&gt;&lt;br /&gt;Ces commandes se passent en root&lt;br /&gt;&lt;p&gt;Ip table permet de forwarder des ports d'une machine vers une autre.&lt;br&gt;&lt;br /&gt;Les instructions sont à renouveler à chaque démarrage de la machine&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code panel" style="border-width: 1px;"&gt;&lt;div class="codeContent panelContent"&gt;&lt;br /&gt;&lt;pre class="code-java"&gt;#Réécriture du port d'un paquet&lt;br /&gt;iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 1521 -j DNAT --to 55.6.110.96:1521&lt;br /&gt;&lt;br /&gt;iptables -A INPUT -p tcp -m state --state NEW --dport 1521 -i eth0 -j ACCEPT&lt;br /&gt;#Sécurité par défaut autorise l'accès à la chaine forward&lt;br /&gt;echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;echo 1 &amp;gt; /proc/sys/net/ipv6/ip_forward&lt;br /&gt;&lt;br /&gt;# Pour intercepter les paquets à destination d'une ip différente de celle de l'&lt;span class="code-keyword"&gt;interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pour lister les chaines principales&lt;/p&gt;&lt;br /&gt;&lt;div class="code panel" style="border-width: 1px;"&gt;&lt;div class="codeContent panelContent"&gt;&lt;br /&gt;&lt;pre class="code-java"&gt;iptable -L&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pour lister toutes les de nat (ip/port rewriting)&lt;/p&gt;&lt;br /&gt;&lt;div class="code panel" style="border-width: 1px;"&gt;&lt;div class="codeContent panelContent"&gt;&lt;br /&gt;&lt;pre class="code-java"&gt;iptables -L -t nat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Pour supprimer les règles&lt;/p&gt;&lt;br /&gt;&lt;div class="code panel" style="border-width: 1px;"&gt;&lt;div class="codeContent panelContent"&gt;&lt;br /&gt;&lt;pre class="code-java"&gt;iptables -F -t nat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6541514278267190043?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6541514278267190043/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6541514278267190043' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6541514278267190043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6541514278267190043'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/11/port-forwarding-laide-de-iptable.html' title='Port forwarding à l&apos;aide de iptable'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4844706123105644823</id><published>2010-11-04T02:31:00.000-07:00</published><updated>2010-11-04T02:39:54.243-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mod_proxy'/><category scheme='http://www.blogger.com/atom/ns#' term='jetty'/><category scheme='http://www.blogger.com/atom/ns#' term='archiva'/><category scheme='http://www.blogger.com/atom/ns#' term='VirtualHost'/><category scheme='http://www.blogger.com/atom/ns#' term='connector'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Utiliser apache en frontal et forwarder les ports sur un Jetty</title><content type='html'>Je veux mettre en place un apache frontal lequel délègue sa requête à un serveur archiva ouvert sur le port 8081. Seul le port 80 est ouvert sur le réseau. Je ne souhaite pas de connecteur complexe, car il ne s'agit pas d'une question de performance. &lt;br /&gt;Pour ce faire, j'ai utilisé le mod_proxy de apache et les virtualHost.&lt;br /&gt;&lt;br /&gt;&lt;div class="code panel" style="border-width: 1px;" mce_style="border-width: 1px;"&gt;&lt;pre&gt;&amp;lt;IfModule mod_proxy.c&amp;gt;&lt;br /&gt;ProxyRequests Off&lt;br /&gt;&lt;br /&gt;&amp;lt;Proxy *&amp;gt;&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;&amp;lt;VirtualHost archiva:80&amp;gt;&lt;br /&gt;   ServerAdmin webmaster@dummy-host.example.com&lt;br /&gt;   ProxyPass / http:&lt;span class="code-comment"&gt;//archiva:8081/&lt;br /&gt;&lt;/span&gt;    ProxyPassReverse / http:&lt;span class="code-comment"&gt;//archiva:8081/&lt;br /&gt;&lt;/span&gt;    ErrorLog logs/dummy-host.example.com-error_log&lt;br /&gt;   CustomLog logs/dummy-host.example.com-access_log common&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p class="atl_conf_pad"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4844706123105644823?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4844706123105644823/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4844706123105644823' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4844706123105644823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4844706123105644823'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/11/utiliser-le-modproxy-modproxy.html' title='Utiliser apache en frontal et forwarder les ports sur un Jetty'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8447048706739860727</id><published>2010-09-28T00:49:00.001-07:00</published><updated>2010-09-28T00:49:47.801-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webdav'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Créer un partage Webdav sur Ubuntu 10.4</title><content type='html'>&lt;h2&gt;Installer WebSAV sur apache2&lt;/h2&gt;&lt;br /&gt;Ajouter les lignes suivantes dans le fichier /etc/apache2/sites-available/default&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Directory &amp;quot;/var/www/webdav/&amp;quot;&amp;gt;&lt;br /&gt;Options Indexes FollowSymLinks MultiViews&lt;br /&gt;AllowOverride None&lt;br /&gt;Order allow,deny&lt;br /&gt;allow from all&lt;br /&gt;&amp;lt;/Directory&amp;gt;&lt;br /&gt;Alias /webdav /var/www/webdav/&lt;br /&gt;&amp;lt;Location /webdav&amp;gt;&lt;br /&gt;DAV On&lt;br /&gt;AuthType Basic&lt;br /&gt;AuthName &amp;quot;webdav&amp;quot;&lt;br /&gt;AuthUserFile /var/www/.passwd.dav&lt;br /&gt;Require valid-user&lt;br /&gt;DavMinTimeout 600&lt;br /&gt;&amp;lt;LimitExcept GET PUT HEAD OPTIONS POST&amp;gt;&lt;br /&gt;Require valid-user&lt;br /&gt;&amp;lt;/LimitExcept&amp;gt;&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Gérer les droits&lt;/h2&gt;&lt;br /&gt;Puis nous allons créer les mots de passe.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;htpasswd -c /var/www/.passwd.dav myuser&lt;br /&gt;chown root:www-data /var/www/.passwd.dav&lt;br /&gt;chmod 640 /var/www/.passwd.dav&lt;br /&gt;chmod -R 0777 /var/www/webdav&lt;br /&gt;chown www-data:www-data /var/www/webdav&lt;br /&gt;/etc/init.d/apache2 restart&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8447048706739860727?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8447048706739860727/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8447048706739860727' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8447048706739860727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8447048706739860727'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/09/creer-un-partage-webdav-sur-ubuntu-104.html' title='Créer un partage Webdav sur Ubuntu 10.4'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7864080847457809184</id><published>2010-06-10T02:43:00.000-07:00</published><updated>2010-06-10T02:49:44.587-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='intégration continue'/><category scheme='http://www.blogger.com/atom/ns#' term='hudson'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Intégration continue avec Hudson et Maven</title><content type='html'>&lt;H2 CLASS="western"&gt;Environnement&lt;/H2&gt;&lt;br /&gt;Avant de donner la recette pour la mise en oeuvre de hudson, nous&lt;br /&gt;allons donner quelques d&amp;eacute;finitions. En effet, certains termes&lt;br /&gt;utilis&amp;eacute; dans ce document ont un sens variable suivant le&lt;br /&gt;contexte. &lt;br /&gt;&lt;br /&gt;Pr&amp;eacute;cisons d'abord les r&amp;ocirc;les des diff&amp;eacute;rents&lt;br /&gt;environnements :&lt;br /&gt;&lt;UL&gt;&lt;br /&gt; &lt;LI&gt;&lt;B&gt;Environnement d'Int&amp;eacute;gration : &lt;/B&gt;sert &amp;agrave;&lt;br /&gt; valider &lt;U&gt;manuellement&lt;/U&gt; que le le comportement du produit est&lt;br /&gt; identique sur les environnements de d&amp;eacute;veloppement et sur la&lt;br /&gt; plateforme cible. L'environnement d'int&amp;eacute;gration doit &amp;ecirc;tre&lt;br /&gt; un clone des plateformes de production. &lt;br /&gt;&lt;br /&gt; &lt;LI&gt;&lt;B&gt;Environnement Int&amp;eacute;gration continue :&lt;/B&gt; sert &amp;agrave;&lt;br /&gt; valider &lt;U&gt;automatiquement&lt;/U&gt; que le le comportement du produit est&lt;br /&gt; identique sur les environnements de d&amp;eacute;veloppement et sur la&lt;br /&gt; plateforme cible. L'environnement d'int&amp;eacute;gration doit &amp;ecirc;tre&lt;br /&gt; un clone des plateformes de production. &lt;br /&gt; &lt;br /&gt; &lt;LI&gt;&lt;P STYLE="font-style: normal"&gt;&lt;B&gt;Environnement de Validation :&lt;br /&gt; &lt;/B&gt;&lt;SPAN STYLE="font-weight: normal"&gt;sert &amp;agrave; v&amp;eacute;rifier&lt;br /&gt; que le produit est conforme aux sp&amp;eacute;cifications.&lt;/SPAN&gt;&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;P STYLE="font-style: normal"&gt;&lt;B&gt;Jeu de test :&lt;/B&gt;&lt;SPAN STYLE="font-weight: normal"&gt;&lt;br /&gt;Ensemble de donn&amp;eacute;es n&amp;eacute;cessaires au passage d'un test&lt;/SPAN&gt;&lt;br /&gt;&lt;P STYLE="font-style: normal"&gt;&lt;B&gt;Test unitaire : &lt;/B&gt;&lt;SPAN STYLE="font-weight: normal"&gt;Th&amp;eacute;oriquement&lt;br /&gt;il s'agit d'un test v&amp;eacute;rifiant une exigence, mais dans ce&lt;br /&gt;document, nous l'utiliserons dans son acception consacr&amp;eacute;e &lt;/SPAN&gt;&lt;B&gt;test&lt;br /&gt;Junit&lt;/B&gt;&lt;SPAN STYLE="font-weight: normal"&gt;. &lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;&lt;H2 CLASS="western"&gt;B&amp;eacute;n&amp;eacute;fices de l'int&amp;eacute;gration&lt;br /&gt;continue&lt;/H2&gt;&lt;br /&gt;Dans les configurations de d&amp;eacute;veloppement JAVA&amp;laquo;&amp;nbsp;standard&amp;nbsp;&amp;raquo;,&lt;br /&gt;le codage s'effectue sur Windows et l'int&amp;eacute;gration s'effectue&lt;br /&gt;sur LINUX/UNIX, il est donc fr&amp;eacute;quent d'avoir des surprises au&lt;br /&gt;moment de passer sur l'environnement cible, les environnements&lt;br /&gt;d'int&amp;eacute;gration permettent anticiper les probl&amp;egrave;mes&lt;br /&gt;techniques.&lt;br /&gt;L'int&amp;eacute;grateur identifie les dysfonctionnements et les&lt;br /&gt;corrige. Malheureusement, dans la plupart des configurations projet,&lt;br /&gt;personne n'&amp;eacute;tant affect&amp;eacute; exclusivement &amp;agrave;&lt;br /&gt;l'int&amp;eacute;gration et les soucis d'int&amp;eacute;gration tendent &amp;agrave;&lt;br /&gt;&amp;ecirc;tre rel&amp;eacute;gu&amp;eacute;es aux derni&amp;egrave;res t&amp;acirc;ches.&lt;br /&gt;&lt;br /&gt;Au del&amp;agrave; de l'effet de mode, le principal bienfait de&lt;br /&gt;l'int&amp;eacute;gration continue sera d'am&amp;eacute;liorer la visibilit&amp;eacute;&lt;br /&gt;de ces probl&amp;eacute;matiques.&lt;br /&gt;L&amp;rsquo;int&amp;eacute;gration continue valide automatiquement le&lt;br /&gt;produit sur la plateforme cible.&lt;br /&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt; &lt;LI&gt;Permet de d&amp;eacute;tecter au plus t&amp;ocirc;t les probl&amp;egrave;mes&lt;br /&gt; de d&amp;eacute;pendance aux environnements : File System, Encoding,&lt;br /&gt; Case-sensitive, performances etc.&lt;br /&gt; &lt;LI&gt;Permet de lisser le stress dans l'&amp;eacute;quipe (plus de&lt;br /&gt; pression dans les phases pr&amp;eacute;coces, moins au moment de la&lt;br /&gt; livraison) &lt;br /&gt; &lt;br /&gt; &lt;LI&gt;Il donne une aper&amp;ccedil;u de la qualit&amp;eacute; du produit au&lt;br /&gt; chef de projet et donne confiance au moment de la livraison&lt;br /&gt;.&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;H2 CLASS="western"&gt;Impacts structurants de l'int&amp;eacute;gration&lt;br /&gt;continue&lt;/H2&gt;&lt;br /&gt;&lt;H3 CLASS="western"&gt;Contraintes de codage&lt;/H3&gt;&lt;br /&gt;L'ensemble des projets sur le r&amp;eacute;f&amp;eacute;rentiel de source&lt;br /&gt;doit &amp;ecirc;tre compilable &amp;agrave; tout moment. &lt;br /&gt;&lt;br /&gt;Pour l'int&amp;eacute;gration continue, le d&amp;eacute;veloppeur est&lt;br /&gt;contraint d'&amp;eacute;crire des tests unitaires. &lt;br /&gt;&lt;br /&gt;&lt;H5 CLASS="western"&gt;Test unitaires&lt;/H5&gt;&lt;br /&gt;Dans un monde syst&amp;eacute;matique, chaque exigence devrait &amp;ecirc;tre&lt;br /&gt;v&amp;eacute;rifi&amp;eacute;e par un test unitaire, inversement, chaque test&lt;br /&gt;unitaire devrait se mettre en relation avec une seule exigence.&lt;br /&gt;Cependant, dans le monde r&amp;eacute;el, un test unitaire pourra &amp;ecirc;tre&lt;br /&gt;associ&amp;eacute; &amp;agrave; plusieurs exigences, une exigence pourra&lt;br /&gt;n'&amp;ecirc;tre pas couverte... etc. In fine le d&amp;eacute;veloppeur&lt;br /&gt;arbitrera (mais avec un minimum d'exp&amp;eacute;rience, cela se passe&lt;br /&gt;bien. )&lt;br /&gt;A chaque TU est associ&amp;eacute; un jeu de tests, mais aucune&lt;br /&gt;hypoth&amp;egrave;se de donn&amp;eacute;es pr&amp;eacute;alable ne peut &amp;ecirc;tre&lt;br /&gt;faite. Que l'on parte d'une base totalement vidang&amp;eacute;e ou pleine&lt;br /&gt;de donn&amp;eacute;e, le r&amp;eacute;sultat du test unitaire doit &amp;ecirc;tre&lt;br /&gt;le m&amp;ecirc;me. D'autre part, le s&amp;eacute;quence des TU ne doit pas&lt;br /&gt;non plus conditionner le r&amp;eacute;sultat. &lt;br /&gt;&lt;br /&gt;&lt;H3 CLASS="western"&gt;Ressources&lt;/H3&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt; &lt;LI&gt;L&amp;rsquo;int&amp;eacute;gration&lt;br /&gt; requiert un serveur d&amp;eacute;di&amp;eacute; pour hudson&lt;br /&gt; &lt;LI&gt;Il faut une base de donn&amp;eacute;es&lt;br /&gt; par utilisateur&lt;br /&gt;&lt;br /&gt; (Elle peux se situer sur la machine de&lt;br /&gt; d&amp;eacute;veloppement ou sur un serveur mutualis&amp;eacute;)&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;H3 CLASS="western"&gt;Contrainte de conception&lt;/H3&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt; &lt;LI&gt;Il faut utiliser maven pour&lt;br /&gt; l'assemblage&lt;br /&gt; &lt;LI&gt;Les test unitaires doivent &amp;ecirc;tre&lt;br /&gt; &amp;eacute;crit avec Junit&lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;H3 CLASS="western"&gt;Au quotidien&lt;/H3&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt; &lt;LI&gt;Il faut vraiment s&amp;rsquo;impliquer&lt;br /&gt; dans la supervision des builds et &amp;ecirc;tre vigilant tout au long&lt;br /&gt; du d&amp;eacute;veloppement du produit : codage, int&amp;eacute;gration,&lt;br /&gt; validation&lt;br /&gt; &lt;LI&gt;L'&amp;eacute;quipe doit s'organiser&lt;br /&gt; dans ce but, c'est-&amp;agrave;-dire qu'il faut un responsable&lt;br /&gt; Int&amp;eacute;gration Continue (le m&amp;ecirc;me que le responsable GCONF)&lt;br /&gt;  &lt;br /&gt;&lt;/UL&gt;&lt;br /&gt;&lt;H2 CLASS="western"&gt;Mise en oeuvre&lt;/H2&gt;&lt;br /&gt;&lt;UL&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Installer un serveur hudson&lt;br /&gt;&lt;li&gt;Planifier les t&amp;acirc;ches &amp;agrave; des horaires o&amp;ugrave; la&lt;br /&gt;machine n'est pas trop charg&amp;eacute;e&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/oEw2EZjIh7vr5NpiHGQfvw?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_T_Hxq71ibbo/TBCyftfmd_I/AAAAAAAAAno/54GbJ-o5fnc/s400/Slide7.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;De &lt;a href="http://picasaweb.google.com/ClementSoullard/TheFrenchHack?feat=embedwebsite"&gt;The French Hack&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/ErDAaShgY2RuYz5jO0IDSw?feat=embedwebsite"&gt;&lt;img src="http://lh6.ggpht.com/_T_Hxq71ibbo/TBCyfvxHzDI/AAAAAAAAAns/f8ra_cK3R8k/s400/Slide8.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;De &lt;a href="http://picasaweb.google.com/ClementSoullard/TheFrenchHack?feat=embedwebsite"&gt;The French Hack&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/q45SDOSR48igEPBFp2tVgA?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_T_Hxq71ibbo/TBCyfqT6IGI/AAAAAAAAAnw/hNyQpn1G4_M/s400/Slide9.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;De &lt;a href="http://picasaweb.google.com/ClementSoullard/TheFrenchHack?feat=embedwebsite"&gt;The French Hack&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7864080847457809184?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7864080847457809184/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7864080847457809184' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7864080847457809184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7864080847457809184'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/06/int-continue-avec-hudson-et-maven.html' title='Int&amp;eacute;gration continue avec Hudson et Maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_T_Hxq71ibbo/TBCyftfmd_I/AAAAAAAAAno/54GbJ-o5fnc/s72-c/Slide7.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-67918955361437737</id><published>2010-05-26T03:00:00.000-07:00</published><updated>2010-05-26T03:01:09.978-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><title type='text'>Transaction explicites sous Spring et JPA dans les applications Batch</title><content type='html'>Il m'a été difficile d'utiliser une application de traitement batch utilisant Hibernate, JPA. En utilisant des transactions explicite. &lt;br /&gt;&lt;br /&gt;J'avais le message "org.hibernate.SessionException: Session is closed!"&lt;br /&gt;&lt;br /&gt;Pour démmarrer le contexte transactionnel, j'ai utilisé les lignes suivantes&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;DefaultTransactionDefinition def = new DefaultTransactionDefinition();&lt;br /&gt;def.setName("MaTransaction");&lt;br /&gt;def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);&lt;br /&gt;/** pour démarrer le context transactionnel */&lt;br /&gt;transactionManager.getTransaction(def);&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Comment économiser de la mémoire :&lt;br /&gt;- Faire des commit intermédiaires&lt;br /&gt;&lt;br /&gt;Comment gagner de la vitesse :&lt;br /&gt;- Faire des insertions et des select dans une table est une opération couteuse (car le recalcul des index prend de plus en plus de temps)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-67918955361437737?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/67918955361437737/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=67918955361437737' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/67918955361437737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/67918955361437737'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/05/transaction-explicites-sous-spring-et.html' title='Transaction explicites sous Spring et JPA dans les applications Batch'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8598462474303844141</id><published>2010-05-25T13:50:00.001-07:00</published><updated>2010-05-25T13:50:54.352-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='splash'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Changer le splash screen sur Ubuntu 10.4</title><content type='html'>http://maketecheasier.com/change-login-and-boot-screen-in-ubuntu-lucid/2010/05/13&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8598462474303844141?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8598462474303844141/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8598462474303844141' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8598462474303844141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8598462474303844141'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/05/changer-le-splash-screen-sur-ubuntu-104.html' title='Changer le splash screen sur Ubuntu 10.4'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8871379243901758287</id><published>2010-05-04T01:54:00.000-07:00</published><updated>2010-06-04T06:25:41.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='cursor'/><title type='text'>Utilisation des curseurs dans Mysql</title><content type='html'>&lt;pre&gt;&lt;br /&gt;DELIMITER |&lt;br /&gt;CREATE PROCEDURE updateTable()&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE done INT DEFAULT 0;&lt;br /&gt;DECLARE description_population_type2 TEXT;&lt;br /&gt;DECLARE nom_monentite_type2 CHAR(50);&lt;br /&gt;DECLARE cur1 CURSOR FOR select nom_monentite, description_population from sp_monentite where id_gp=2;&lt;br /&gt;DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;&lt;br /&gt;OPEN cur1;&lt;br /&gt;REPEAT&lt;br /&gt;FETCH cur1 INTO nom_monentite_type2, description_population_type2;&lt;br /&gt;IF NOT done THEN&lt;br /&gt;UPDATE sp_monentite &lt;br /&gt;SET description_population = description_population_type2 &lt;br /&gt;WHERE nom_monentite_type2=nom_monentite AND id_gp=1;&lt;br /&gt;END IF;&lt;br /&gt;UNTIL done END REPEAT;&lt;br /&gt;CLOSE cur1;&lt;br /&gt;END|&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jcrozier.developpez.com/tutoriels/web/php/utilisation-avancee-procedures-stockees-mysql/#LV-6"&gt;Procédure stockée&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8871379243901758287?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8871379243901758287/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8871379243901758287' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8871379243901758287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8871379243901758287'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/05/utilisation-des-curseurs-dans-mysql.html' title='Utilisation des curseurs dans Mysql'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7005389117590892348</id><published>2010-04-13T07:07:00.000-07:00</published><updated>2010-04-13T07:14:51.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practice'/><category scheme='http://www.blogger.com/atom/ns#' term='coding'/><title type='text'>Guide de revue de code</title><content type='html'>Ci dessous un memorandum sur les points qui ont été mis en défaut sur des projets réel avec des conséquences &lt;u&gt;réelles&lt;/u&gt; sur les charges et le planning du projet.&lt;br /&gt; &lt;br /&gt;Chacun de ces points est à mettre en oeuvre le plus tôt possible, plus le temps passe et plus le coût est élevé pour revenir dans une démarche de qualité. &lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Bonne pratiques de développement&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Structuration des projets&lt;/h3&gt;&lt;br /&gt;Un projet devrait contenir un minimum de dépendances entre les modules. La seule raison motivant un découpage de garantir l'indépendance des cycles de vie. Un projet IHM possédants des script de traitement par lot devrait être structuré de la manière suivante : &lt;br /&gt;&lt;br /&gt;- Un projet-parent&lt;br /&gt;- Un projet dao + business + service&lt;br /&gt;- Un projet IHM (war)&lt;br /&gt;- Un projet batch&lt;br /&gt;- Un projet factorisant le code de test (Constitution de jeu de test)&lt;br /&gt;- Un jeu de test de référence&lt;br /&gt;- Un jeu de test restreint&lt;br /&gt;- Un jeu de test à volumétrie normale&lt;br /&gt;&lt;h3&gt;Recommandations&lt;/h3&gt;&lt;br /&gt;Utiliser des interfaces uniquement si nécessaire, quand il existe une probabilité réelle qu'une interfaces ait plusieurs réalisations. &lt;br /&gt;Ne pas se servir des exceptions pour remonter des codes d'erreurs.&lt;br /&gt;&lt;h2&gt;Bonnes pratiques de codage de tests unitaires&lt;/h2&gt;&lt;br /&gt;Un test unitaire doit pouvoir partir d'une base vierge&lt;br /&gt;Dans les tests junits dérivés de spring, vérifier que les méthodes d'extraction communes sont dans la méthode onSetUp().&lt;br /&gt;Penser à valider le programme par des jeux de test importants. Si certains tests génèrent des erreurs en occupant trop de mémoire, il vaut mieux ne pas masquer le problème en augmentant la taille mémoire sur la machine de développement. Sur le long terme, il vaut mieux résoudre résoudre le problème par la conception sans utiliser la puissance du matériel. &lt;br /&gt;&lt;h2&gt;Bonnes pratiques d'écriture&lt;/h2&gt;&lt;br /&gt;La manière de coder peut améliorer la reprise du code dans le cas de maintenance. Il est possible d'utiliser des outils de type checkstyle ou PMD. Toutefois, ces outils ne sont pas toujours pertinents parce que trop verbeux.  &lt;br /&gt;Formater le code de manière homogène en utilisant un outils de formatage automatique&lt;br /&gt;Mettre des commentaires quand c'est nécessaire&lt;br /&gt;Sur la couche DAO : vérifier que les noms de méthode sont cohérents entre eux&lt;br /&gt;Vérifier que les noms de variables permettent de deviner leur contenu&lt;br /&gt;Vérifier que les tests unitaires donne des messages explicite en cas de plantage (pas de fail sans argument)&lt;br /&gt;Ne pas utiliser  les séquences : « ? : » pour les tests if. Toujours mettre des crochets&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7005389117590892348?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7005389117590892348/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7005389117590892348' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7005389117590892348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7005389117590892348'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/04/guide-de-revue-de-code.html' title='Guide de revue de code'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2440553814036555604</id><published>2010-03-22T06:15:00.000-07:00</published><updated>2010-06-03T02:39:46.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='merge'/><category scheme='http://www.blogger.com/atom/ns#' term='revision'/><category scheme='http://www.blogger.com/atom/ns#' term='resolved'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><title type='text'>Merger à l'aide de SVN</title><content type='html'>&lt;h1&gt;Utilisation des patch dans SVN&lt;/h1&gt;&lt;br /&gt;&lt;br /&gt;Avec SVN, pour reporter les modifications d'une branche vers une autre. Il existe plusieurs méthodes :&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;La commande merge fournie avec SVN (Méthode recommandée): Cette méthode ne s'applique que si les fichiers modifiés sont connecté au référentiel SVN, mais ce moyen est le plus simple.&lt;br /&gt;&lt;li&gt;Méthode utilisant l'IDE eclipse : Elle présente des avantage pour la représentation de changes. Contrairement à ce que l'on pourrait croire, il s'agit rarement de la méthode la plus simple, en effet le fourmillement d'options sur une GUI entraine une certaine confusion.&lt;br /&gt;&lt;li&gt;Méthode basée sur les fichiers de patch : cette méthode utilise le standard udiff et peux s'appliquer sur des fichiers n'étant pas connectés au référentiel de source. Cette méthode n'est pas automatique mais elle est souple.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Pour illustrer un report nous allons utiliser l'exemple d'un report d'une correction de bug sur la branche en maintenance (lot 1) vers la branche en cours de développement (lot 2), la branche lot 2 est en cours de développement, c'est donc le tronc.&lt;br /&gt;&lt;br /&gt;&lt;table style="width:auto;"&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.fr/lh/photo/1VaWWyok4IOkUIdXvDXG9Q?feat=embedwebsite"&gt;&lt;br /&gt;&lt;img src="http://lh4.ggpht.com/_T_Hxq71ibbo/TAdso40VlmI/AAAAAAAAAm8/JnG2z97Pe0U/s400/fleche.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;br /&gt;De &lt;a href="http://picasaweb.google.fr/ClementSoullard/TheFrenchHack?feat=embedwebsite"&gt;The French Hack&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Cette opération s'effectue en 5 temps :&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Récuppération du numéro de révision&lt;br /&gt;&lt;li&gt;Checkout de la branche sur laquelle le report est effectué&lt;br /&gt;&lt;li&gt;Report des modifications et fusion&lt;br /&gt;&lt;li&gt;Résolution des conflits &lt;br /&gt;&lt;li&gt;Commit &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Méthode en ligne de commande utilisant subversion (Méthode recommandée)&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;La première opération consiste à repèrer dans l'historique la version à partir de laquelle nous souhaitons effectuer le report. Nous pouvons nous baser sur les dates de modifications, les commentaires, les dates de création de branches... tou ce qu'on veut !&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;bash&gt; svn log -r{20100401}:HEAD http://svnserver/my-product/developpement/branches/my-module-dao-lot1&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Récuppération du numéro de révision&lt;/h3&gt;&lt;br /&gt;Problème des droits acces &lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3389 | zegugusse | 2010-04-28 12:15:38 +0200 (mer, 28 avr 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Le montant des couts pour que les valeurs jusqu'a 9 999 999 999 puissent etre stockées et non arrondies&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3390 | zegugusse  | 2010-04-29 09:25:29 +0200 (jeu, 29 avr 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Problème des droits &lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3394 | zegugusse  | 2010-05-04 09:12:01 +0200 (mar, 04 mai 2010) | 2 lines&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3394 | ungusse | 2010-05-04 09:12:01 +0200 (mar, 04 mai 2010) | 2 lines&lt;br /&gt;&lt;br /&gt;Création des branches lot2&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3397 | ungusse | 2010-05-04 09:12:33 +0200 (mar, 04 mai 2010) | 1 line&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3528 | ungusse | 2010-05-26 12:09:30 +0200 (mer, 26 mai 2010) | 2 lines&lt;br /&gt;&lt;br /&gt;Ajout des codes d'erreur&lt;br /&gt;&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3574 | lotrgusse | 2010-06-01 15:25:34 +0200 (mar, 01 jun 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Ajout du libellé long . Change D76.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3577 | zegugusse | 2010-06-01 16:09:25 +0200 (mar, 01 jun 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Defect Client D58&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3579 | lotrgusse | 2010-06-01 17:35:41 +0200 (mar, 01 jun 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Modification du comportement de l'écran de sélection des cibles.&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;r3583 | zegugusse | 2010-06-02 12:22:50 +0200 (mer, 02 jun 2010) | 1 line&lt;br /&gt;&lt;br /&gt;Defect Client D58&lt;br /&gt;------------------------------------------------------------------------&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Checkout de la branche sur laquelle le report est effectué&lt;/h3&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;svn co  http://svnserver/my-product/developpement/branches/my-module-branch my-module-dao-trunk-workcopy&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Report des modifications et fusion&lt;/h3&gt;&lt;br /&gt;Maintenant, nous allons reporter les changements intervenu sur la branche my-module-branch entre les versions 1000 et la HEAD&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;&lt;br /&gt;svn merge -r1000:HEAD http://svnserver/my-product/developpement/branches/my-module-dao-lot1 my-module-dao-trunk-workcopy&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Le premier paramètre (http://svnserver/my-product/developpement/branches/my-module-dao-lot1) indique la branche d'ou est effectué le rapport&lt;br /&gt;&lt;li&gt;Le second paramètre (my-module-trunk-workcopy) est le chemin du repertoire sur lequel le report est appliqué&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Voici le résultat :&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;[hudson@vm01 ~]$  svn merge -r2650:HEAD http://svnserver/my-product/developpement/branches/my-module-dao-lot1  my-module-dao-trunk/&lt;br /&gt;U    my-module-dao-trunk-workcopy/src/sql/data/load-ref-dev.bat&lt;br /&gt;U    my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/service/common/impl/UtilisateurServiceImpl.java&lt;br /&gt;C    my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java&lt;br /&gt;U    my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/business/projet/impl/ProjetBusinessImpl.java&lt;br /&gt;G    my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/business/objectif/impl/ObjectifBusinessImpl.java&lt;br /&gt;C    my-module-dao-trunk-workcopy/pom.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;U indique que nous avons procédé à un update &lt;br /&gt;&lt;li&gt;G indique que nous avons procédé à une fusion sans conflit&lt;br /&gt;&lt;li&gt;C indique un conflit&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Ensuite nous pouvons observer le resultat à l'aide de la commande : svn st &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;[hudson@vm01 ~]$ svn st my-module-dao-trunk-workcopy&lt;br /&gt;?      my-module-dao-trunk-workcopy/pom.xml.fusion-gauche.r2650&lt;br /&gt;?      my-module-dao-trunk-workcopy/pom.xml.courant&lt;br /&gt;?      my-module-dao-trunk-workcopy/pom.xml.fusion-droit.r2862&lt;br /&gt;M      my-module-dao-trunk-workcopy/src/sql/data/load-ref-dev.bat&lt;br /&gt;M      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/service/common/impl/UtilisateurServiceImpl.java&lt;br /&gt;?      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java.courant&lt;br /&gt;?      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java.fusion-droit.r2862&lt;br /&gt;?      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java.fusion-gauche.r2650&lt;br /&gt;C      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java&lt;br /&gt;M      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/business/projet/impl/ProjetBusinessImpl.java&lt;br /&gt;M      my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/business/objectif/impl/ObjectifBusinessImpl.java&lt;br /&gt;C      my-module-dao-trunk-workcopy/pom.xml&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;M indique que le fichier est modifié (Un check in est nécéssaire)&lt;br /&gt;&lt;li&gt;C indique un conflit (Il est nécessaire résoudre)&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Résolution des conflits&lt;/h3&gt;&lt;br /&gt;Avec un éditeur résoudre les conflit dans my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java puis indiquer que le conflit est résolu&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;vi my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java&lt;br /&gt;svn resolved my-module-dao-trunk-workcopy/src/main/java/com/mycompany/jt/dao/BuildingSecondaireDAO.java&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Commit&lt;/h3&gt;&lt;br /&gt;Pour finaliser, il faut commiter nos modifications &lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;svn ci my-module-dao-trunk-workcopy/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Méthode se basant sur les fichiers de patch&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Sous UNIX, une ligne de commande génère ces fichiers de patch :&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;svn diff  http://svnserver.mycomp/my-product/developpement/trunk/my-project -rN:M&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;N est la version d'origine M est la version cible.&lt;br /&gt;&lt;br /&gt;Pour appliquer ces patchs, se plaçer à la racine du projet à patcher, utiliser la commande :&lt;br /&gt;&lt;pre style="font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; border: 1px dashed rgb(153, 153, 153); line-height: 14px; padding: 5px; overflow: auto; width: 100%;"&gt;&lt;br /&gt;patch -p0 &amp;gt;mypatchfile&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;où p est la profondeur&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Méthode sur eclipse&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Contrairement à ce que l'on pourrait croire, l'utilisation d'eclipse peut être plus difficile que celle de la ligne de commande. &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;Se placer sur la branche sur laquelle on souhaite effectuer les reports. &lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 283px;" src="http://lh4.ggpht.com/_T_Hxq71ibbo/S6dxSQ5PyEI/AAAAAAAAAk4/-DRIX66Bk_Q/init1.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Choisir l'ensemble des révisions à reporter. Autrement, l'option starts from copy reporte l'ensemble des modification depuis la création de la branche (ce qui peut n'être pas adéquat dans le cas où la branche à subi plusieurs recopies)&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 335px;" src="http://lh5.ggpht.com/_T_Hxq71ibbo/S6dxSazM13I/AAAAAAAAAk8/JCxo7rY7wlM/init2.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 350px;" src="http://lh4.ggpht.com/_T_Hxq71ibbo/S6dxSvCeoPI/AAAAAAAAAlA/lZe4BHH-H20/init3.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;li&gt;Preview permet de voir quelle sont les révision concernées :&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 350px;" src="http://lh4.ggpht.com/_T_Hxq71ibbo/S6dxS5SxA4I/AAAAAAAAAlE/Gv_qMMHFAao/init4.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 350px;" src="http://lh5.ggpht.com/_T_Hxq71ibbo/S6dxTBndoDI/AAAAAAAAAlI/A6yk28EOqs8/init5.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;img style="margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 480px; height: 350px;" src="http://lh3.ggpht.com/_T_Hxq71ibbo/S6dzC2d4PsI/AAAAAAAAAlM/gYe0aE4Ou-k/init6.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2440553814036555604?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2440553814036555604/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2440553814036555604' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2440553814036555604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2440553814036555604'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/03/merger-laide-de-svn.html' title='Merger à l&apos;aide de SVN'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/_T_Hxq71ibbo/TAdso40VlmI/AAAAAAAAAm8/JnG2z97Pe0U/s72-c/fleche.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7823674002021782012</id><published>2010-01-07T00:57:00.000-08:00</published><updated>2010-01-07T00:59:55.262-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Mysql en case insensitive sur linux Red hat</title><content type='html'>Dans le fichier my.ini, sous la section mysqld, ajouter la ligne suivante :&lt;br /&gt;&lt;code&gt;&lt;br /&gt;lower_case_table_names=1&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7823674002021782012?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7823674002021782012/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7823674002021782012' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7823674002021782012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7823674002021782012'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2010/01/mysql-en-case-insensitive-sur-linux-red.html' title='Mysql en case insensitive sur linux Red hat'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1943936058442667416</id><published>2009-12-02T06:40:00.000-08:00</published><updated>2009-12-04T00:47:32.596-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Install Mysql from the zipped installation</title><content type='html'>Customize a MySQL installation from a zip file is easy :&lt;br /&gt;&lt;br /&gt;Look in the configuration file and set the path in it correctly.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"D:\myproject\MySQL\MySQL Server 5.1\my.ini&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Once done, you can set it up as a windows service using the simple command line&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;"D:\myproject\MySQL\MySQL Server 5.1\bin\mysqld.exe" --install&lt;br /&gt;"D:\myproject\MySQL\MySQL Server 5.1\bin\mysqld.exe" --remove&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Change the root password&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;mysqladmin -u root password NEWPASSWORD&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1943936058442667416?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1943936058442667416/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1943936058442667416' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1943936058442667416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1943936058442667416'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/12/install-mysql-from-zipped-installation.html' title='Install Mysql from the zipped installation'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2962525736566466557</id><published>2009-11-30T06:05:00.000-08:00</published><updated>2009-11-30T06:15:53.797-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='smtp'/><category scheme='http://www.blogger.com/atom/ns#' term='javamail'/><category scheme='http://www.blogger.com/atom/ns#' term='jndi'/><title type='text'>Configuring JNDI Javamail resource over SSL for SMTP</title><content type='html'>You declare your JAVAMAIL resource into the server.xml (or in the appropriate context file in your configuration directory) file of your tomcat :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;              &amp;lt;Resource name=&amp;quot;mail/MailServer&amp;quot; auth=&amp;quot;Container&amp;quot;&lt;br /&gt;            type=&amp;quot;javax.mail.Session&amp;quot;&lt;br /&gt;            mail.smtp.host=&amp;quot;smtp.mailserver&amp;quot;&lt;br /&gt;    mail.smtp.port=&amp;quot;465&amp;quot;&lt;br /&gt;    mail.smtp.auth=&amp;quot;true&amp;quot;&lt;br /&gt;    mail.smtp.user=&amp;quot;myuser&amp;quot;&lt;br /&gt;    password=&amp;quot;mypassword&amp;quot;&lt;br /&gt;    mail.smtp.starttls.enable=&amp;quot;true&amp;quot;&lt;br /&gt;    mail.smtp.socketFactory.class=&amp;quot;javax.net.ssl.SSLSocketFactory&amp;quot;&lt;br /&gt;  /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then your resource is accessible via this URI in your webapp :&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;java:comp/env/mail/MailServer&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also, you must copy the two files &lt;br /&gt;&lt;b&gt;activation.jar&lt;/b&gt; and &lt;b&gt;mail.jar&lt;/b&gt; in your tomcat common/lib server. &lt;br /&gt;&lt;br /&gt;You may refer to the JIRA documentation where I had this hint&lt;br /&gt;&lt;br /&gt;http://www.atlassian.com/software/jira/docs/v3.13/smtpconfig.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2962525736566466557?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2962525736566466557/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2962525736566466557' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2962525736566466557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2962525736566466557'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/11/configuring-jndi-javamail-resource-over.html' title='Configuring JNDI Javamail resource over SSL for SMTP'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2234445847510468471</id><published>2009-09-30T03:31:00.000-07:00</published><updated>2010-12-08T03:02:02.095-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='initialisation'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Définition ORACLE</title><content type='html'>&lt;b&gt;Définitions :&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;br /&gt;Instance : &lt;/b&gt;&lt;br /&gt;Une instance oracle est un processus destinée à servir les données.&lt;br /&gt;&lt;b&gt;Listener : &lt;/b&gt;&lt;br /&gt;Un listener est un processus gérant les connexions lourdes de sql net. Le listener n'est pas indispensable pour faire fonctionner le JDBC&lt;br /&gt;&lt;b&gt;Tablespace :&lt;/b&gt;&lt;br /&gt;Un Tablespace est la définition d'un espace sur le système de fichier contenant les données. Dans les bases de données modernes, la notion de Tablespace est plus discrète, car elle ne fait pas référence au données mais au système.&lt;br /&gt;&lt;b&gt;User :&lt;/b&gt;&lt;br /&gt;Un user est un espace de table. La notion de schema qui est beaucoup parlante est identique à celle du user.&lt;br /&gt;&lt;b&gt;Database :&lt;/b&gt;&lt;br /&gt;Est un ensemble de schémas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2234445847510468471?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2234445847510468471/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2234445847510468471' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2234445847510468471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2234445847510468471'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/09/finaliser-une-installation-oracle.html' title='Définition ORACLE'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7114174939112253451</id><published>2009-09-16T07:10:00.000-07:00</published><updated>2009-09-16T07:11:37.548-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>Débuter en JSF</title><content type='html'>Faire un tag combobox :&lt;br /&gt;&lt;br /&gt;myCommandBean est le nom du bean mise en correspondance la combobox. #{myCommandBean.myfield} est le nom du champ qui stocke l'information. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;h:selectOneListbox  id=&amp;quot;myCommandBean&amp;quot;          binding=&amp;quot;#{myCommandBean.myfield}&amp;quot; size=&amp;quot;1&amp;quot; &amp;gt;&lt;br /&gt;&amp;lt;f:selectItems &lt;br /&gt;   value=&amp;quot;#{myCommandBean.myfieldList}&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/h:selectOneListbox&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Le fichier face-config.xml contient la configuration de Jface :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;managed-bean&amp;gt;        &lt;br /&gt;&amp;lt;managed-bean-name&amp;gt;myCommandBean&amp;lt;/managed-bean-name&amp;gt;&lt;br /&gt;&amp;lt;managed-bean-class&amp;gt;com.mybusiness.MyCommandBean&amp;lt;/managed-bean-class&amp;gt;&lt;br /&gt;&amp;lt;managed-bean-scope&amp;gt;session&amp;lt;/managed-bean-scope&amp;gt;&lt;br /&gt;&amp;lt;/managed-bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ces lignes permettent de déclarer le bean de stockage des informations de la combo box dans la session. Les valeurs affectée à ce bean pourront être exploitée durant toute la session. C'est une bonne idée que d'utiliser ce scope par défaut. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public List getMyfieldList() {&lt;br /&gt;    List list = new ArrayList();&lt;br /&gt;    list.add(new SelectItem(&amp;quot;01&amp;quot;, &amp;quot;moncul&amp;quot;));&lt;br /&gt;    list.add(new SelectItem(&amp;quot;02&amp;quot;, &amp;quot;machemise&amp;quot;));&lt;br /&gt;    return list;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Le getter dans le bean  com.mybusiness.MyCommandBean utilise une propriété   HtmlSelectOneListbox&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;public HtmlSelectOneListbox getMyfield() {&lt;br /&gt;    return myfield;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void setMyfield(HtmlSelectOneListbox myfield) {&lt;br /&gt;        this.myfield = myfield;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7114174939112253451?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7114174939112253451/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7114174939112253451' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7114174939112253451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7114174939112253451'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/09/debuter-en-jsf-faire-un-tag-combobox.html' title='Débuter en JSF'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1614500359579463510</id><published>2009-07-24T06:55:00.000-07:00</published><updated>2009-09-11T00:21:00.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='word'/><category scheme='http://www.blogger.com/atom/ns#' term='generation'/><category scheme='http://www.blogger.com/atom/ns#' term='balise'/><category scheme='http://www.blogger.com/atom/ns#' term='xsl'/><category scheme='http://www.blogger.com/atom/ns#' term='openxml'/><title type='text'>Générer des document openXML Word 2003/2007</title><content type='html'>Les récents standards OpenXML et Open document permettent de générer des documents sans passer par des APIs propriétaires. &lt;br /&gt;&lt;br /&gt;Pour comprendre les formats docx de word, rien de tel que l'exemple. Le contenu en clair du fichier s'observe en dézippant le fichier word (renommert son extension .docx en .zip). Ainsi il est possible d'étudier le contenu. Ce zip comporte plusieurs fichiers :  &lt;br /&gt;&lt;br /&gt;- word/document.xml : Comporte le contenu&lt;br /&gt;- word/header1.xml, word/headerx.xml: Décrit les entêtes (par section) &lt;br /&gt;- word/footer1.xml : Décrit les pieds de page&lt;br /&gt;- word/styles.xml : Décrit les mises en forme &lt;br /&gt;&lt;br /&gt;Les fichiers contenus dans le zip sont nombreux. Le fichier principal est le fichier document.xml. &lt;br /&gt;&lt;br /&gt;A priori, l'édition de son contenu ne contient rien qui soit 'user friendly', par exemple : &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;w:document&amp;gt;&lt;br /&gt;&amp;lt;w:body&amp;gt;&lt;br /&gt;&amp;lt;w:p w:rsidR=&amp;quot;00047630&amp;quot; w:rsidRDefault=&amp;quot;00047630&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;w:pPr&amp;gt;&lt;br /&gt;&amp;lt;w:tabs&amp;gt;&lt;br /&gt;&amp;lt;w:tab w:val=&amp;quot;center&amp;quot; w:pos=&amp;quot;7655&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:tab w:val=&amp;quot;right&amp;quot; w:pos=&amp;quot;15451&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/w:tabs&amp;gt;&lt;br /&gt;&amp;lt;w:ind w:right=&amp;quot;-29&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:rPr&amp;gt;&lt;br /&gt;&amp;lt;w:rFonts w:ascii=&amp;quot;Arial&amp;quot; w:hAnsi=&amp;quot;Arial&amp;quot; w:cs=&amp;quot;Arial&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:b/&amp;gt;&lt;br /&gt;&amp;lt;w:bCs/&amp;gt;&lt;br /&gt;&amp;lt;w:sz w:val=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:szCs w:val=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/w:rPr&amp;gt;&lt;br /&gt;&amp;lt;/w:pPr&amp;gt;&lt;br /&gt;&amp;lt;w:r&amp;gt;&lt;br /&gt;&amp;lt;w:rPr&amp;gt;&lt;br /&gt;&amp;lt;w:rFonts w:ascii=&amp;quot;Arial&amp;quot; w:hAnsi=&amp;quot;Arial&amp;quot; w:cs=&amp;quot;Arial&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:b/&amp;gt;&lt;br /&gt;&amp;lt;w:bCs/&amp;gt;&lt;br /&gt;&amp;lt;w:sz w:val=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:szCs w:val=&amp;quot;22&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/w:rPr&amp;gt;&lt;br /&gt;&amp;lt;w:t&amp;gt;REGULATION :&amp;lt;/w:t&amp;gt;&lt;br /&gt;&amp;lt;/w:r&amp;gt;&lt;br /&gt;&amp;lt;/w:p&amp;gt;&lt;br /&gt;&amp;lt;w:tbl&amp;gt;&lt;br /&gt;&amp;lt;w:tblPr&amp;gt;&lt;br /&gt;&amp;lt;w:tblW w:w=&amp;quot;0&amp;quot; w:type=&amp;quot;auto&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:tblInd w:w=&amp;quot;-68&amp;quot; w:type=&amp;quot;dxa&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;w:tblLayout w:type=&amp;quot;fixed&amp;quot;/&amp;gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Le principe de génération naturel est d'utiliser XSLT (XML Stylesheet Language Transformation) pour effectuer la transformation des données métiers brutes en un fichier document.xml. &lt;br /&gt;(Toutefois, n'oubliez pas que les outils de transformation plus simple tel que Velocity peuvent être approprié dans le cas de traitement élémentaire (http://velocity.apache.org/))&lt;br /&gt;&lt;br /&gt;Pour ne pas composer manuellement, le document.xml, mieux vaut l'extraire de votre document modèle et le copier/coller dans un fichier XSL reprenant la structure du document. Puis, en localisant endroits où ajouter les informations dans le fichier, on ajoute les valeurs de notre document XML.&lt;br /&gt;&lt;br /&gt;Les balise XSL suivantes sont très utiles &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;xsl:value-of select=&amp;quot;/MyDoc/MyObject1/title&amp;quot;/&amp;gt; // Pour r&amp;#233;cup&amp;#233;rer des valeurs simples&lt;br /&gt;  &lt;br /&gt;&amp;lt;xsl:for-each select=&amp;quot;/MyDoc/MyObject2&amp;quot;&amp;gt; // Pour le parcours de collection&lt;br /&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot;&lt;br /&gt;    xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;    xmlns:xs=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot; xmlns:n2=&amp;quot;urn:hl7-org:v3&amp;quot;&lt;br /&gt;    exclude-result-prefixes=&amp;quot;n2 xs xsi xsl&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;xsl:output method=&amp;quot;xml&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; indent=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;w:document&lt;br /&gt;            xmlns:ve=&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;br /&gt;            xmlns:o=&amp;quot;urn:schemas-microsoft-com:office:office&amp;quot;&lt;br /&gt;            xmlns:r=&amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships&amp;quot;&lt;br /&gt;            xmlns:m=&amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/math&amp;quot;&lt;br /&gt;            xmlns:v=&amp;quot;urn:schemas-microsoft-com:vml&amp;quot;&lt;br /&gt;            xmlns:wp=&amp;quot;http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing&amp;quot;&lt;br /&gt;            xmlns:w10=&amp;quot;urn:schemas-microsoft-com:office:word&amp;quot;&lt;br /&gt;            xmlns:w=&amp;quot;http://schemas.openxmlformats.org/wordprocessingml/2006/main&amp;quot;&lt;br /&gt;            xmlns:wne=&amp;quot;http://schemas.microsoft.com/office/word/2006/wordml&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;w:body&amp;gt;&lt;br /&gt;            &lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;&amp;lt;/w:body&amp;gt;&lt;br /&gt;&amp;lt;/w:document&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cette pratique présente un inconvénient, du fait de la création de ce fichier par un programme, le contenu est souvent excessivement verbeux et dénué de toute forme d'intelligence. Pour générer un fichier Word à partir d'une transformation XSL, il vaut mieux comprendre un minimum la logique de ce fichier. Comprendre les balise principales est utile &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&amp;lt;w:p&amp;gt; : Sert à commencer un paragraphe&lt;br /&gt;&lt;li&gt;&amp;lt;w:pPr&amp;gt; : Définit les paramètres du paragraphe&lt;br /&gt;&lt;li&gt;&amp;lt;w:rPr&amp;gt; : Définit les paramètres applicables au mot. Un rPr peut-être définit au niveau du wPr Lorsqu'il concerne tous les mots du paragraphe ou dans w:r lorsqu'il concerne un mot seulement&lt;br /&gt;&lt;li&gt;&amp;lt;w:tabs&amp;gt; : Permet de définir les différentes tabulations dans une paragraphe&lt;br /&gt;&lt;li&gt;&amp;lt;w:r&amp;gt; : Définit un groupe de mots&lt;br /&gt;&lt;li&gt;&amp;lt;w:t&amp;gt; : Définit un mot&lt;br /&gt;&lt;li&gt;&amp;lt;w:tab&amp;gt; : Insère une tabulation&lt;br /&gt;&lt;li&gt;&amp;lt;w:tbl&amp;gt; : Une table&lt;br /&gt;&lt;li&gt;&amp;lt;w:tr&amp;gt; : Une ligne (table row)&lt;br /&gt;&lt;li&gt;&amp;lt;w:tc&amp;gt; : Une colonne (table column)&lt;br /&gt;&lt;li&gt;&amp;lt;w:b&amp;gt; : Met le texte en gras&lt;br /&gt;&lt;li&gt;&amp;lt;w:u&amp;gt; : Souligne le texte (Attention il faut préciser le type de soulignement)&lt;br /&gt;&lt;li&gt;&amp;lt;w:customXml element='??'&amp;gt; : Est une balise qui permet de définir des structures de XML comme des information cachées, c'est utile pour structurer le document de manière invisible.  &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Une fois que le document est constitué, il suffit de refaire un zip et de renommer l'extension .zip en .docx. Si vous compressez l'OpenXML à l'aide de java, il faut faire attention à ce que les entries utilise le caractère '/' et non pas '\', autrement le fichier ne pourra être ouvert par la suite OpenOffice.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1614500359579463510?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1614500359579463510/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1614500359579463510' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1614500359579463510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1614500359579463510'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/07/generer-des-document-openxml-word.html' title='Générer des document openXML Word 2003/2007'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2758040210018085642</id><published>2009-07-20T08:08:00.000-07:00</published><updated>2009-07-20T08:48:49.094-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jdom'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='dom'/><category scheme='http://www.blogger.com/atom/ns#' term='sax'/><title type='text'>JDOM vs DOM et SAX</title><content type='html'>La librairie JDOM a l'inconvénient majeur de ne pas être présente dans les APIs JAVA et de ne pas être une norme W3C. Pourtant, même si elle ne propose aucune révolution théorique, cette librairie est plus pratique à utiliser que ses consors SAX et DOM. En faits, SAX et DOM ont été développés pour couvrir être implémenté en C et C++ notamment, JDOM n'ayant pas ses limitations peut se permettre d'être plus intelligente. &lt;br /&gt;&lt;br /&gt;Cette API est très sympathique car elle se sert des fonctionnalités de JAVA pour ne plus avoir en tête les considération de consommation de mémoire qui sont souvent problématique dans le cas des fichiers XML. Les performances s'apparentent à celle du SAX et la souplesse est proche du DOM. &lt;br /&gt;&lt;br /&gt;Elle possède des fonctionnalités qui s'apparente à XPath (mais en plus simple). JDOM peut-être utilisé pour des transformations de noeuds non prises en compte trivialement par XSL (Déplacements de noeuds, clonages, modification de structure hiérarchiques)&lt;br /&gt;&lt;br /&gt;Et pour ceux qui doutent encore, il a été décidé que JDOM sera intégré au futures JDK.&lt;br /&gt;Alors lancez vous !&lt;br /&gt;&lt;br /&gt;Exemple de parsing : &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;SAXBuilder builder = new SAXBuilder();&lt;br /&gt;Document doc = builder.build(xslIs);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Exemple de sérialisation : &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;XMLOutputter xmlOutputter = new XMLOutputter();&lt;br /&gt;xmlOutputter.output(doc, fos);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Exemple de sérialisation : &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;XMLOutputter xmlOutputter = new XMLOutputter();&lt;br /&gt;xmlOutputter.output(doc, fos);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Exemple de copie de noeud : &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Element cloneElement = (Element) originalElement.clone();&lt;br /&gt;parentElement.addContent(cloneElement);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;C'est souvent beaucoup plus simple que XSL dans le cas de transformations complexes !&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2758040210018085642?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2758040210018085642/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2758040210018085642' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2758040210018085642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2758040210018085642'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/07/jdom-vs-dom-et-sax.html' title='JDOM vs DOM et SAX'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1141774282444556380</id><published>2009-07-03T05:33:00.000-07:00</published><updated>2009-07-03T06:17:31.932-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Configurer maven à travers un proxy</title><content type='html'>Voici le fichier de configuration pour passer à travers un proxy&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;settings&amp;gt;&lt;br /&gt;&amp;lt;localRepository&amp;gt;d:/repo-maven&amp;lt;/localRepository&amp;gt;&lt;br /&gt;  &amp;lt;proxies&amp;gt;&lt;br /&gt;   &amp;lt;proxy&amp;gt;&lt;br /&gt;      &amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;&lt;br /&gt;      &amp;lt;protocol&amp;gt;http&amp;lt;/protocol&amp;gt;&lt;br /&gt;      &amp;lt;host&amp;gt;proxy.mycorp.com&amp;lt;/host&amp;gt;&lt;br /&gt;      &amp;lt;port&amp;gt;8080&amp;lt;/port&amp;gt;&lt;br /&gt;      &amp;lt;nonProxyHosts&amp;gt;www.google.com&amp;#124;*.somewhere.com&amp;lt;/nonProxyHosts&amp;gt;&lt;br /&gt;    &amp;lt;/proxy&amp;gt;&lt;br /&gt;  &amp;lt;/proxies&amp;gt;&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1141774282444556380?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1141774282444556380/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1141774282444556380' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1141774282444556380'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1141774282444556380'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/07/configurer-maven-travers-un-proxy.html' title='Configurer maven à travers un proxy'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7440117758963922024</id><published>2009-06-26T06:13:00.001-07:00</published><updated>2009-06-29T23:57:08.721-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='terminologie'/><title type='text'>Terminologie de l'informatique</title><content type='html'>L'informatique est une industrie relativement récente et la plupart de son vocabulaire a été emprunté à des corps de métier plus anciens. La tendance logomachique du secteur n'est plus à démontrer. En général, le vocabulaire utilisé est abscons et imprécis, il est toujours difficilement compréhensible pour le néophyte. A mon avis, il y  a deux raisons à cela : &lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Le développement du business (Un business est d'autant plus juteux qu'il est occulte) C'est ainsi que les astrologues vivaient grassement il y a quelques siècles. &lt;br /&gt;&lt;br /&gt;&lt;li&gt;Un complexe d'infériorité. Le boums de l'informatique a connu une période où les jeunes étaient dominant. Et tout le monde se congratulait d'être cadre, d'être ingénieur. Simplement, il est naturel de crâner un peu quand on est jeune. &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MOA :&lt;/b&gt;&lt;br /&gt;Maitrise d'ouvrage. Le terme &lt;i&gt;maitrise d'ouvrage&lt;/i&gt; vient des métiers du bâtiment. Anciennement, il s'agissait tout simplement du commanditaire de la réalisation. C'est celui qui possède l'argent et gère des budgets. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;commanditaires&lt;/i&gt; est un terme moins ambigu.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;MOE :&lt;/b&gt;&lt;br /&gt;Maîtrise d'œuvre vient également du bâtiment. Cet acteur prend la direction technique de la réalisation. La MOE prend en charge la gestion du projet ainsi que la réalisation. &lt;br /&gt;&lt;i&gt;direction de réalisation&lt;/i&gt; est un terme moins ambigü&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Architecte :&lt;/b&gt;&lt;br /&gt;L'architecte est un concepteur. Ce mot est très pompeux, attendu que à l'inverse du bâtiment un architecte peut et doit mettre la main à la pâte dans la réalisation. Il effectue des choix techniques orientant le choix des technologies, il choisi les modes de réalisation, défini le plan d'implantation du système, contraintes du projets. Il y a deux catégories d'architecte : &lt;br /&gt;&lt;br /&gt;- Architectes système : Défini les plan d'implantation du des serveurs&lt;br /&gt;- Architecte logiciel : Effectue des choix technique&lt;br /&gt;&lt;br /&gt;&lt;i&gt;direction de réalisation&lt;/i&gt; est moins ambigu&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Gestion de configuration :&lt;/b&gt;&lt;br /&gt;La gestion de configuration est une notion empruntée à l'industrie. Ce terme désigne les processus pour gérer le différentes configurations de produits physique. L'informatique a repris ce vocabulaire pour la gestion des sources, mais la maturité aidant il est devenu obsolète de parler de gestion de configuration quand il s'agit de gérer des code sources : appelons un chat un chat. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Le métier :&lt;/b&gt;&lt;br /&gt;Le métier représente les concepts propres au commanditaire. La polysémie du mot &lt;i&gt;métier&lt;/i&gt; est intrinsèque, mais il s'agit le plus généralement de tout ce qui ne concerne pas la technique informatique. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;L'utilisation de l'anglicisme &lt;/i&gt;business&lt;i&gt; est stupide car le business en anglais recouvre deux notions : les affaires et le métier. Autant s'en passer&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Les beans :&lt;/b&gt;&lt;br /&gt;Le &lt;i&gt;bean&lt;/i&gt; est du tartalacrème de chez tartalacrème. il fut un temps où tout était bean. Avec le temps, son sens est devenu plus précis : Il s'agit d'une classe possédant des accesseurs et dépourvue de code de traitement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7440117758963922024?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7440117758963922024/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7440117758963922024' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7440117758963922024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7440117758963922024'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/06/terminologie-de-linformatique.html' title='Terminologie de l&apos;informatique'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7715685911313403040</id><published>2009-06-21T02:49:00.000-07:00</published><updated>2009-06-25T23:54:10.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hors connexion'/><category scheme='http://www.blogger.com/atom/ns#' term='synchronisation'/><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='patch'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Appliquer des patchs sur des répertoires</title><content type='html'>En ayant modifié un repertoire hors de conf, comment répercuter les modifications sur la conf. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-n pour dry-run (faire le test)&lt;br /&gt;-C pour exlure les fichier de conf&lt;br /&gt;&lt;br /&gt;Cette commande pour voir les nouveaux fichiers &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -n -r -v -u -C src dst&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;puis &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -r -v -u -C src dst&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Effectue vraiment l'opération&lt;br /&gt;&lt;br /&gt;Patcher sur un repertoire n'est généralement pas une opératio automatique. &lt;br /&gt;&lt;br /&gt;Cette commande pour voir les fichiers à supprimer &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -n -r -v --del -C src dst&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Puis &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync  -r -v --del -C src dst&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;applique la modification&lt;br /&gt;&lt;br /&gt;diff permet de créer des patch&lt;br /&gt;&lt;br /&gt;patch permet de les appliquer. &lt;br /&gt;&lt;br /&gt;Eclipse permet d'appliquer des patch sur des répertoire en entier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7715685911313403040?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7715685911313403040/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7715685911313403040' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7715685911313403040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7715685911313403040'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/06/appliquer-des-patchs-sur-des.html' title='Appliquer des patchs sur des répertoires'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7620443651926851449</id><published>2009-06-18T02:40:00.000-07:00</published><updated>2009-07-10T02:23:40.800-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='audir'/><category scheme='http://www.blogger.com/atom/ns#' term='raisonnable'/><category scheme='http://www.blogger.com/atom/ns#' term='pmd'/><category scheme='http://www.blogger.com/atom/ns#' term='checkstyle'/><category scheme='http://www.blogger.com/atom/ns#' term='methode'/><title type='text'>La voie du milieu dans le développement informatique</title><content type='html'>Un jour, vous vous êtes peut-être retrouvé, comme moi, piégé dans une querelle surréaliste où deux "experts" s'entretuaient à propos du StringBuffer.append() et de l'opérateur + sur une String. &lt;br /&gt;&lt;br /&gt;En voyant la rage et l'énergie dépensée, vous vous êtes peut-être dit comme moi : peut-être que c'est important ? Et puis, vous vous êtes repris : Non, ça ne peut-pas être important ! Mais alors, comment lutter contre le brassage de vent ? Car en luttant pour le bon sens, on s'aperçoit que la voie la plus raisonnable n'est pas la plus facile à défendre. Selon moi, l'industrie informatique est en passe d'atteindre la maturité, mais certains comportements radicaux de son adolescence subsistent. &lt;br /&gt;&lt;br /&gt;Pour atteindre la sagesse, il convient de considérer les choses avec du recul. Il ne suffit pas d'être rigoureux, il ne suffit pas d'être couvert par les responsable hiérarchique pour bien travailler. L'intelligence n'est pas une vertue strictement positive, dans le sens ou elle constitue un cheminement logique, c'est au contraire la capacité à s'adapter à toutes les situation qui défini le mieux l'intelligence. &lt;br /&gt;&lt;br /&gt;L'organisation typique d'une entreprise de développement informatique est la suivante :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un bureau des méthodes&lt;br /&gt;&lt;li&gt;Un chef de projet de réalisation&lt;br /&gt;&lt;li&gt;Un architecte technique&lt;br /&gt;&lt;li&gt;Les développeurs&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Chacun de ces acteurs sont humains et recherchent à travers leur travail la reconnaissance d'un rôle dans la société. Cet objectif inavoué (et respectable) ne doit pas être oublié pour comprendre des aberrations qu'on rencontre dans la vie des entreprises. Aussi, je voudrais m'attarder à travers l'entreprise sur le sujet tabou des affects et faire de la psychologie appliquée. Les goût qui orientent les vocations de chacun et donc, à tel type de métier correspond un profil psychologique. &lt;br /&gt;&lt;br /&gt;Ces acteurs défendent chacun des intérêts propres et déclenchent souvent des conflits d'intérêts, où s'invite le passionel :&lt;br /&gt;&lt;h3&gt;Le bureau des méthodes&lt;/h3&gt;&lt;br /&gt;Le bureau des méthodes a deux objectifs : &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Améliorer la maintenabilité : Donner des normes, poser des exigences de qualité.&lt;br /&gt;&lt;li&gt;Améliorer la productivité : Fournir des outils et des frameworks, une configuration standard.&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Ces deux vocations sont contradictoires. Pour contrer cet antagonisme de surface, suivre la voie du milieu est la meilleure option, mais c'est aussi la plus difficile.  &lt;br /&gt;&lt;br /&gt;Parce qu'il s'agit d'orienter subtilement les équipes de développement, pour le bureau des méthode, la qualité de la relation avec les équipe de développement est cruciale. Elle passe essentielement par des échanges importants. Une communication ni trop souple, ni trop dure est la solution. Les mails sont utiles, mais rien ne vaut les moyens plus informels pour se comprendre correctement, le téléphone et les réunions. Dans toutes les entreprises que j'ai connues, il n'en est pas une seule ou la relation entre le bureau des méthode et les équipes de réalisation ai été complétement détendue. Ces frictions sont naturelles et inévitable dans une certaine mesure, mais les conflits ouverts ou larvés sont &lt;b&gt;toujours&lt;/b&gt; néfastes. Il faut les éviter à tout prix. Il vaut mieux faire des recommandations que des impositions. &lt;br /&gt;&lt;br /&gt;Le travers d'un bureau des méthodes est d'alourdir inconsidérément le processus. Le meilleur moyen de ne pas se couper de la réalité du terrain est d'appliquer à soit même ce qui est imposé dans le développement des projets réels, &lt;span style="font-weight:bold;"&gt;au sein même&lt;/span&gt; de l'équipe méthode. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Le chef de projet&lt;/h3&gt;&lt;br /&gt;Le rôle d'un chef de projet est :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Optimiser le cout de réalisation&lt;br /&gt;&lt;li&gt;Augmenter le bénéfice &lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Encore un fois, dans le cas du chef de projet, il faut naviguer entre deux eaux. Ce n'est pas un rôle facile, car il n'est pas strictement borné en terme d'affectation. Un chef de projet ne doit pas s'enliser dans la technique et perdre son pragmatisme. A l'inverse, sombrer dans la bureaucratie et ne plus comprendre le langage des équipe qu'il dirige constitue un autre travers. Un chef de projet doit mesurer les impacts des modifications demandées et ne pas rester dans un langage utilisant seulement tache, reste à faire, quand etc. Sa vision doit être synthétique. Le distance raisonnable est une affaire d'expérience, ni trop loin, ni trop proche. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;L'architecte&lt;/h3&gt;&lt;br /&gt;Le rôle de l'architecte consiste à :&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Effectuer des choix techniques&lt;br /&gt;&lt;li&gt;Expliquer et argumenter les solutions&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Contrairement au autre rôle, un architecte n'a pas besoin de se préserver d'une schizophrénie. Son rôle est tout à fait positif et requiert essentielement de la pédagogie. &lt;br /&gt;Un architecte technique tend à concevoir ses projets à partir de sa seule expérience. Ce n'est pas mauvais en soit, mais cela conditionne l'hermétisme à d'autres solutions plus pragmatiques. Il faut éviter de sacraliser sa propre expérience. Et puis, c'est une mauvaise communication de commencer à présenter ses solutions par : "Croyez-en mon expérience". La capacité de remise en cause est fondamentale pour éviter les tentacules de la déréliction. Mieux vos décliner patiemment les avantages de votre solution. &lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Le développeur&lt;/h3&gt;&lt;br /&gt;Le rôle d'une développeur est de produire un programme conforme à ce qui lui a été demandé. &lt;br /&gt;Le travers d'un développeur est de rechercher la solution immédiate à ses problèmes, sans se préoccuper du long terme. Pour bien faire, il faut penser à ses successeurs. L'inverse peut également se produire, lorsqu'un développeur souhaite utiliser une technologie uniquement pour progresser dans ses connaissances. &lt;br /&gt;&lt;br /&gt;Quelque soit votre place dans l'organisation, la meilleure option est de suivre la voie du milieu. &lt;br /&gt;La voie du milieu doit avant tout éviter les écueils typiques :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Auto référence :&lt;/span&gt;&lt;br /&gt;Avec l'avènement d'internet, les experts techniques (le bureau des méthodes) ont tendance à prendre pour argent comptant ce qui est affirmé sur les experts. Ce genre de pratique  est tellement généralisé, que les publications d'experts reprennent souvent ce qu'il ont lus d'autres experts : La boucle est bouclée. Cette auto-référence décorelle les vérités d'internet de celle du monde réel. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Généralisation de l'automatisation :&lt;/span&gt;&lt;br /&gt;Dans la recherche de la qualité, l'utilisation des outils fournissant des indicateurs s'est généralisée. De plus en plus fréquement, la qualité d'un code est appréciée suivant des paramètres automatique. Il est bon de rappeler, tout ce qui est automatique se substitue rarement à l'intelligence. La conformité checkstyle n'est en rien la garantie d'un "bon" code. Rien ne vaut un audit de code utilisant de la matière grise.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Complexité inutile :&lt;/span&gt; &lt;br /&gt;L'informatique s'applique toujours à la modernisation. Tout les acteurs ont économiquement des intérêts à promouvoir la nouveauté. Confondre la nouveauté avec l'efficacité est un mensonge défendu à tous les niveaux du secteur informatique. C'est pourtant clairement faux, ne l'oubliez pas. La plupart des projets de modernisation visent à améliorer l'efficacité. C'est seulement en atteignant cet objectif que vous ferez un client heureux. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Jargonnage :&lt;/span&gt;&lt;br /&gt;L'architecture en informatique est un concept flou. Généralement, il s'agit de conception sous toute ces formes : du découpage, des choix techniques, mais ce peut-être aussi des choix d'organisation qui concerne la gestion de projet. &lt;br /&gt;&lt;br /&gt;Ce statut incommode manque parfois de respectabilité. Selon moi, le soucis principal des architectes est de se positionner correctement pour avoir une autonomie importante. Il existe deux manières pour ce faire : &lt;br /&gt;&lt;ul&gt;&lt;li&gt;la pédagogie (qui est lente)&lt;br /&gt;&lt;li&gt;La rétention d'information et le dirigisme envers le développeur&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Bien évidement la pédagogie nécessite plus de patience mais elle paie mieux sur le long terme. &lt;br /&gt;&lt;br /&gt;Méfiez vous systématiquement de quelqu'un qui utilise trop d'acronymes. Comme dit Pascal, ce qui se conçoit bien s'énonce clairement. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;- Exploitation de la peur :&lt;/span&gt;&lt;br /&gt;La peur est utilisée pour saigner les clients. Elle sert à vendre des "optimisations" à priori. Alourdissant inutilement l'architecture. Lorsqu'une optimisation est proposée, elle doit correspondre à une volumétrie réelle. Si vous n'êtes pas google, il y a de fortes chances que les meilleures réponses aux problèmes de performance consistent à modifier les processus. &lt;br /&gt;&lt;br /&gt;La peur intervient également dans le domaine de la sécurité informatique. Ce n'est pas un hasard si les audits de sécurité sont parmi les plus chers qui soient. Ils font intervenir uniquement des experts. Rappelez-vous simplement ceci, aucune sécurité n'est infaillible. Un chantier de sécurisation sert à placer curseur plus ou moins haut. Si une faille est découverte, cela ne suffit pas à démontrer que le système est mauvais, l'inverse est évidement vrai aussi. la sécurité n'est pas une mesure binaire.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7620443651926851449?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7620443651926851449/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7620443651926851449' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7620443651926851449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7620443651926851449'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/06/la-voie-du-milieu-dans-le-developpement.html' title='La voie du milieu dans le développement informatique'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4389238150690923586</id><published>2009-06-16T08:20:00.000-07:00</published><updated>2009-06-17T00:56:35.386-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='gui'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='document'/><title type='text'>Ouvrir un document en java</title><content type='html'>Pour ouvrir un document sans préciser entièrement la ligne de commande. &lt;br /&gt;&lt;br /&gt;Ceci permet de déléguer la responsabilité d'assigner un programme à un type de document. Pour ouvrir un PDF. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.rgagnon.com/javadetails/java-0014.html"&gt;L'article source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sous windows : &lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;public class ShowPDF {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;Process p = &lt;br /&gt;Runtime.getRuntime()&lt;br /&gt;.exec(&amp;quot;rundll32 url.dll,FileProtocolHandler c:/pdf/mypdf.pdf&amp;quot;);&lt;br /&gt;p.waitFor();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Sous linux : &lt;/span&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;public class ShowPDF {&lt;br /&gt;public static void main(String[] args) throws Exception {&lt;br /&gt;Process p = &lt;br /&gt;Runtime.getRuntime()&lt;br /&gt;.exec(&amp;quot;mimopen  c:/pdf/mypdf.pdf&amp;quot;);&lt;br /&gt;p.waitFor();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pour éditer l'association des fichiers modifier ce fichier :&lt;br /&gt;/usr/share/application-registry/gnome-vfs.applications&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4389238150690923586?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4389238150690923586/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4389238150690923586' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4389238150690923586'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4389238150690923586'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/06/ouvrir-un-document-en-java.html' title='Ouvrir un document en java'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8738519293537915167</id><published>2009-06-12T02:19:00.000-07:00</published><updated>2009-06-18T02:58:10.946-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rad'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='comparatif'/><category scheme='http://www.blogger.com/atom/ns#' term='appfuse'/><title type='text'>Appfuse pour le développement rapide d'application JAVA</title><content type='html'>Appfuse aide au développement rapide des applications web java à l'aide de technologies open source. &lt;br /&gt;&lt;br /&gt;A  l'aide de maven vous pouvez simplement initiez un projet de par la commande mvn archetype:generate et selectionner :&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-basic-jsf&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-basic-spring&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-basic-struts&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-basic-tapestry&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-core&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-modular-jsf&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-modular-spring&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-modular-struts&lt;br /&gt;&lt;li&gt;&lt;br /&gt;appfuse-modular-tapestry&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Les avantages : &lt;br /&gt;Le développement est accéléré par une gestion des utilisateurs et des rôles déjà implémentée. Elle nécessite peu d'adaptation pour se conformer des cas d'utilisations réels d'une application de gestion. &lt;br /&gt;Les controlleurs de base sont assez souples pour se conformer à toutes les navigations rencontrées dans les application de gestion.&lt;br /&gt;Les DAO et manager Générique accélère notablement le cas basique d'édition d'un fomulaire. &lt;br /&gt;L'adaptation graphique est peu couteuse. &lt;br /&gt;&lt;br /&gt;Les inconvénients : &lt;br /&gt;Les prototypes proposés par maven sont assez mauvais :&lt;br /&gt;Le développement avec l'IDE eclipse est difficile à initialiser pour fonctionner avec WTP. &lt;br /&gt;Le pom est pollué par tout un tas de fonctions qui ne sont pas nécessaires quand l'objectif est la rapidité. L'enrichissement progressif aurait été préférable. &lt;br /&gt;Le mécanisme de properties est lourd et ne fonctionne bien qu'avec maven, voir lourdingue et freine la rapidité de développement. &lt;br /&gt;Le prototype maven utilisant la dépendance de war est très peu lisible et n'apporte pas grand chose. &lt;br /&gt;&lt;br /&gt;En réalité, le travail avec appfuse pour une petite application commence par les suppression des fonctions ne concernant pas directement la productivité : checkstyle, PMD, aspect etc. &lt;br /&gt;&lt;br /&gt;La documentation est encore légère et manque d'exemples complets. &lt;br /&gt;&lt;br /&gt;Conclusion : &lt;br /&gt;&lt;br /&gt;Appfuse n'est pas encore un RAD, il n'est pas révolutionnaire non plus. Le vrai problème de appfuse est la manière dont il est exploité avec maven. Cependant, il peu constituer la première inspiration pour créer un framework maison. Les archétypes maven peuvent difficilement être considérés comme un framework RAD.&lt;br /&gt;&lt;br /&gt;A mon sens, les archetypes fournis souffrent d'une conception trop théorique. Ces handicaps sont particulièrement gênants lorsqu'il s'agit d'être rapidement productif. Néamoins, après quelques adaptations, ces prototypes peuvent remplir leurs objectifs de rapidité.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8738519293537915167?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8738519293537915167/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8738519293537915167' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8738519293537915167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8738519293537915167'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/06/appfuse-pour-le-developpement-rapide.html' title='Appfuse pour le développement rapide d&apos;application JAVA'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-375316594636982492</id><published>2009-02-26T07:05:00.001-08:00</published><updated>2009-07-20T10:22:09.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='synchronisation'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rsync'/><title type='text'>Effectuer une compie de synchronisation</title><content type='html'>La commande rsync permet d'effectuer une copie de synchronisation sous Linux. Cette commande permet notamment d'effectuer des backup de vos données (Musique, films, images etc.) mais elle peut également servir à synchroniser les codes sources de vos programmes sans utiliser de gestionnaire de configuration. &lt;br /&gt;&lt;br /&gt;Il existe de nombreuses options que l'on peut consulter à l'aide de man. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Exemples :&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Copie d'une arborescence entière :&lt;/i&gt;&lt;br /&gt;&lt;pre  style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -rvu /srcdir /dstdir &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cette commande permet de copier les fichiers et leur arborescence de /srcdir vers /dstdir&lt;br /&gt;-r pour récursif &lt;br /&gt;-v pour verbose&lt;br /&gt;-u pour update (Autrement les fichiers qui n'ont pas été modifié sont recopiés)&lt;br /&gt;&lt;br /&gt;L'option -n permet de simuler l'opération en listant les modifications qui seront effectuées. &lt;br /&gt;&lt;br /&gt;&lt;i&gt;Copie des fichiers L* et leur arborescence dans vers /dstdir :&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -rvu -f"+ */"  -f"+ L*" -f"- *" /srcdir /dstdir&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pour copier la structure de repértoire seulement &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -av --include='*/' --exclude='*' src dest&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Pour synchroniser un projet maven à partir d'un code source modifié sur une machine n'ayant pas accès au gestionnaire de configuration. &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;rsync -rnvu --delete -c  --exclude=.svn --exclude=target/ /elsewhere/mydistantproject/ /home/myworkspace/mylocalproject/&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-375316594636982492?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/375316594636982492/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=375316594636982492' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/375316594636982492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/375316594636982492'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/effectuer-une-compie-de-synchronisation.html' title='Effectuer une compie de synchronisation'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2055830816651406040</id><published>2009-02-26T05:22:00.000-08:00</published><updated>2011-11-19T08:14:02.450-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sox'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><category scheme='http://www.blogger.com/atom/ns#' term='stereo'/><title type='text'>Convertir des fichiers stéréo en mono</title><content type='html'>Le logiciel sox sous linux permet d'effectuer une conversion de stéréo vers mono. &lt;br /&gt;Il permet également de doser le mixage. &lt;br /&gt;Pour ne recopier que le canal gauche&lt;br /&gt;sox -c1 input.mp3 output.mp3 remix 1&lt;br /&gt;&lt;br /&gt;Pour ne recopier que le canal droit&lt;br /&gt;sox -c1 input.mp3 output.mp3 remix 2&lt;br /&gt;&lt;br /&gt;Pour transformer en mono&lt;br /&gt;sox -c1 input.mp3 output.mp3 remix -&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pour effectuer le  transformation de manière globale.&lt;br /&gt;&lt;br /&gt;find  *.mp3 -exec sox -c1 '{}' 'left/{}' remix - \;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2055830816651406040?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2055830816651406040/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2055830816651406040' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2055830816651406040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2055830816651406040'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/convertir-des-fichiers-stereo-en-mono.html' title='Convertir des fichiers stéréo en mono'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2171371696500657359</id><published>2009-02-25T08:51:00.000-08:00</published><updated>2010-02-01T01:18:27.979-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='find'/><category scheme='http://www.blogger.com/atom/ns#' term='parcours répertoire'/><category scheme='http://www.blogger.com/atom/ns#' term='recursively'/><category scheme='http://www.blogger.com/atom/ns#' term='browse'/><title type='text'>Comment parcourir récursivement un répertoire pour appliquer des traitement en C</title><content type='html'>Lorsque l'on veut appliquer un traitement à des fichiers en parcourant l'arborescence. Il y a la possibilité d'utiliser la commande find associé à - exec.&lt;br /&gt;&lt;br /&gt; Voici quelques exemples du monde réel world FIND usage&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;Copie dans un répertoire&lt;br /&gt;find / -type f -name *.jpg  -exec cp {} . \;&lt;br /&gt;find /home/hudson/repertoire-data/ -type f -regex &amp;quot;.*ARTICLE_O.*&amp;quot; -exec echo {} \;&lt;br /&gt;find /home/hudson/repertoire-data/ -type f -regex &amp;quot;.*ARTICLE_[^O].*&amp;quot; -exec echo {} \;&lt;br /&gt;find . -type f -size +10000 -exec ls -al {} \;&lt;br /&gt;Récherche des fichiers accédés il y a un jour&lt;br /&gt;find . -atime +1 -type f -exec mv {} TMP \; &lt;br /&gt;find . -name &amp;quot;-F&amp;quot; -exec rm {} \;   # a script error created a file called -F &lt;br /&gt;find . -exec grep -i &amp;quot;vds admin&amp;quot; {} \;&lt;br /&gt;find . \! -name &amp;quot;*.Z&amp;quot; -exec compress -f {} \;&lt;br /&gt;find . -type f \! -name &amp;quot;*.Z&amp;quot; \! -name &amp;quot;.comment&amp;quot; -print &amp;#124; tee -a /tmp/list&lt;br /&gt;find . -exec chmod 775 {} \;&lt;br /&gt;find . -user xuser1 -exec chown -R user2 {} \;&lt;br /&gt;find . -exec grep PW0 {} \;&lt;br /&gt;find . -exec grep -i &amp;quot;pw0&amp;quot; {} \;&lt;br /&gt;find . -atime +6&lt;br /&gt;find . -atime +6 -exec ll &amp;#124; more&lt;br /&gt;find . -atime +6 -exec ll &amp;#124; more \;&lt;br /&gt;find . -name auth*&lt;br /&gt;find . -exec grep -i plotme10 {} \;&lt;br /&gt;find . -ls -exec grep 'PLOT_FORMAT 22' {} \;&lt;br /&gt;find . -print -exec grep 'PLOT_FORMAT 22' {} \;&lt;br /&gt;find . -print -exec grep 'PLOT_FORMAT' {} \;&lt;br /&gt;find . -print -exec grep 'PLOT_FORMAT' {} \;&lt;br /&gt;find ./machbook -exec chown 184 {} \;&lt;br /&gt;find . \! -name '*.Z' -exec compress {} \;&lt;br /&gt;find . \! -name &amp;quot;*.Z&amp;quot; -exec compress -f {} \;&lt;br /&gt;find /raid/03c/ecn -xdev -type f -print&lt;br /&gt;find /raid/03c/ecn -xdev -path -type f -print&lt;br /&gt;find / -name .ssh* -print &amp;#124; tee -a ssh-stuff&lt;br /&gt;find . -name &amp;quot;*font*&amp;quot;&lt;br /&gt;find . -name hpmcad*&lt;br /&gt;find . -name *fnt*&lt;br /&gt;find . -name hp_mcad* -print&lt;br /&gt;find . -grep Pld {} \;&lt;br /&gt;find . -exec grep Pld {} \;&lt;br /&gt;find . -exec grep Pld {} \;&lt;br /&gt;find . -exec grep PENWIDTH {} \; &amp;#124; more&lt;br /&gt;find . -name config.pro&lt;br /&gt;find /raid -type d -name &amp;quot;.local_sd_customize&amp;quot; -print&lt;br /&gt;find /raid -type d -name &amp;quot;.local_sd_customize&amp;quot; -ok cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;&lt;br /&gt;find /raid -type d -name &amp;quot;.local_sd_customize&amp;quot; -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;&lt;br /&gt;find . -name xeroxrelease&lt;br /&gt;find . -exec grep xeroxrelease {} \;&lt;br /&gt;find . -name xeroxrelease&lt;br /&gt;find . -name xeroxrelease* -print 2&amp;gt;/dev/null&lt;br /&gt;find . -name &amp;quot;*release*&amp;quot; 2&amp;gt;/dev/null&lt;br /&gt;find / -name &amp;quot;*xerox*&amp;quot; 2&amp;gt;/dev/null&lt;br /&gt;find . -exec grep -i xeroxrelease {} \;&lt;br /&gt;find . -print -exec grep -i xeroxrelease {} \;&lt;br /&gt;find . -print -exec grep -i xeroxrelease {} \; &amp;gt; xeroxrel.lis&lt;br /&gt;find . -exec grep -i xeroxrel {} \;&lt;br /&gt;find . -print -exec grep -i xeroxrel {} \;&lt;br /&gt;find . -print -exec grep -i xeroxrel {} \; &amp;#124; more&lt;br /&gt;find /raid/03c/inwork -xdev -type f -print &amp;gt;&amp;gt; /raid/04d/user_scripts/prt_list.tmp&lt;br /&gt;find . -exec grep '31.53' {} \;&lt;br /&gt;find . -ls -exec grep &amp;quot;31/.53&amp;quot; {} \; &amp;gt; this.lis&lt;br /&gt;find . -print -exec grep &amp;quot;31/.53&amp;quot; {} \; &amp;gt; this.lis&lt;br /&gt;find . -print -exec grep 31.53 {} \; &amp;gt; this.lis&lt;br /&gt;find . -exec grep -i pen {} /;&lt;br /&gt;find . -exec grep -i pen {} \;&lt;br /&gt;find . -print -exec grep -i pen {} \; &amp;#124; more&lt;br /&gt;find . -exec grep -i pen {} \;&lt;br /&gt;find . -atime +6 -exec ll &amp;#124; more \;&lt;br /&gt;find . -atime +6 -exec ll \;&lt;br /&gt;find . -atime +6 -exec ls \;&lt;br /&gt;find . -atime +30 -exec ls \;&lt;br /&gt;find . -atime +30 -exec ls \; &amp;#124; wc -l&lt;br /&gt;find . \! -name '*.Z' -exec compress -f {} \;&lt;br /&gt;find . -name 'cache*' -depth -exec rm {} \;&lt;br /&gt;find . -name 'cache*' -depth -print &amp;#124; tee -a /tmp/cachefiles&lt;br /&gt;find . -name 'cache[0-9][0-9]*' -depth -print &amp;#124; tee -a /tmp/cachefiles&lt;br /&gt;find . -name 'hp_catfile' 'hp_catlock' -depth -print &amp;#124; tee -a /tmp/hp.cats&lt;br /&gt;find . -name 'hp_catfile' -name 'hp_catlock' -depth -print &amp;#124; tee -a /tmp/hp.cats&lt;br /&gt;find . -name 'hp_cat*' -depth -print &amp;#124; tee -a /tmp/hp.cats&lt;br /&gt;find . -name 'hp_cat[fl]*' -depth -print &amp;#124; tee -a /tmp/hp.cats&lt;br /&gt;find /raid -name 'hp_cat[fl]*' -depth -print&lt;br /&gt;find . \! -name '*.Z' -exec compress -f {} \;&lt;br /&gt;find . -name '*' -exec compress -f {} \;&lt;br /&gt;find . -xdev -name &amp;quot;wshp1*&amp;quot; -print&lt;br /&gt;find . -xdev -name &amp;quot;wagoneer*&amp;quot; -print&lt;br /&gt;find . -name &amp;quot;xcmd&amp;quot; -depth -print&lt;br /&gt;find /usr/contrib/src -name &amp;quot;xcmd&amp;quot; -depth -print&lt;br /&gt;find /raid -type d -name &amp;quot;.local_sd_customize&amp;quot; -exec ls {} \; &lt;br /&gt;find /raid -type d -name &amp;quot;.local_sd_customize&amp;quot; \&lt;br /&gt;   -exec cp /raid/04d/MCAD-apps/I_Custom/SD_custom/site_sd_customize/user_filer_project_dirs {} \;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;L'inconvénient de la méthode find est qu'elle passe par l'interpréteur de commande pour lancer le shell ce qui peut-être problématique lorsque l'on souhaite traiter des fichiers ayant des noms comportant des espaces, guillemets, parenthèse etc. &lt;br /&gt;&lt;br /&gt;La seconde solution est de faire un programme C pour appliquer son traitement. La librairie ftw adresse spécialement ce type de problème, elle fonctionne comme la commande find. &lt;br /&gt;&lt;br /&gt;Ses paramètres sont &lt;br /&gt;* Le chemin de départ de la récursion&lt;br /&gt;* La méthode à appeler pour chaque élement (Le nom peut varier mais elle doit retourner un entier et avoir trois arguments. &lt;br /&gt;int nomdemethode(const char *path, const struct stat *ptr, int flag))&lt;br /&gt;&lt;br /&gt;Voici un exemple :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#include &amp;lt;ftw.h&amp;gt;&lt;br /&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int process(const char *path, const struct stat *ptr, int flag)&lt;br /&gt;{&lt;br /&gt; printf(&amp;quot;Found\n path:%s\nflag%d\n&amp;quot;, path, flag);&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main(int argc, char *argv[]) {&lt;br /&gt; if(argc == 1){&lt;br /&gt;  ftw(&amp;quot;.&amp;quot;, process, 1);&lt;br /&gt;}&lt;br /&gt; else{&lt;br /&gt;  ftw(argv[1], process, 1);&lt;br /&gt;}&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Exemple d'utilisation :&lt;br /&gt;&lt;br /&gt;Je voulais appliquer un traitement audio à de nombreux fichiers par le biais de la commande sox, malheureusement ce programme n'avait pas de fonction qui permettait d'effectuer des traitements par lots. &lt;br /&gt;&lt;br /&gt;Les noms de fichiers comportaient aussi de nombreux caractères spéciaux qui empêchaient l'utilisation de la commande find. J'ai adapté le source du programme. &lt;br /&gt;&lt;br /&gt;- Renommer la méthode main de sox par une méthode ancienmain&lt;br /&gt;- Utiliser la méthode main du type présenté plus haut&lt;br /&gt;- Créer une méthode  appelée à chaque fois que ftw rencontre un nouvel élément on l'appelle process. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;int process(char *dirname, const struct stat *status, int type){&lt;br /&gt;                                if(!(type == FTW_F &amp;amp;&amp;amp; strstr(dirname,&amp;quot;.mp3&amp;quot;)!=NULL&amp;amp;&amp;amp; strstr(dirname,&amp;quot;/L-&amp;quot;)==NULL)){ &lt;br /&gt;                                    return 0;&lt;br /&gt;                                }&lt;br /&gt;                                &lt;br /&gt;                                // Ici nous construisons les param&amp;#232;tres qui servent pour appeler l'ancien main. &lt;br /&gt;                                                            &lt;br /&gt;                                &lt;br /&gt;                             char * params[6]; &lt;br /&gt;                  char nom_transforme[200];&lt;br /&gt;                  struct stat s; &lt;br /&gt;                  nom_transforme[0]=0;&lt;br /&gt;                  params[0]=&amp;quot;sox&amp;quot;;&lt;br /&gt;                  params[1]=&amp;quot;-c1&amp;quot;;&lt;br /&gt;                  // ...&lt;br /&gt;                   params[4]=&amp;quot;remix&amp;quot;;&lt;br /&gt;                  params[5]=&amp;quot;1&amp;quot;;&lt;br /&gt;                  &lt;br /&gt;                  /*&lt;br /&gt;                    Les programmes ne sont g&amp;#233;n&amp;#233;ralement pas fait pour fonctionner en batch&lt;br /&gt;                    aussi, il est n&amp;#233;cessaire d'initialiser les variable globale &amp;#224; chaque appel.&lt;br /&gt;                    Ce sont celle qui sont en dehors de toute m&amp;#233;thode. &lt;br /&gt;                **/&lt;br /&gt;                mavarglobale1=0;&lt;br /&gt;                mavarglobale2=1;&lt;br /&gt;                            ...&lt;br /&gt;                                mavarglobale3 = NULL;&lt;br /&gt;                                mavarglobale4  = 0;&lt;br /&gt;                                &lt;br /&gt;                        // Appel de l'ancien main&lt;br /&gt;                ancienmain(6,params);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Il ne s'agit clairement pas d'un controunement facile, et la volumétrie des fichiers doit clairement compenser l'effort de programmation par rapport à un appel de find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2171371696500657359?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2171371696500657359/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2171371696500657359' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2171371696500657359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2171371696500657359'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/comment-parcourir-recursivement-un.html' title='Comment parcourir récursivement un répertoire pour appliquer des traitement en C'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4607520133601753536</id><published>2009-02-25T05:07:00.000-08:00</published><updated>2009-02-25T05:14:31.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='samba'/><category scheme='http://www.blogger.com/atom/ns#' term='mount'/><title type='text'>Montage Samba Mandriva</title><content type='html'>Comment monter un partage samba en ligne de commande sous mandriva.&lt;br /&gt;&lt;br /&gt;Installer le rpm mount-cifs&lt;br /&gt;&lt;br /&gt;taper &lt;br /&gt;mount.cifs //Monserver/monpartage /mnt/monpointdemontage -ouser=monuser&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4607520133601753536?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4607520133601753536/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4607520133601753536' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4607520133601753536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4607520133601753536'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/montage-samba-mandriva.html' title='Montage Samba Mandriva'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3586899621048478799</id><published>2009-02-20T01:58:00.000-08:00</published><updated>2009-02-20T02:16:24.537-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='synchronisation'/><category scheme='http://www.blogger.com/atom/ns#' term='threadgroup'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Utilisations des threads</title><content type='html'>Il existe deux techniques d'utilisation des thread en JAVA :&lt;br /&gt;&lt;br /&gt;   * Implémenter l'interface Runnable&lt;br /&gt;   * Etendre la classe thread.&lt;br /&gt;&lt;br /&gt;Dans l'optique de faire un code robuste, je recommande d'implémenter l'interface Runnable, elle évite de se perdre dans la profusion de méthodes offertes par la classe Thread.&lt;br /&gt;&lt;br /&gt;Les threads servent à paralléliser les tâches. Deux opérations clés sont importantes.&lt;br /&gt;&lt;br /&gt;   * Le départ&lt;br /&gt;   * La synchronisation (jointure)&lt;br /&gt;&lt;br /&gt;Le plus délicat est de comprendre l'utilisation du wait et du notify. Pour être utilisé le wait et le notify doivent être placé sur la même classe (Ici le ThreadGroup)&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;Ce bloc lance 25 threads&lt;br /&gt;&lt;br /&gt;// Ici nous construisons sans les déclencher tous les thread dont nous avons besoins&lt;br /&gt;List&amp;lt;thread&amp;gt; threads = new ArrayList&amp;lt;thread&amp;gt;();&lt;br /&gt;ThreadGroup threadGroup = new ThreadGroup(&amp;quot;MyThreadList&amp;quot;);&lt;br /&gt;for (int i = 0; i &amp;lt; thread =&amp;quot; new&amp;quot; thread =&amp;quot; new&amp;quot;&amp;gt; 0) {&lt;br /&gt;   System.out.println(&amp;quot;Threads restants : &amp;quot; + threadGroup.activeCount());&lt;br /&gt;   // Attente d'une n&amp;#231;otification&lt;br /&gt;   threadGroup.wait();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Voici l'implémentation de Runnable&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;public class MyThread implements Runnable {&lt;br /&gt;&lt;br /&gt;public MyThread(ThreadGroup tg) {&lt;br /&gt;       threadGroup = tg;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public void run() {&lt;br /&gt;System.out.prinln(&amp;quot;Effectue le traitement&amp;quot;);&lt;br /&gt;&lt;br /&gt;// Ici le ThreadGroup est notifi&amp;#233;&lt;br /&gt;synchronized (threadGroup) {&lt;br /&gt;       // Notification du parent&lt;br /&gt;       threadGroup.notify();  &lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3586899621048478799?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3586899621048478799/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3586899621048478799' title='2 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3586899621048478799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3586899621048478799'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/utilisations-des-threads.html' title='Utilisations des threads'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2881874529989134180</id><published>2009-02-19T06:29:00.000-08:00</published><updated>2009-02-19T06:41:30.030-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='encoding'/><category scheme='http://www.blogger.com/atom/ns#' term='encodage'/><title type='text'>Encodage et maven</title><content type='html'>Si l'on assemble les projets maven sur des machines ayant des encoding différents (par exemple une application développée sous windows et assemblé sur LINUX UTF-8), il peut y avoir des problèmes d'encodage de fichier se manifestant par caractères inconnu aparaissant à l'écran. &lt;br /&gt;&lt;br /&gt;Pour ne pas avoir de soucis, il est nécessaire de préciser l'encoding du compilateur et celui de l'assembleur ressources dans le descipteur de projet pom.xml . &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&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-compiler-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;encoding&amp;gt;ISO-8859-1&amp;lt;/encoding&amp;gt;&lt;br /&gt;&amp;lt;source&amp;gt;1.5&amp;lt;/source&amp;gt;&lt;br /&gt;&amp;lt;target&amp;gt;1.5&amp;lt;/target&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;/plugin&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-resources-plugin&lt;br /&gt;&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;encoding&amp;gt;ISO-8859-1&amp;lt;/encoding&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2881874529989134180?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2881874529989134180/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2881874529989134180' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2881874529989134180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2881874529989134180'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/02/encodage-et-maven.html' title='Encodage et maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6890411905379720901</id><published>2009-01-26T05:32:00.000-08:00</published><updated>2009-02-26T05:28:30.119-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ligne de commande'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='substitution'/><category scheme='http://www.blogger.com/atom/ns#' term='expression régulière'/><title type='text'>Traiter les espace dans les lignes de commande</title><content type='html'>Le traitement des espaces dans les lignes de commande peut-être délicat dans les lignes de commande linux. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;mkdir convert/&lt;br /&gt;ls *.dat&amp;#124;&lt;br /&gt;while read i&lt;br /&gt;do&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/ /espace}&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;i=${i/espace/\\ }&lt;br /&gt;echo sox -c1 $i convert/$i remix 1&lt;br /&gt;done&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6890411905379720901?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6890411905379720901/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6890411905379720901' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6890411905379720901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6890411905379720901'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2009/01/traiter-les-espace-dans-les-lignes-de.html' title='Traiter les espace dans les lignes de commande'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-591777758518130779</id><published>2008-12-16T02:21:00.000-08:00</published><updated>2008-12-16T02:24:07.768-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log4j'/><title type='text'>Faire un appender suffixé par la date</title><content type='html'>Cette classe permet de faire un appender qui suffixe la date.&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;package myprog.util;&lt;br /&gt;import java.text.SimpleDateFormat;&lt;br /&gt;import java.util.Date;&lt;br /&gt; &lt;br /&gt;import org.apache.log4j.FileAppender;&lt;br /&gt; &lt;br /&gt;public class DateFileAppender extends FileAppender {&lt;br /&gt; &lt;br /&gt;        private String datePattern = &amp;quot;yyyyMMddhhmm&amp;quot;;&lt;br /&gt;        &lt;br /&gt;        public void setFile(String strFile) {&lt;br /&gt;                String strDate;&lt;br /&gt;                SimpleDateFormat sdf;&lt;br /&gt;                &lt;br /&gt;            if (datePattern!=null &amp;amp;&amp;amp; strFile!=null) {&lt;br /&gt;                sdf = new SimpleDateFormat(datePattern);&lt;br /&gt;                strDate = sdf.format(new Date());&lt;br /&gt;                fileName = strFile.replaceAll(&amp;quot;%date%&amp;quot;, strDate);&lt;br /&gt;              } else {&lt;br /&gt;                  System.err.println(&amp;quot;Either File or DatePattern options are not set for appender [&amp;quot; + name + &amp;quot;].&amp;quot;);&lt;br /&gt;              }&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        public String getDatePattern() {&lt;br /&gt;                return datePattern;&lt;br /&gt;        }&lt;br /&gt; &lt;br /&gt;        public void setDatePattern(String datePattern) {&lt;br /&gt;                this.datePattern = datePattern;&lt;br /&gt;        }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Pour l'utiliser dans le fichier log4j&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;log4j.appender.F1=myprog.util.DateFileAppender&lt;br /&gt;log4j.appender.F1.File=log/extract-generated-%date%.log&lt;br /&gt;log4j.appender.F1.layout=org.apache.log4j.PatternLayout&lt;br /&gt;log4j.appender.F1.layout.ConversionPattern=%m%n&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-591777758518130779?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/591777758518130779/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=591777758518130779' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/591777758518130779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/591777758518130779'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/12/faire-un-appender-suffix-par-la-date.html' title='Faire un appender suffixé par la date'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4696401441808095695</id><published>2008-12-05T05:10:00.000-08:00</published><updated>2008-12-05T05:16:56.701-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='xstream'/><title type='text'>Utiliser XStream rapidement</title><content type='html'>&lt;h2&gt;&lt;br /&gt;Méthodes importantes&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Definir une classes&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;alias("MY_TABLE", MyType.class);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Definir un champ&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;aliasField("MY_TABLE", MyType.class, "fieldName");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Definir un attribut&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;aliasAttribute(MyType.class, "fieldName","attribute-name");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Ignorer des champs&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;omitField(CaptureSacapt.class, "mareeId");&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h2&gt;&lt;br /&gt;Questions diverses&lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Utiliser un format de date compatible avec les XSD&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;registerConverter(new ISO8601DateConverter());&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il est nécessaire pour ceci d'ajouter à son fichier POM&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;        &amp;lt;groupId&amp;gt;joda-time&amp;lt;/groupId&amp;gt;&lt;br /&gt;        &amp;lt;artifactId&amp;gt;joda-time&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;version&amp;gt;1.5.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Changer l'ordre des champs&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;La manière la plus simple de changer l'ordre d'apparition des balise dans le XML généré est tout simplement de changer l'ordre des champs à l'intérieur de la classe.&lt;br /&gt;&lt;br /&gt;L'autre méthode consiste à se servir d'un trieur de champs.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SortableFieldKeySorter sorter = new SortableFieldKeySorter();&lt;br /&gt;sorter.registerFieldOrder(MyType.class, &lt;br /&gt;new String[] { &amp;quot;firstToSerialize&amp;quot;, &lt;br /&gt;&amp;quot;secondToSerialize&amp;quot;, &lt;br /&gt;&amp;quot;thirdToSerialize&amp;quot; }&lt;br /&gt;);&lt;br /&gt;xstream = new XStream(new Sun14ReflectionProvider(new FieldDictionary( sorter)));&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Les éléments nuls&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;Il n'existe pas de manière simple de traiter les chaine vide comme des nulles. Il est nécessaire d'implémenter un convertisseur et de l'enregistrer.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;&lt;br /&gt;Validation par XSD&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;Un XML est validé par XSD&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SAXParserFactory spf = SAXParserFactory.newInstance();&lt;br /&gt;spf.setNamespaceAware(true);&lt;br /&gt;spf.setValidating(true);&lt;br /&gt;SAXParser sp = spf.newSAXParser();&lt;br /&gt;sp.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);&lt;br /&gt;InputStream schemaIs = getClass().getResourceAsStream(&amp;quot;/my-validator.xsd&amp;quot;);&lt;br /&gt;sp.setProperty(JAXP_SCHEMA_SOURCE, schemaIs);&lt;br /&gt;XSDHandler handler = new XSDHandler();&lt;br /&gt;sp.parse(file, handler);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4696401441808095695?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4696401441808095695/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4696401441808095695' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4696401441808095695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4696401441808095695'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/12/utiliser-xstream-rapidement.html' title='Utiliser XStream rapidement'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6929933128983549639</id><published>2008-10-28T05:47:00.000-07:00</published><updated>2008-10-28T05:51:13.959-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='annotations'/><title type='text'>Generators in Hibernate Annotations</title><content type='html'>Identity generator in hibernate&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Id &lt;br /&gt;@GeneratedValue (strategy=GenerationType.IDENTITY)&lt;br /&gt;@Column(name = &amp;quot;REJ_CDN&amp;quot;)&lt;br /&gt;int id;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;* Tested with Sybase&lt;br /&gt;&lt;br /&gt;Increment generator in hibernate &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;@Id&lt;br /&gt;@GeneratedValue(generator = &amp;quot;autoincrement&amp;quot;)&lt;br /&gt;@GenericGenerator(strategy = &amp;quot;increment&amp;quot;, name = &amp;quot;autoincrement&amp;quot;)&lt;br /&gt;@Column(name = &amp;quot;MYID&amp;quot;)&lt;br /&gt;Integer id;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;* Tested with Sybase&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6929933128983549639?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6929933128983549639/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6929933128983549639' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6929933128983549639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6929933128983549639'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/generators-in-hibernate-annotations.html' title='Generators in Hibernate Annotations'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4731749623883946591</id><published>2008-10-24T07:17:00.000-07:00</published><updated>2010-05-21T02:20:10.748-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajp13'/><category scheme='http://www.blogger.com/atom/ns#' term='load balancing'/><category scheme='http://www.blogger.com/atom/ns#' term='authentication'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>AJP13 avec apache</title><content type='html'>Pour router votre serveur apache vers le serveur tomcat, il faut utiliser un proxy, apache délègue sa requête au serveur tomcat. Ce mode de fonctionnement permet surtout de faire du load balancing et, lorsqu'il s'agit de servir des fichiers, utiliser la code natif plus performant de apache. &lt;br /&gt;&lt;br /&gt;Après avoir installé et déclarés le module proxy_ajp_module dans le fichiers httpd.conf :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;LoadModule proxy_module modules/mod_proxy.so&lt;br /&gt;LoadModule proxy_connect_module modules/mod_proxy_connect.so&lt;br /&gt;LoadModule proxy_ftp_module modules/mod_proxy_ftp.so&lt;br /&gt;LoadModule proxy_http_module modules/mod_proxy_http.so&lt;br /&gt;LoadModule proxy_ajp_module modules/mod_proxy_ajp.so&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ajouter dans le fichier httpd.conf les lignes suivantes &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;Include conf/vhosts.d/*.conf&lt;br /&gt;&amp;lt;Location /wiki &amp;gt;&lt;br /&gt; AuthType Basic&lt;br /&gt; AuthName &amp;quot;Restricted Files&amp;quot;&lt;br /&gt; AuthUserFile /etc/apachepasswd&lt;br /&gt; Require user wiki&lt;br /&gt; ProxyPass ajp://localhost:8009/JSPWiki&lt;br /&gt; ProxyPassReverse ajp://localhost:8009/JSPWiki&lt;br /&gt; allow from all&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&amp;lt;Location /gestion &amp;gt;&lt;br /&gt; ProxyPass ajp://localhost:8009/gestion&lt;br /&gt; ProxyPassReverse ajp://localhost:8009/&lt;br /&gt; allow from all&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;Autrement, il est aussi possible de créer un fichier worker.properties &lt;br /&gt;# worker "worker1" will talk to Tomcat listening on machine www.x.com at port 8007 using 2 lb factor&lt;br /&gt;worker.list=worker1&lt;br /&gt;worker.worker1.host=myhost&lt;br /&gt;worker.worker1.port=9009&lt;br /&gt;worker.worker1.lbfactor=2&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;# Update this path to match your conf directory location (put workers.properties next to httpd.conf)&lt;br /&gt;JkWorkersFile /etc/httpd/conf/worker.properties&lt;br /&gt;# Where to put jk shared memory&lt;br /&gt;# Update this path to match your local state directory or logs directory&lt;br /&gt;JkShmFile     /var/log/httpd/mod_jk.shm&lt;br /&gt;# Where to put jk logs&lt;br /&gt;# Update this path to match your logs directory location (put mod_jk.log next to access_log)&lt;br /&gt;JkLogFile     /var/log/httpd/mod_jk.log&lt;br /&gt;# Set the jk log level [debug/error/info]&lt;br /&gt;JkLogLevel    info&lt;br /&gt;# Select the timestamp log format&lt;br /&gt;JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "&lt;br /&gt;# Send everything for context /examples to worker named worker1 (ajp13)&lt;br /&gt;JkMount  /ft-jobs/* worker1&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Changer l'URL&lt;/h2&gt;&lt;br /&gt;Pour configurer de manière centralisée les applications, il est possible d'utiliser un apache frontal et de repartir les adresses vers des serveurs mandatataires, apache agit donc comme un proxy et il suffit d'ajouter la ligne suivante dans le fichier httpd.conf&lt;br /&gt;Par exemple si la machine vm04 est le frontal et que le serveur hudson est sur la vm04, il suffit d'ajouter la ligne suivante au fichier httpd.conf&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;ProxyPass   /hudson/  http://vm04:8080/hudson/&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;On accedera à hudson par l'url http://vm01/hudson/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Faire du load balancing&lt;/h2&gt;&lt;br /&gt;&lt;h3&gt;Solution n°1&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Location /jonas&amp;gt;&lt;br /&gt;ProxyPass   balancer://mycluster/&lt;br /&gt;ProxyPassReverse  balancer://mycluster/&lt;br /&gt;Allow From All&lt;br /&gt;&amp;lt;/Location&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;Proxy balancer://mycluster&amp;gt;&lt;br /&gt;BalancerMember  ajp://localhost:9009/myapp&lt;br /&gt;BalancerMember  ajp://localhost:8009/myapp&lt;br /&gt;&amp;lt;/Proxy&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Solution n°2&lt;/h3&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&lt;Location /jonas&gt;&lt;br /&gt;ProxyPass   http://localhost/myapp/&lt;br /&gt;ProxyPassReverse /myapp/&lt;br /&gt;Allow From All&lt;br /&gt;&lt;/Location&gt;&lt;br /&gt;&lt;br /&gt;JkWorkersFile /etc/httpd/conf/worker.properties&lt;br /&gt;JkShmFile     /var/log/httpd/mod_jk.shm&lt;br /&gt;access_log)&lt;br /&gt;JkLogFile     /var/log/httpd/mod_jk.log&lt;br /&gt;JkLogLevel    info&lt;br /&gt;JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "&lt;br /&gt;JkMount  /myapp/* worker1&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4731749623883946591?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4731749623883946591/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4731749623883946591' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4731749623883946591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4731749623883946591'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/ajp13-dans-httpdconf.html' title='AJP13 avec apache'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5797512058980735522</id><published>2008-10-21T05:40:00.000-07:00</published><updated>2008-10-21T05:44:19.590-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='error'/><title type='text'>No Dialect mapping for JDBC type: -1</title><content type='html'>org.hibernate.MappingException: No Dialect mapping for JDBC type: -1&lt;br /&gt;&lt;br /&gt;Was provoked by :&lt;br /&gt;&lt;br /&gt;  &lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;String query = &amp;quot;SELECT * FROM MYTABLE WHERE MYID=? &amp;quot;&lt;br /&gt;+ &amp;quot;AND MYCRITERIA &amp;gt;= ?&amp;quot;;&lt;br /&gt;SQLQuery sqlQuery;&lt;br /&gt;sqlQuery = session.createSQLQuery(query);&lt;br /&gt;sqlQuery.setString(0, code);&lt;br /&gt;sqlQuery.setDate(1, date);&lt;br /&gt;List&amp;lt;string&amp;gt; ports = sqlQuery.list();&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The cause was I could not to use the &lt;span style="font-weight: bold;"&gt;*&lt;/span&gt;, I had to specify each field instead.&lt;/string&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5797512058980735522?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5797512058980735522/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5797512058980735522' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5797512058980735522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5797512058980735522'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/no-dialect-mapping-for-jdbc-type-1.html' title='No Dialect mapping for JDBC type: -1'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5361329421625023382</id><published>2008-10-21T02:06:00.000-07:00</published><updated>2008-12-29T07:29:03.667-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webdav'/><category scheme='http://www.blogger.com/atom/ns#' term='common-httpclient'/><title type='text'>How to copy a file on webdav using common-httpclient ?</title><content type='html'>Webdav technology allow sharing files with internet. WebDav is a filesytem interface relying on http protocol, a non transactionnal. Webdav manages files whithout locking and work using a versionning system in order to continue working for multiple users. A tricky mecanism for holding concurrent versions lay behind the scene, but if you plan to use WebDav like you'd use a samba filesytem, you may not care understanding  of the hidden processes. &lt;br /&gt;&lt;br /&gt;If your on a local network, you'd still prefer more standard file system for convenience.&lt;br /&gt;&lt;br /&gt;In java, you can use the generic http client commons-httpclient to put your files on a webdav server. I give you a sample code that let you create a file on the server and then DELETE it. Somme more sophisticated operations can be performed with the jackrabbit-webdav library, it will provide you with more operations. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;HostConfiguration hostConfig = new HostConfiguration();&lt;br /&gt;hostConfig.setHost(&amp;quot;targetserver&amp;quot;);&lt;br /&gt;HttpConnectionManager connectionManager = new MultiThreadedHttpConnectionManager();&lt;br /&gt;HttpConnectionManagerParams params = new HttpConnectionManagerParams();&lt;br /&gt;int maxHostConnections = 20;&lt;br /&gt;params.setMaxConnectionsPerHost(hostConfig, maxHostConnections);&lt;br /&gt;connectionManager.setParams(params);&lt;br /&gt;HttpClient client = new HttpClient(connectionManager);&lt;br /&gt;Credentials creds = new UsernamePasswordCredentials(&amp;quot;username&amp;quot;,&amp;quot;password&amp;quot;);&lt;br /&gt;client.getState().setCredentials(AuthScope.ANY, creds);&lt;br /&gt;client.setHostConfiguration(hostConfig);&lt;br /&gt;PutMethod putMethod = new PutMethod(&lt;br /&gt;                    &amp;quot;http://targetserver:8080/webdav/targetfilename&amp;quot;);&lt;br /&gt;FileInputStream is = new FileInputStream("myfile.pdf");&lt;br /&gt;InputStreamRequestEntity requestEntity = new InputStreamRequestEntity(is);&lt;br /&gt;putMethod.setRequestEntity(requestEntity);&lt;br /&gt;client.executeMethod(putMethod);&lt;br /&gt;System.out.println(putMethod.getStatusCode() + &amp;quot; &amp;quot;&lt;br /&gt;                    + putMethod.getStatusText());&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You could have to sort of status code :&lt;br /&gt;201 Created (A file has been created)&lt;br /&gt;204 No data(The http response has no data, but the operation has performed correctly)&lt;br /&gt;&lt;br /&gt;And to delete a file : &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;DeleteMethod deleteMethod = new DeleteMethod(&lt;br /&gt;                    &amp;quot;http://targetserver:8080/webdav/targetfilename&amp;quot;);&lt;br /&gt;client.executeMethod(deleteMethod);&lt;br /&gt;System.out.println(putMethod.getStatusCode() + &amp;quot; &amp;quot;&lt;br /&gt;                    + putMethod.getStatusText());&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5361329421625023382?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5361329421625023382/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5361329421625023382' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5361329421625023382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5361329421625023382'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/how-to-copy-file-on-webdav-using-common.html' title='How to copy a file on webdav using common-httpclient ?'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1840493375370692688</id><published>2008-10-14T08:41:00.000-07:00</published><updated>2009-05-19T01:38:25.761-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='startup'/><category scheme='http://www.blogger.com/atom/ns#' term='opensuse'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='démarrage'/><title type='text'>Démarrage des programmes au boot</title><content type='html'>Le fichier /etc/initab définit le niveau désiré.&lt;br /&gt;&lt;br /&gt;3: Sans écran, multiutilisateur, cela permet un demarrage plus rapide et économise les ressources nécessaire pour le X. Utile pour un serveur.&lt;br /&gt;5: Avec le démarrage du mode graphique, c'est le mode par défaut.&lt;br /&gt;&lt;br /&gt;Pour démarrer un programme automatiquement :&lt;br /&gt;&lt;br /&gt;Créer le fichier de démarrage dans /etc/rc.d/rcX.d/ ou X est le niveau du démarrage. &lt;br /&gt;&lt;br /&gt;Pour le démarrage, il faut préfixer le nom du fichier de S et donner un numéro de séquence. &lt;br /&gt;&lt;br /&gt;Pour l'extinction, il faut préfixer le nom du fichier de K et donner un numéro de séquence. &lt;br /&gt;&lt;br /&gt;Ne pas oublier si le fichier .depend.start de renseigner les dépendances.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1840493375370692688?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1840493375370692688/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1840493375370692688' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1840493375370692688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1840493375370692688'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/changer-le-mode-de-dmarrage-dun-serveur.html' title='Démarrage des programmes au boot'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8774605652974357018</id><published>2008-10-08T05:12:00.000-07:00</published><updated>2009-06-02T00:46:28.760-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metrologie'/><category scheme='http://www.blogger.com/atom/ns#' term='metrics'/><category scheme='http://www.blogger.com/atom/ns#' term='ncss'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Créer la metrologie à l'aide de maven</title><content type='html'>Le pluggin javancss de paven permet de calculer les métriques pour un projet. Notamment, cela permet de voir quel ration de code a été commenté.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;mvn javancss:report&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;NCSS est le nombre d'instructions, ces dernières sont spécifié par une norme, grossièrement cela correspond au nombre de ';' et de '{'&lt;br /&gt;&lt;br /&gt;2766 est le nombre d'instruction du projet&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Programm NCSS : &lt;/span&gt;le nombre d'instruction total&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;NCSS average :&lt;/span&gt; le nombre d'instruction moyen par classes&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CCN :&lt;/span&gt; la complexité cyclomatique&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Javadocs average :&lt;/span&gt; Le nombre de ligen de commentaire par classe.&lt;br /&gt;&lt;br /&gt;&lt;table class="bodyTable"&gt;&lt;tbody&gt;&lt;tr class="b"&gt;&lt;th&gt;Program NCSS&lt;/th&gt;&lt;th&gt;NCSS average&lt;/th&gt;&lt;th&gt;CCN average&lt;/th&gt;&lt;th&gt;Javadocs average&lt;/th&gt;&lt;/tr&gt;&lt;tr class="a"&gt;&lt;td&gt;2,766.00&lt;/td&gt;&lt;td&gt;3.86&lt;/td&gt;&lt;td&gt;2.02&lt;/td&gt;&lt;td&gt;0.46&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table class="bodyTable"&gt;&lt;tbody&gt;&lt;tr class="a"&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;th&gt;&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;tr class="b"&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8774605652974357018?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8774605652974357018/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8774605652974357018' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8774605652974357018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8774605652974357018'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/creating-metrics-using-maven.html' title='Créer la metrologie à l&apos;aide de maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6864455801720758024</id><published>2008-10-03T02:32:00.000-07:00</published><updated>2010-02-09T06:02:09.957-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><title type='text'>Astuces de backup sur Ubuntu et autres LINUX</title><content type='html'>Pour nettoyer automatiquement des répertoire de backup des fichiers top anciens&lt;br /&gt;&lt;br /&gt;Mettez en cron la commande :  &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;find  /var/backupreposvn/ -atime +60 -type f&amp;#124;xargs rm -f&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pour créer un backup de votre NAS sur votre ordinateur en ayant une gestion des backups trop ancien : &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;export BACKUPDIR=$HOME/backup/&lt;br /&gt;mkdir $BACKUPDIR&lt;br /&gt;export SRCFILE=$HOME/backup/`date +%Y%m%d`.tgz&lt;br /&gt;tar -cvzf $SRCFILE $HOME/.gvfs/documents\ sur\ ls-wsglbc3/&lt;br /&gt;export COMBIEN=`ls $BACKUPDIR|wc -l`&lt;br /&gt;if [[ $COMBIEN&gt;3 ]]&lt;br /&gt;then &lt;br /&gt;   find $HOME/backup/ -mtime +30 -exec rm -f {} \;&lt;br /&gt;else&lt;br /&gt;  echo "Pas de fichier à supprimer"&lt;br /&gt;fi&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My Sql&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;mysqldump -uroot -pjt ft_jobs_val|gzip &gt;/var/backup/ft_jobs_val_`date +%Y%m%d`.dump.gz&lt;br /&gt;mysqldump -uroot -pjt ft_jobs_val_int|gzip &gt;/var/backup/ft_jobs_val_int_`date +%Y%m%d`.dump.gz&lt;br /&gt;mysqldump -uroot -pjt jira1|gzip &gt;/var/backup/ft_jobs_jira1_`date +%Y%m%d`.dump.gz&lt;br /&gt;mysqldump -uroot -pjt jira2|gzip &gt;/var/backup/ft_jobs_jira2_`date +%Y%m%d`.dump.gz&lt;br /&gt;find /var/backup/ -mtime +30 -exec rm -f {} \;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ce script doit être lancé à chaque démarrage de votre session.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6864455801720758024?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6864455801720758024/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6864455801720758024' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6864455801720758024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6864455801720758024'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/nettoyer-automatiquement-ses-rpertoires.html' title='Astuces de backup sur Ubuntu et autres LINUX'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5108407350405348543</id><published>2008-10-02T07:21:00.000-07:00</published><updated>2008-10-21T06:04:46.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='installation'/><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><title type='text'>Compiler subversion à partir des sources</title><content type='html'>Sous linux :&lt;br /&gt;Telecharger et installer openSSL&lt;br /&gt;http://www.openssl.org/source/&lt;br /&gt;&lt;br /&gt;./config --prefix=/usr/&lt;br /&gt;&lt;br /&gt;Downloader les sources sur http://subversion.tigris.org&lt;br /&gt;&lt;br /&gt;Dezipper &lt;br /&gt;&lt;br /&gt;Downloader neon sur http://www.webdav.org&lt;br /&gt;Downloader apr sur http://apr.apache.org&lt;br /&gt;Downloader apr-util sur http://apr.apache.org&lt;br /&gt;&lt;br /&gt;Dezipper ces trois projet et deplacez les dans dans le projet subversion &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;mv /home/myhome/apr-util-XXX/ /home/myhome/subversion-XXX/apr-util/&lt;br /&gt;mv /home/myhome/apr-XXX/ /home/myhome/subversion-XXX/apr/&lt;br /&gt;mv /home/myhome/neon-XXX/ /home/myhome/subversion-XXX/neon/&lt;br /&gt;&lt;br /&gt;./configure --prefix=/usr&lt;br /&gt;&lt;br /&gt;make install&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5108407350405348543?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5108407350405348543/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5108407350405348543' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5108407350405348543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5108407350405348543'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/compiler-subversion-partir-des-sources.html' title='Compiler subversion à partir des sources'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-8604321484387401938</id><published>2008-10-02T06:31:00.000-07:00</published><updated>2008-10-02T06:45:50.200-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='statistique'/><title type='text'>Effectuer une requête simple à l'aide d'Hibernate</title><content type='html'>Hibernate, même s'il est particulièrement à l'aise sur les problème d'informatique de gestion (Lecture/Modification d'enregistrements), ne peut se substituer à toutes les utilisations qui sont faite lors de SQL. &lt;br /&gt;&lt;br /&gt;C'est particulièrement vrai lorsqu'on se sert de fonctions statistique, telle que SUM( ) ou COUNT(*)  Dans ces cas une requête simple est préférable. Hibernate offre la possibilité de faire des requêtes simples par la fonction createSQLQuery("SELECT SUM(MACOL) FROM MATABLE"). &lt;br /&gt;&lt;br /&gt;Dans ce cas, inutile de "voler" la connexion hibernate pour s'en servir à sa place pour se servir des APIS fournies par JAVA, mieux vaut se servir des APIS hibernate.&lt;br /&gt;&lt;br /&gt;Voici un exemple : &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;SQLQuery query = session&lt;br /&gt;    .createSQLQuery(&lt;br /&gt;&amp;quot;SELECT count(*) FROM MATABLE WHERE MACOL1=? AND MACOL2=?&amp;quot;);&lt;br /&gt;query.addScalar(&amp;quot;NOMBRE&amp;quot;, Hibernate.FLOAT);&lt;br /&gt;query.setDate(0, dateFinMois);&lt;br /&gt;query.setInteger(1, commande.getId());&lt;br /&gt;Float consommeEnFinDeMois = (Float) query.list().get(0);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;L'utilisation de la fonction query.setScalar permet de typer la réponse.&lt;br /&gt;query.setInteger(0,x) permet de fournir des paramètres à la requête.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-8604321484387401938?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/8604321484387401938/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=8604321484387401938' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8604321484387401938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/8604321484387401938'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/10/effectuer-une-requte-simple-laide.html' title='Effectuer une requête simple à l&apos;aide d&apos;Hibernate'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4151270714253000343</id><published>2008-09-23T06:35:00.000-07:00</published><updated>2008-10-14T08:41:11.448-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><title type='text'>Changer le nom de machine</title><content type='html'>Dans le fichier /etc/rc.sysinit, positionner la variable HOSTNAME&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4151270714253000343?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4151270714253000343/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4151270714253000343' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4151270714253000343'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4151270714253000343'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/09/changer-le-nom-de-machine.html' title='Changer le nom de machine'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2933228926232406660</id><published>2008-09-09T01:11:00.000-07:00</published><updated>2008-09-09T01:12:43.144-07:00</updated><title type='text'>Problème étrange de tomcat</title><content type='html'>java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener&lt;br /&gt;        at java.lang.ClassLoader.defineClass1(Native Method)&lt;br /&gt;        at java.lang.ClassLoader.defineClass(ClassLoader.java:620)&lt;br /&gt;        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;catalina.sh debug corrige le problème. &lt;br /&gt;&lt;br /&gt;taper run par la suite.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2933228926232406660?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2933228926232406660/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2933228926232406660' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2933228926232406660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2933228926232406660'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/09/problme-trange-de-tomcat.html' title='Problème étrange de tomcat'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6135162047560845541</id><published>2008-09-08T08:50:00.000-07:00</published><updated>2008-09-08T08:52:27.794-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='classloader'/><title type='text'>Tracer les jars depuis lesquels sont chargées les classes</title><content type='html'>-verbose:class&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6135162047560845541?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6135162047560845541/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6135162047560845541' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6135162047560845541'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6135162047560845541'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/09/tracer-les-jars-depuis-lesquels-sont.html' title='Tracer les jars depuis lesquels sont chargées les classes'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4299914558129833377</id><published>2008-08-28T05:19:00.000-07:00</published><updated>2008-09-03T02:19:28.574-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Ganymede et maven</title><content type='html'>Pour utiliser Ganymede et maven, il est nécessaire d'utiliser la version 1.5 ou 2.0 de wtp :&lt;br /&gt;&lt;br /&gt;mvn -Dwtpversion=1.5 eclipse:eclipse&lt;br /&gt;&lt;br /&gt;Ou bien il est possible de le préciser dans le fichier settings.properties&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;profile&amp;gt;&lt;br /&gt;&amp;lt;id&amp;gt;dev&amp;lt;/id&amp;gt;&lt;br /&gt;&amp;lt;properties&amp;gt;&lt;br /&gt;    &amp;lt;wtpversion&amp;gt;2.0&amp;lt;/wtpversion&amp;gt;&lt;br /&gt;&amp;lt;/properties&amp;gt;&lt;br /&gt;&amp;lt;/profile&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4299914558129833377?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4299914558129833377/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4299914558129833377' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4299914558129833377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4299914558129833377'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/08/ganymede-et-maven.html' title='Ganymede et maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-9192311210241841684</id><published>2008-08-25T07:21:00.001-07:00</published><updated>2008-08-25T07:37:13.014-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recommandation'/><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='norme'/><category scheme='http://www.blogger.com/atom/ns#' term='qualité'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Recommandation de codage JAVA</title><content type='html'>&lt;h1&gt;Utilisation des outils&lt;/h1&gt;  &lt;h3&gt;Formatage du code&lt;/h3&gt;  Sous eclipse :&lt;br /&gt;Ctrl+Shift+F :&lt;br /&gt;permet de formatter le code. Cette commande devrait être lancée avant le commit, de sorte à ce que quelqu'un qui passe cette commande soit toujours capable de reconstituer les changements qui se sont produits par l'historique.&lt;br /&gt;Ctrl+Shift+O :&lt;br /&gt;Supprime les imports inutiles&lt;br /&gt;&lt;h3 id="toc2"&gt; &lt;/h3&gt;  &lt;h3 id="toc3"&gt;Checkstyle&lt;/h3&gt; Effectue une vérification du style d'un code. Un plugin checkstyle est utilisable sous eclipse il effectue parfois de bonnes suggestions, mais il est souvent un peu trop sévère. S'en inspirer seulement.&lt;br /&gt;&lt;h3 id="toc4"&gt; &lt;/h3&gt;  &lt;h1 id="toc5"&gt;Programmation&lt;/h1&gt;  &lt;h2 id="toc6"&gt;Codage&lt;/h2&gt;  &lt;h3 id="toc7"&gt;Les noms de classe et d'interface&lt;/h3&gt;   &lt;ul&gt;&lt;li&gt;Un nom de classe doit éclairer sur sa fonction. Les noms comportant Handlers, utils et Manager sont à utiliser avec parcimonie, car il ne sont pas concret. Les éviter dans la mesure du possible, si toutefois le besoin était réel.&lt;ul&gt;&lt;li&gt;Handler est à utilisé pour effectuer des manipulations sur un objets.&lt;/li&gt;&lt;li&gt;Manager : conventionnellement un manager possède le pouvoir de création des objets qu'il manage (A la différence des handlers.)&lt;/li&gt;&lt;li&gt;Util : ne doit pas être utilisé pour désigner quelque chose d'utile (Normallement tout ce qui est programmé est utile), mais il doit désigner quelques chose de factorisable pour un groupe de classes (Le plus souvent ce sera le projet). Ce genre de chose s'applique par exemple au logs, au IO et chaque concept très général de l'informatique.&lt;/li&gt;&lt;li&gt;Helper : même si on le retrouve Helper et Util recouvrent la même utilisation. Il faut choisir l'un ou l'autre.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Les interfaces prennent le nom sans aucun suffixe, ni préfixe&lt;/li&gt;&lt;li&gt;Les implementations se trouvent dans des package différents que les interfaces.&lt;/li&gt;&lt;li&gt;Le rôle fonctionnel est à mettre avant la fonction technique :&lt;br /&gt;&lt;strong&gt;Exemple :&lt;/strong&gt;&lt;br /&gt;AidaService est préferable à ServiceAida&lt;/li&gt;&lt;/ul&gt;  &lt;h3 id="toc8"&gt; &lt;/h3&gt;  &lt;h3 id="toc9"&gt; &lt;/h3&gt;  &lt;h3 id="toc10"&gt;Les méthodes&lt;/h3&gt;  Le nom de la méthode doit donner une idée de ce qu'elle fait.&lt;br /&gt;Elles commencent par un minuscule.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ne pas utiliser les _ pour les noms de méthode&lt;/li&gt;&lt;li&gt;Séparer deux mots en utilisant une majuscule&lt;/li&gt;&lt;li&gt;Une méthode doit effectuer un traitement qui se rapporte à son nom (Ce nom ne doit pas être trop générique s'il n'existe pas d'interface qui impose ce nom)&lt;/li&gt;&lt;li&gt;Elle ne doivent pas être trop longue(moins de 60 lignes)&lt;/li&gt;&lt;/ul&gt;  &lt;h3 id="toc11"&gt;Noms des variables&lt;/h3&gt;   &lt;ul&gt;&lt;li&gt;Ne pas utiliser les _ pour les noms de variables.&lt;/li&gt;&lt;li&gt;La séparation de deux mots se fait à l'aide de majuscules.&lt;/li&gt;&lt;li&gt;Les noms de variables indiquent plutôt le contenu d'une variable plutôt que sa fonction technique.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;strong&gt;Par exemple :&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Si une méthode retourne un dossier, n'est pas un bon nom "result" pour désigner le retour d'une méthode, il vaut mieux utiliser "dossier" comme nom de variable.&lt;/li&gt;&lt;li&gt;list n'est pas parlant pour désigner une liste de dossier, il vaut mieux utiliser le nom "dossiers" Pour les ensemble d'objets de même nature, il suffit de mettre un s au nom de la variable.&lt;/li&gt;&lt;/ol&gt;   &lt;ul&gt;&lt;li&gt;Éviter les abréviations, elle nuisent toujours à la compréhension.&lt;/li&gt;&lt;/ul&gt;  &lt;h3 id="toc12"&gt; &lt;/h3&gt;  &lt;h3 id="toc13"&gt;Documentation du code&lt;/h3&gt; La documentation du code est nécessaire surtout pour les méthodes qui effectuent des traitements qui ne sont pas descriptible par un simple nom de méthode.&lt;br /&gt;&lt;h3 id="toc14"&gt;Traitement conditionnel&lt;/h3&gt;  Pour la clarté, il vaut mieux &lt;u&gt;toujours&lt;/u&gt; mettre des crochets sur les block if et for.&lt;br /&gt;&lt;br /&gt;&lt;h2 id="toc15"&gt;Règles générale de programmation&lt;/h2&gt;  &lt;h3 id="toc16"&gt;Utilisation de l'abstraction&lt;/h3&gt;   &lt;ul&gt;&lt;li&gt;Contrairement à une idée reçue, il est plus simple de factoriser des classes effectuant des traitements similaires que de dé-factoriser des classes n'effectuant pas le même traitement. Concrètement, l'utilisation de abstraction n'est pas a priori meilleur pour la fiabilité d'un programme.&lt;/li&gt;&lt;li&gt;Les interfaces sont à utiliser dans le cas d'objets devant être manipulés sans qu'on en connaisse la nature précise.&lt;/li&gt;&lt;li&gt;Les classes abstraites, bien qu'elles puissent être utilisée dans un rôle d'interface, ne sont pas recommandable dans cette usage. Il faut les utiliser pour diminuer la taille d'une classe.&lt;ul&gt;&lt;li&gt;Elle sont suffixées par Base lorsqu'elle représente une base pour les autre classes.&lt;/li&gt;&lt;li&gt;Elle sont suffixées par Default lorsqu'il s'agit de prototypes, c'est à dire de classe non virtuelles&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Quand on a recours massivement à des copier-coller d'une classe sur l'autre alors une classe abstraite peut être utile&lt;/li&gt;&lt;li&gt;Quand on a recours massivement à des copier-coller dans une même classe, alors il est bon de créer une méthode factorisant ces traitements&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-9192311210241841684?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/9192311210241841684/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=9192311210241841684' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/9192311210241841684'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/9192311210241841684'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/08/recommandation-de-codage-java.html' title='Recommandation de codage JAVA'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4219449738649874755</id><published>2008-08-08T05:00:00.000-07:00</published><updated>2008-08-08T05:08:01.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='debug'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='distant'/><title type='text'>Debugging distant avec tomcat et eclipse</title><content type='html'>Dans setenv.sh rajouter la ligne :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;export JAVA_OPTS=&amp;quot;-Xmx1024M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si vous souhaitez que le serveur ne démarre que s'il est connecté à éclipse. &lt;br /&gt;Tapez :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;export JAVA_OPTS=&amp;quot;-Xmx1024M -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y&amp;quot;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ensuite sur eclipse dans le menu debug&lt;br /&gt;&lt;br /&gt;Choisissez&lt;br /&gt;&lt;br /&gt;- Java Remote Application&lt;br /&gt;&lt;br /&gt;Dans project choisissez le projet que vous voulez mettre en relation avec la tomcat, le source doit être celui qui a permis de générer votre application distante, sans quoi vous aurez des résultat incohérent.&lt;br /&gt;&lt;br /&gt;Placez les breakpoints où vous le souhaitez, le remote debugging vous permettra de voir les variable, de placer  des breakpoint etc. exactement comme dans un debbuging local.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4219449738649874755?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4219449738649874755/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4219449738649874755' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4219449738649874755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4219449738649874755'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/08/debugging-distant-avec-tomcat-et.html' title='Debugging distant avec tomcat et eclipse'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5803752030316891871</id><published>2008-08-05T03:00:00.000-07:00</published><updated>2009-02-26T05:11:07.178-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='crypt'/><category scheme='http://www.blogger.com/atom/ns#' term='rsa'/><category scheme='http://www.blogger.com/atom/ns#' term='securite'/><category scheme='http://www.blogger.com/atom/ns#' term='key'/><category scheme='http://www.blogger.com/atom/ns#' term='des'/><title type='text'>Howto crypt / uncrypt using JAVA and RSA keys</title><content type='html'>&lt;style type="text/css"&gt;  &lt;!--   @page { size: 21cm 29.7cm; margin: 2cm }   P { margin-bottom: 0.21cm }  --&gt;&lt;/style&gt;&lt;span style="font-weight: bold;"&gt;Problématique :  &lt;/span&gt; &lt;p style="margin-bottom: 0cm;"&gt;Dans le cadre d'un bus de données nous souhaitons sécuriser les données en transit. Comme il s'agit d'un bus de transfert asynchrone, lorsque des messages sont stockés sur les files JMS il doivent également être crypté pour n'apparaitre en clair qu'au consommateur. Il n'est pas possible de se servir de SSL puisque le cryptage ne concerne pas que les phase de transport.  &lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Nous allons réaliser le cryptage au niveau des producteurs et consommateurs du bus en nous servant des fonctionnalités venant avec le JDK 5,0.  &lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;La principale limitation dans le cryptage JAVA vient de la profusion des différents formats. Pour ce faire nous allons nous servir d'un cryptage à partir de clé publique/clé privée.  &lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;La génération des fichiers clé privée et clé publique se fait à l'aide de openssh.  &lt;/p&gt;  &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;openssl genrsa -aes256 -out /public/cleprivee.pem 2048&lt;br /&gt;openssl rsa -in /public/private.pem -pubout -outform DER -out clepublique.der&lt;br /&gt;openssl pkcs8 -topk8 -inform PEM -in /public/cleprivee.pem -outform DER -nocrypt -out /public/cleprivee.pk8&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;p style="margin-bottom: 0cm;"&gt;Le format PK8 est le seul disponible nativement en JAVA, il sert pour la lecture des clés privées&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Le format DER est supporté pour les clé publique en JAVA, il sert pour la lecture des clés publique.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Le code suivant crypte et décrypte un message « Mon Cul C'est du poulet » à partir d'une clé publique et privée lue sur dans des fichiers :&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;// Lecture du fichier de cl&amp;#233; publique&lt;br /&gt;File keyFile = new File(&amp;quot;clepublique.der&amp;quot;);&lt;br /&gt;byte[] encodedKey = new byte[(int) keyFile.length()];&lt;br /&gt;new FileInputStream(keyFile).read(encodedKey);&lt;br /&gt;X509EncodedKeySpec publicKeySpec = new X509EncodedKeySpec(encodedKey);&lt;br /&gt;KeyFactory kf = KeyFactory.getInstance(&amp;quot;RSA&amp;quot;);&lt;br /&gt;PublicKey pk = kf.generatePublic(publicKeySpec);&lt;br /&gt;&lt;br /&gt;// Encryptage &amp;#224; l'aide de la cl&amp;#233; publique&lt;br /&gt;Cipher cipher = Cipher.getInstance(&amp;quot;RSA/ECB/PKCS1Padding&amp;quot;);&lt;br /&gt;cipher.init(Cipher.ENCRYPT_MODE, pk);&lt;br /&gt;byte[] cypherText = cipher.doFinal(&amp;quot;Mon Cul C'est du poulet&amp;quot;&lt;br /&gt;                .getBytes(&amp;quot;UTF8&amp;quot;));&lt;br /&gt;&lt;br /&gt;// Affichage du r&amp;#233;sultat du cryptage&lt;br /&gt;System.out.println(&amp;quot;----- Bytes crypt&amp;#233;s --------&amp;quot;);&lt;br /&gt;System.out.write(cypherText);&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&amp;quot;----------------------------&amp;quot;);&lt;br /&gt;&lt;br /&gt;// Lecture de la cl&amp;#233; priv&amp;#233;e&lt;br /&gt;keyFile = new File(&amp;quot;cleprivee.pk8&amp;quot;);&lt;br /&gt;encodedKey = new byte[(int) keyFile.length()];&lt;br /&gt;new FileInputStream(keyFile).read(encodedKey);&lt;br /&gt;PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedKey);&lt;br /&gt;PrivateKey privateKey = (RSAPrivateKey) kf&lt;br /&gt;            .generatePrivate(privateKeySpec);&lt;br /&gt;cipher.init(Cipher.DECRYPT_MODE, privateKey);&lt;br /&gt;&lt;br /&gt;// Affichage du r&amp;#233;sultat d&amp;#233;crypt&amp;#233;&lt;br /&gt;System.out.println(&amp;quot;----- Bytes d&amp;#233;crypt&amp;#233;s ------&amp;quot;);&lt;br /&gt;byte[] clearText = cipher.doFinal(cypherText);&lt;br /&gt;System.out.write(clearText);&lt;br /&gt;System.out.println();&lt;br /&gt;System.out.println(&amp;quot;----------------------------&amp;quot;);&lt;br /&gt;    &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ce code ne fonctionne pas quand les données sont trop longue car elle dépasse la taille de la clé. Dans ce cas pour des raison de performances, il vaut mieux utiliser des cryptage symétrique à l'aide de mot de passe. Le code qui suit en donne un illustration. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;/** Le chiffreur */&lt;br /&gt;Cipher cipher;&lt;br /&gt;&lt;br /&gt;/** La cle de cryptage */&lt;br /&gt;SecretKey secretKey;&lt;br /&gt;&lt;br /&gt;public void init(String password) throws Exception {&lt;br /&gt;            cipher = Cipher.getInstance(&amp;quot;DES&amp;quot;);&lt;br /&gt;            keyFactory = SecretKeyFactory.getInstance(&amp;quot;DES&amp;quot;);&lt;br /&gt;            DESKeySpec privateKeySpec = new DESKeySpec(password.getBytes());&lt;br /&gt;            secretKey = keyFactory.generateSecret(privateKeySpec);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Crypte les donn&amp;#233;es &lt;br /&gt; * &lt;br /&gt; * @return&lt;br /&gt; * @throws Exception&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;public byte[] encrypt(byte[] aCrypter) throws Exception {&lt;br /&gt;        ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt;        ByteArrayInputStream bais = new ByteArrayInputStream(aCrypter);&lt;br /&gt;        cipher.init(Cipher.ENCRYPT_MODE, secretKey);&lt;br /&gt;        CipherOutputStream cis = new CipherOutputStream(baos, cipher);&lt;br /&gt;        byte[] buffer = new byte[1024];&lt;br /&gt;        int read;&lt;br /&gt;        while ((read = bais.read(buffer)) != -1) {&lt;br /&gt;            byte[] buffer2 = cipher.update(buffer, 0, read);&lt;br /&gt;            baos.write(buffer2);&lt;br /&gt;        }&lt;br /&gt;        baos.write(cipher.doFinal());&lt;br /&gt;        buffer = baos.toByteArray();&lt;br /&gt;        return buffer;&lt;br /&gt;}&lt;br /&gt;/**&lt;br /&gt; * D&amp;#233;crypte les donn&amp;#233;es&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;public byte[] decrypt(byte[] aDecripter) throws Exception {&lt;br /&gt;        ByteArrayOutputStream baos = new ByteArrayOutputStream();&lt;br /&gt;        ByteArrayInputStream bais = new ByteArrayInputStream(aDecripter);&lt;br /&gt;        cipher.init(Cipher.DECRYPT_MODE, secretKey);&lt;br /&gt;&lt;br /&gt;        byte[] buffer = new byte[1024];&lt;br /&gt;        int read;&lt;br /&gt;        while ((read = bais.read(buffer)) != -1) {&lt;br /&gt;            byte[] buffer2 = cipher.update(buffer, 0, read);&lt;br /&gt;            baos.write(buffer2);&lt;br /&gt;        }&lt;br /&gt;        baos.write(cipher.doFinal());&lt;br /&gt;        buffer = baos.toByteArray();&lt;br /&gt;        return buffer;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5803752030316891871?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5803752030316891871/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5803752030316891871' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5803752030316891871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5803752030316891871'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/08/howto-crypt-uncrypt-using-java.html' title='Howto crypt / uncrypt using JAVA and RSA keys'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4807862058085336716</id><published>2008-06-30T02:43:00.000-07:00</published><updated>2008-07-01T02:38:41.715-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='emf'/><title type='text'>Projets EMF</title><content type='html'>EMF est un métamodèle qui permet de décrire ses données à travers des éditeur. &lt;br /&gt;Associé à open Architecture, il permettra de faire de la génération de code et sera utile pour générer massivement des services ou des bean (Par exemple si l'on souhaite rendre accessible une référentiel depuis l'extérieur).&lt;br /&gt;&lt;br /&gt;Cette solution souffre principalement d'une complexité importante. Une vingtaine de jours environ et nécessaire pour se familiariser avec le produit. &lt;br /&gt;En dépit de cet incontestable défaut EMC c'est une solution de métamodèle qui pourra remplacer avantageusement les outils traditionnel de modélisation dans les entreprise où Eclipse est au centre des développements. Il peu même se substituer à Power AMC ou Pational Rose dans les cas où le développements sont fortement couplés avec la modélisation. &lt;br /&gt;&lt;br /&gt;Le premier pas pour se familiariser avec EMF est de suivre le tutorial.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4807862058085336716?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4807862058085336716/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4807862058085336716' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4807862058085336716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4807862058085336716'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/emf-driven-projects.html' title='Projets EMF'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-276448101447167153</id><published>2008-06-27T08:17:00.000-07:00</published><updated>2008-08-05T00:25:04.410-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><category scheme='http://www.blogger.com/atom/ns#' term='axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='securite'/><category scheme='http://www.blogger.com/atom/ns#' term='certificat'/><title type='text'>Sécuriser un service Axis2 avec des certificats</title><content type='html'>Pour sécuriser un service par une authentification basé sur certificat. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Il faut d'abord créer les magasin de clés pour le serveur et le client. Ces clés serviront pour authentifier les partis.&lt;br /&gt;&lt;br /&gt;Ensuite, le serveur fournit un certificat pour le client, il faut considérer ce certificat comme une autorisation de se connecter au serveur (C'est pour cette raison qu'elle doit provenir du serveur). Ensuite, le client l'importe dans son magasin. Ces commandes se passent à laide de keytool. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;keytool -genkey -alias serverkey -keystore keystoreserver.jks&lt;br /&gt;keytool -genkey -alias clientkey -keystore keystoreclient.jks&lt;br /&gt;keytool -selfcert -alias serverkey -keystore keystoreserver.jks&lt;br /&gt;keytool -export -alias serverkey -keystore keystoreserver.jks&amp;gt;moncertif&lt;br /&gt;keytool -printcert -file moncertif&lt;br /&gt;keytool -import -keystore keystoreclient.jks  -file moncertif&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il ne reste plus qu'à configurer axis2. Copier d'abord, le magasin de clé (keystore du serveur dans le répertoire classes/ de Axis2). Puis, dans le fichier conf/axis2.xml. Modifier les receiver et sender. Dans notre configuration le truststore est confondu avec le keystore. Si le besoin existait de les séparer le truststore doit contenir le certificat importé et le keystore, la clé de signature du serveur. &lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;  &amp;lt;transportReceiver name=&amp;quot;https&amp;quot; class=&amp;quot;org.apache.axis2.transport.nhttp.HttpCoreNIOSSLListener&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;port&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;9002&amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;non-blocking&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;true&amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;keystore&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;KeyStore&amp;gt;&lt;br /&gt;                &amp;lt;Location&amp;gt;keystoreserver.jks&amp;lt;/Location&amp;gt;&lt;br /&gt;                &amp;lt;Type&amp;gt;JKS&amp;lt;/Type&amp;gt;&lt;br /&gt;                &amp;lt;Password&amp;gt;axis2rules&amp;lt;/Password&amp;gt;&lt;br /&gt;                &amp;lt;KeyPassword&amp;gt;axis2rules&amp;lt;/KeyPassword&amp;gt;&lt;br /&gt;            &amp;lt;/KeyStore&amp;gt;&lt;br /&gt;        &amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;!--parameter name=&amp;quot;truststore&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;TrustStore&amp;gt;&lt;br /&gt;                &amp;lt;Location&amp;gt;keystoreserver.jks&amp;lt;/Location&amp;gt;&lt;br /&gt;                &amp;lt;Type&amp;gt;JKS&amp;lt;/Type&amp;gt;&lt;br /&gt;                &amp;lt;Password&amp;gt;axis2rules&amp;lt;/Password&amp;gt;&lt;br /&gt;            &amp;lt;/TrustStore&amp;gt;&lt;br /&gt;        &amp;lt;/parameter--&amp;gt;&lt;br /&gt;        &amp;lt;!--&amp;lt;parameter name=&amp;quot;SSLVerifyClient&amp;quot;&amp;gt;require&amp;lt;/parameter&amp;gt;&lt;br /&gt;            supports optional&amp;#124;require or defaults to none --&amp;gt;&lt;br /&gt;    &amp;lt;/transportReceiver&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;transportSender name=&amp;quot;https&amp;quot; class=&amp;quot;org.apache.axis2.transport.nhttp.HttpCoreNIOSSLSender&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;non-blocking&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;true&amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;keystore&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;KeyStore&amp;gt;&lt;br /&gt;                &amp;lt;Location&amp;gt;keystoreserver.jks&amp;lt;/Location&amp;gt;&lt;br /&gt;                &amp;lt;Type&amp;gt;JKS&amp;lt;/Type&amp;gt;&lt;br /&gt;                &amp;lt;Password&amp;gt;axis2rules&amp;lt;/Password&amp;gt;&lt;br /&gt;                &amp;lt;KeyPassword&amp;gt;axis2rules&amp;lt;/KeyPassword&amp;gt;&lt;br /&gt;            &amp;lt;/KeyStore&amp;gt;&lt;br /&gt;        &amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;parameter name=&amp;quot;truststore&amp;quot; locked=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;            &amp;lt;TrustStore&amp;gt;&lt;br /&gt;                &amp;lt;Location&amp;gt;keystoreserver.jks&amp;lt;/Location&amp;gt;&lt;br /&gt;                &amp;lt;Type&amp;gt;JKS&amp;lt;/Type&amp;gt;&lt;br /&gt;                &amp;lt;Password&amp;gt;axis2rules&amp;lt;/Password&amp;gt;&lt;br /&gt;            &amp;lt;/TrustStore&amp;gt;&lt;br /&gt;        &amp;lt;/parameter&amp;gt;&lt;br /&gt;        &amp;lt;!--&amp;lt;parameter name=&amp;quot;HostnameVerifier&amp;quot;&amp;gt;DefaultAndLocalhost&amp;lt;/parameter&amp;gt;&lt;br /&gt;            supports Strict&amp;#124;AllowAll&amp;#124;DefaultAndLocalhost or the default if none specified --&amp;gt;&lt;br /&gt;    &amp;lt;/transportSender&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Enfin, il faut en fait rajouter deux lignes dans le code client :&lt;br /&gt;&lt;br /&gt;System.setProperty("javax.net.ssl.trustStore", "chemin au clientTruststore");&lt;br /&gt;System.setProperty("javax.net.ssl.trustStorePassword", "mot de passe du clientTruststore");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-276448101447167153?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/276448101447167153/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=276448101447167153' title='4 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/276448101447167153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/276448101447167153'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/scuriser-un-service-axis2.html' title='Sécuriser un service Axis2 avec des certificats'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2672606821762473437</id><published>2008-06-27T01:55:00.000-07:00</published><updated>2008-06-27T02:13:21.235-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='axis'/><title type='text'>Pourquoi utiliser Spring dans un Web Service ?</title><content type='html'>Spring est un framework d'injection, et pour comprendre son intérêt il faut comprendre ce mécanisme et son intérêt. &lt;br /&gt;&lt;br /&gt;L'injection est l'affectation d'une propriété par une sorte de container light(C'est le rôle de Spring). Dans le cadre d'une application simple (C'est à dire standalone) l'injection s'identifie simplement à une forme d'utilisation de pattern singleton. &lt;br /&gt;&lt;br /&gt;On se sert de l'injection pour principalement deux cas de figure : &lt;br /&gt;&lt;br /&gt;- Configurer et dimensionner par un bean de Configuration.  &lt;br /&gt;- Contrôler strictement ses instanciations pour pouvoir dimensionner précisément (Utiliser une seule instance DAO pour l'ensemble de ses instance de service par exemple). &lt;br /&gt;&lt;br /&gt;Dans le cadre général des serveurs d'application, la notion d'injection est plus complexe. Il faut avant tout de comprendre qu'elle est liée au classloader et qu'il se pose des problème de scope. Ainsi, ce n'est pas parce qu'on injecte une propriété dans l'application, que cette propriété est injectée dans l'ensemble des instances de services. &lt;br /&gt;&lt;br /&gt;Dans le cas des Web-Service, l'utilisation de Spring n'est donc pas triviale. Pour faire court, sil vous utiliser Axis et que vous souhaiter utiliser Spring dans axis, c'est un peu comme de vouloir utiliser deux moteur de Web-Service en un. &lt;br /&gt;&lt;br /&gt;Même si cela reste possible, dans la majeur partie des cas il vaut mieux : soit se servir de httpinvoker (inclus dans spring). &lt;br /&gt;Ou bien, si la fonction de container de Web-Service est fondamentale, ne se servir que du conteneur et ne pas utiliser Spring, cela est vrai pour : Axis, Axis2 etc.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2672606821762473437?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2672606821762473437/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2672606821762473437' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2672606821762473437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2672606821762473437'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/pourquoi-utiliser-spring-dans-un-web.html' title='Pourquoi utiliser Spring dans un Web Service ?'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3508634132165928700</id><published>2008-06-27T01:45:00.000-07:00</published><updated>2008-06-27T01:51:59.137-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><title type='text'>Aqcuitement JMS</title><content type='html'>&lt;b&gt;Comment fonctionne l'acquittement d'un message jms&lt;/b&gt;&lt;br /&gt; &lt;br /&gt;La méthode acknowledge permet d'acquitter un message JMS. Dans le mode CLIENT_ACKNOWLEDGE, c'est le client qui décide de l'acquittement. &lt;br /&gt;&lt;br /&gt;Lorsque le message est lu il disparait de la file dès le début de la lecture. Mais s'il n'est pas acquitté par le consumer, il reviendra dans la file une fois la lecture terminée.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3508634132165928700?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3508634132165928700/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3508634132165928700' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3508634132165928700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3508634132165928700'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/aqcuitement-jms.html' title='Aqcuitement JMS'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7013244127144768839</id><published>2008-06-24T07:46:00.000-07:00</published><updated>2008-06-24T07:47:58.073-07:00</updated><title type='text'>Démarrer JBoss pour être accessible partout</title><content type='html'>Dans le fichier run.bat ajouter -b0.0.0.0 le Serveur JBoss devient accessible sur tout le réseau.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7013244127144768839?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7013244127144768839/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7013244127144768839' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7013244127144768839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7013244127144768839'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/dmarrer-jboss-pour-tre-accessible.html' title='Démarrer JBoss pour être accessible partout'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6855903449642047351</id><published>2008-06-24T05:56:00.000-07:00</published><updated>2010-01-29T07:05:30.321-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='surefire'/><title type='text'>Problème de mémoire avec maven</title><content type='html'>&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;%MAVEN_JAVA_EXE% %MAVEN_OPTS%  -Xmx1024m -classpath&lt;br /&gt; %CLASSWORLDS_JAR% &amp;quot;-Dclassworlds.conf=%M2_HOME%\bin\m2.conf&amp;quot; &lt;br /&gt;&amp;quot;-Dmaven.home=%M2_HOME%&amp;quot; org.codehaus.classworlds.Launcher &lt;br /&gt;%MAVEN_CMD_LINE_ARGS%&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;The system is out of resources.&lt;br /&gt;Consult the following stack trace for details.&lt;br /&gt;java.lang.OutOfMemoryError: Java heap space&lt;br /&gt;        at com.sun.tools.javac.code.Scope$ImportScope.makeEntry(Scope.java:385)&lt;br /&gt;        at com.sun.tools.javac.code.Scope.enter(Scope.java:196)&lt;br /&gt;        at com.sun.tools.javac.code.Scope.enter(Scope.java:183)&lt;br /&gt;        at com.sun.tools.javac.comp.MemberEnter.importAll(MemberEnter.java:132)&lt;br /&gt;        at com.sun.tools.javac.comp.MemberEnter.visitTopLevel(MemberEnter.java:509)&lt;br /&gt;        at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:446)&lt;br /&gt;        at com.sun.tools.javac.comp.MemberEnter.memberEnter(MemberEnter.java:387)&lt;br /&gt;        at com.sun.tools.javac.comp.MemberEnter.complete(MemberEnter.java:819)&lt;br /&gt;        at com.sun.tools.javac.code.Symbol.complete(Symbol.java:386)&lt;br /&gt;        at com.sun.tools.javac.code.Symbol$ClassSymbol.complete(Symbol.java:758)&lt;br /&gt;        at com.sun.tools.javac.comp.Enter.complete(Enter.java:451)&lt;br /&gt;        at com.sun.tools.javac.comp.Enter.main(Enter.java:429)&lt;br /&gt;        at com.sun.tools.javac.main.JavaCompiler.enterTrees(JavaCompiler.java:819)&lt;br /&gt;        at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:727)&lt;br /&gt;        at com.sun.tools.javac.main.Main.compile(Main.java:353)&lt;br /&gt;        at com.sun.tools.javac.main.Main.compile(Main.java:279)&lt;br /&gt;        at com.sun.tools.javac.main.Main.compile(Main.java:270)&lt;br /&gt;        at com.sun.tools.javac.Main.compile(Main.java:87)&lt;br /&gt;        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;br /&gt;        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)&lt;br /&gt;        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)&lt;br /&gt;        at java.lang.reflect.Method.invoke(Method.java:597)&lt;br /&gt;        at org.codehaus.plexus.compiler.javac.JavacCompiler.compileInProcess(JavacCompiler.java:420)&lt;br /&gt;        at org.codehaus.plexus.compiler.javac.JavacCompiler.compile(JavacCompiler.java:141)&lt;br /&gt;        at org.apache.maven.plugin.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:493)&lt;br /&gt;        at org.apache.maven.plugin.CompilerMojo.execute(CompilerMojo.java:114)&lt;br /&gt;        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:447)&lt;br /&gt;        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:539)&lt;br /&gt;        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:480)&lt;br /&gt;        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:459)&lt;br /&gt;        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:311)&lt;br /&gt;        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:278)&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Les tests unitaires lancés avec maven provoquent des erreurs de mémoire, il est possible de changer le fork afin d'instancier une JVM par test. Par défaut le fork utilisé est once (un seul fork)&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;project&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;build&amp;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-surefire-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;        &amp;lt;configuration&amp;gt;&lt;br /&gt;          &amp;lt;forkMode&amp;gt;pertest&amp;lt;/forkMode&amp;gt;&lt;br /&gt;          &amp;lt;argLine&amp;gt;-enableassertions&amp;lt;/argLine&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;  &amp;lt;/build&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;&amp;lt;/project&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6855903449642047351?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6855903449642047351/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6855903449642047351' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6855903449642047351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6855903449642047351'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/problme-de-mmoire-avec-le-compiler.html' title='Problème de mémoire avec maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4561890524128651326</id><published>2008-06-17T08:34:00.000-07:00</published><updated>2008-06-23T06:51:44.853-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='axis2'/><category scheme='http://www.blogger.com/atom/ns#' term='web-service'/><title type='text'>Débuter avec axis2</title><content type='html'>&lt;b&gt;Installer Axis2 sous Linux&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Télécharger Axis2&lt;br /&gt;&lt;li&gt;Extraire le jar dans /usr/axis2-1.4&lt;br /&gt;&lt;li&gt;Effectuer des liens ln -s /usr/axis2-1.4/bin/wsdl2java.sh /usr/bin/wsdl2java.sh&lt;br /&gt;&lt;li&gt;Effectuer des liens ln -s /usr/axis2-1.4/bin/axis2.sh /usr/bin/axis2.sh&lt;br /&gt;&lt;li&gt;Modifier la première ligne dir=/usr/axis2-1.4/bin/ avec le chemin d'installation réel dans /usr/axis2-1.4/bin/axis2.sh et /usr/axis2-1.4/bin/wsdl2java.sh&lt;br /&gt;&lt;li&gt;Télécharger ANT&lt;br /&gt;&lt;li&gt;Extraire le jar dans /usr/apache-ant-xxx&lt;br /&gt;&lt;li&gt;Effectuer des liens ln -s /usr/apache-ant-xxx/bin/ant /usr/bin/&lt;br /&gt;&lt;li&gt;Exporter la variable  export AXIS2_HOME=/usr/axis2-1.4&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Supprimer le SOAP12 sur axis2&lt;/b&gt;&lt;br /&gt;Modifier le fichier axis2.xml&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;   &amp;lt;parameter name=&amp;quot;disableSOAP12&amp;quot; locked=&amp;quot;true&amp;quot;&amp;gt;true&amp;lt;/parameter&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Utiliser avec Hibernate 3.6.2&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Il faut utiliser antlr-1.7.7 et faire ettention au classpath d'une manière générale. &lt;br /&gt;(Le classloader de l'application axis ne permet pas de redescendre plus bas au scope service s'il utilise le scope application.)&lt;br /&gt;Concrètement cela signifie qu'il est impossible de mettre le fichier hibernate dans les librairies de AXIS. &lt;br /&gt;&lt;b&gt;Effectuer une première génération&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Créer un répertoire pour votre projet&lt;br /&gt;&lt;li&gt;wsdl2java.sh -uri http://urlduwebservice.com/monservice&lt;br /&gt;&lt;li&gt;Taper ant&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Structure d'une archive AXIS2&lt;/b&gt;&lt;br /&gt;On peut déployer un service axis sous forme d'un fichier aar. &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;META-INF/services.xml&lt;br /&gt;lib/*.jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Il est également possible de le déployer sous forme d'un répertore ayant la même structure. &lt;br /&gt;&lt;br /&gt;Note pour se servir du mapping adb à partir de POJO.&lt;br /&gt;&lt;br /&gt;Si le bean retourné contient une liste d'élément, il n'est pas possible de se servir des typecast de liste, il faut se servir de tableau. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Génerer un Web Service à partir d'un WSDL et de Maven&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Ajouter le bloc &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;build&amp;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.axis2.maven2&amp;lt;/groupId&amp;gt;&lt;br /&gt;    &amp;lt;artifactId&amp;gt;axis2-wsdl2code-maven-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;    &amp;lt;executions&amp;gt;&lt;br /&gt;     &amp;lt;execution&amp;gt;&lt;br /&gt;      &amp;lt;goals&amp;gt;&lt;br /&gt;       &amp;lt;goal&amp;gt;wsdl2code&amp;lt;/goal&amp;gt;&lt;br /&gt;      &amp;lt;/goals&amp;gt;&lt;br /&gt;      &amp;lt;configuration&amp;gt;&lt;br /&gt;       &amp;lt;package&amp;gt;com.foo.myservice&amp;lt;/package&amp;gt;&lt;br /&gt;      &amp;lt;/configuration&amp;gt;&lt;br /&gt;     &amp;lt;/execution&amp;gt;&lt;br /&gt;    &amp;lt;/executions&amp;gt;&lt;br /&gt;   &amp;lt;/plugin&amp;gt;&lt;br /&gt;  &amp;lt;/plugins&amp;gt;&lt;br /&gt; &amp;lt;/build&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;mvn -U axis2-wsdl2code:wsdl2code -DwsdlFile=http://10.202.48.12:8080/axis2/services/OrganisationControleService?wsdl -Daxis2.wsdl2code.package=joe.bigood&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Il faut rajouter manuellement et en local la dépendance au plugin. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;wsdl4j&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;wsdl4j&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;version&amp;gt;1.6.2&amp;lt;/version&amp;gt;&lt;br /&gt;&amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4561890524128651326?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4561890524128651326/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4561890524128651326' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4561890524128651326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4561890524128651326'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/structure-dune-archive-axis2.html' title='Débuter avec axis2'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3724566493243108431</id><published>2008-06-15T02:40:00.000-07:00</published><updated>2009-07-28T06:35:46.484-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='namespace'/><category scheme='http://www.blogger.com/atom/ns#' term='xpath'/><category scheme='http://www.blogger.com/atom/ns#' term='requete'/><title type='text'>Utiliser xpath</title><content type='html'>Dans cet article, je présente une petite collection de requête exemple de xpath. En la matière, l'empirisme est roi !&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Comment retrouver tous les élément img dans un document html (Quelque soit leur hiérarchie)&lt;/i&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;XPath xpath = XPathFactory.newInstance().newXPath();&lt;br /&gt;InputSource is = new InputSource(new FileInputStream(&lt;br /&gt;      &amp;quot;src/test/resources/testXpath.xml&amp;quot;));&lt;br /&gt;NodeList str =(NodeList) xpath.evaluate(&amp;quot;//img&amp;quot;,&lt;br /&gt; is,XPathConstants.NODESET);&lt;br /&gt;log.debug(str.getLength());&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Comment effectuer une transformation à l'aide de XPATH (Sans utiliser XQuery)&lt;/i&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;XPath xpath = XPathFactory.newInstance().newXPath();&lt;br /&gt;DocumentBuilder db = DocumentBuilderFactory.newInstance()&lt;br /&gt;    .newDocumentBuilder();&lt;br /&gt;Document document = db.parse(new File(&lt;br /&gt;    &amp;quot;src/test/resources/testXpath.xml&amp;quot;));&lt;br /&gt;InputSource is = new InputSource(new FileInputStream(&lt;br /&gt;    &amp;quot;src/test/resources/testXpath.xml&amp;quot;));&lt;br /&gt;NodeList str = (NodeList) xpath.evaluate(&amp;quot;//img&amp;quot;, document,&lt;br /&gt;XPathConstants.NODESET);&lt;br /&gt;Element el = (Element) str.item(0);&lt;br /&gt;el.setAttribute(&amp;quot;src&amp;quot;, &amp;quot;newValue&amp;quot;);&lt;br /&gt;Transformer transformer = TransformerFactory.newInstance()&lt;br /&gt;    .newTransformer();&lt;br /&gt;Source source = new DOMSource(document);&lt;br /&gt;StreamResult sr = new StreamResult(System.out);&lt;br /&gt; transformer.transform(source, sr);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Attention à la manipulation des namespaces dans XPATH ! &lt;br /&gt;&lt;br /&gt;Quand les requêtes xpath utilisent des namespaces, deux options sont possible :&lt;br /&gt;&lt;br /&gt;La première est d'utiliser les noms absolus et non pas les alias pour effectuer la recherche : &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;//urn:oasis:names:tc:opendocument:xmlns:text:1.0:span&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Malheureusement, cette méthode ne fonctionne lorsque les namespaces comportent le caractère '/' (qui sont descaractère utilisé pour écrire les requête Xpath). Dans ce cas, une deuxième méthode consiste à fournir à Xpath les alias des namspaces que nous utiliserons dans la requête.  Cette approche est préférable, car les namespaces qui ne comportent pas de '/' sont plutôt rares.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;NamespaceContext ctx = new NamespaceContext() {&lt;br /&gt;public String getNamespaceURI(String prefix) {&lt;br /&gt;String uri;&lt;br /&gt;if (prefix.equals("w")) {&lt;br /&gt;uri = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";&lt;br /&gt;}&lt;br /&gt;else if (prefix.equals("ns2")) {&lt;br /&gt;uri = "http://www.davber.com/sales-format";&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;uri = null;&lt;br /&gt;}&lt;br /&gt;return uri;&lt;br /&gt;}&lt;br /&gt;public String getPrefix(String namespaceURI) {&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;public Iterator getPrefixes(String namespaceURI) {&lt;br /&gt;return null;&lt;br /&gt;}&lt;br /&gt;};&lt;br /&gt;xpath.setNamespaceContext(ctx);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il faut également rappeler que les namespaces sont héritables par les balise fille lorsque le namespace est déclaré par un attribut xmlns. Concrétement, dans l'exemple suivant, la balise Relationship est à rechercher dans le namespace : http://schemas.openxmlformats.org/package/2006/relationships car la balise parente Relationships est affectée à ce namespace par l'attribut xmlns.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; standalone=&amp;quot;yes&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;Relationships xmlns=&amp;quot;http://schemas.openxmlformats.org/package/2006/relationships&amp;quot;&amp;gt;&amp;lt;Relationship Id=&amp;quot;rId8&amp;quot; Type=&amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/footer&amp;quot; Target=&amp;quot;footer1.xml&amp;quot;/&amp;gt;&amp;lt;Relationship Id=&amp;quot;rId3&amp;quot; Type=&amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings&amp;quot; Target=&amp;quot;settings.xml&amp;quot;/&amp;gt;&amp;lt;Relationship Id=&amp;quot;rId7&amp;quot; Type=&amp;quot;http://schemas.openxmlformats.org/officeDocument/2006/relationships/header&amp;quot; Target=&amp;quot;header1.xml&amp;quot;/&amp;gt;&amp;lt;Relationship Id=&amp;quot;rId2&amp;quot; &lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dans le cas ou le JDK a une version inférieure à la 1.5, JDOM fournira l'api XPath. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;SAXBuilder sxb = new SAXBuilder();&lt;br /&gt;File file = new File(filename);&lt;br /&gt;FileInputStream fis = new FileInputStream(file);&lt;br /&gt;InputSource is = new InputSource(fis);&lt;br /&gt;is.setEncoding("ISO-8859-1");&lt;br /&gt;org.jdom.Document document = sxb.build(is);&lt;br /&gt;// On initialise un nouvel élément racine avec l'élément racine du&lt;br /&gt;// document.&lt;br /&gt;Element racine = document.getRootElement();&lt;br /&gt;XPath xpath = XPath.newInstance("count(/document/firstBranch/order/orderStatus/OrderStatusCode[text()='MARECHERCHE'])");&lt;br /&gt;String result = xpath.valueOf(racine);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Exemple de requête&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Pour compter le nombre de balise ayant l'arborescence /document/firstBranch/order/orderStatus/OrderStatusCode et contenant le texte 'MARECHERCHE'&lt;/i&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;/document/firstBranch/order/orderStatus/OrderStatusCode[text()='MARECHERCHE'])&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Pour récuppérer toutes les balises img sous forme de nodeset&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;xpath.evaluate(&amp;quot;//img&amp;quot;, document,&lt;br /&gt;XPathConstants.NODESET);&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3724566493243108431?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3724566493243108431/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3724566493243108431' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3724566493243108431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3724566493243108431'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/06/utiliser-xpath.html' title='Utiliser xpath'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-9044927229627193611</id><published>2008-04-09T02:15:00.000-07:00</published><updated>2008-04-09T02:20:34.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bean'/><category scheme='http://www.blogger.com/atom/ns#' term='clone'/><title type='text'>Cloner des beans JAVA</title><content type='html'>La methode BeanUtils.cloneBean(Object obj1,Object obj2) permet de répliquer des beans en faisant une introspection sur les méthodes get et set du bean, ceci peut se faire sans utiliser l'interface clonable. &lt;br /&gt;&lt;br /&gt;La librairie permettant de faire ceci se télécharge sur  http://commons.apache.org/beanutils&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;    &amp;lt;dependency&amp;gt;&lt;br /&gt;            &amp;lt;groupId&amp;gt;commons-beanutils&amp;lt;/groupId&amp;gt;&lt;br /&gt;            &amp;lt;artifactId&amp;gt;commons-beanutilsartifactId&amp;gt;&lt;br /&gt;            &amp;lt;version&amp;gt;1.8&amp;lt;/version&amp;gt;&lt;br /&gt;        &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-9044927229627193611?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/9044927229627193611/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=9044927229627193611' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/9044927229627193611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/9044927229627193611'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/04/cloner-des-beans-java.html' title='Cloner des beans JAVA'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4628541464947055602</id><published>2008-04-08T02:17:00.000-07:00</published><updated>2008-04-08T02:37:35.987-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='synchronisation'/><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><title type='text'>Problème de synchronisation avec hibernate</title><content type='html'>Lors de l'appel de saveOrUpdate() or update() j'ai une NonUniqueObjectException.&lt;br /&gt;&lt;br /&gt;La session utilise un cache entre la persistance et l'objet instance, ce cache est unique (Il se manifeste par les proxy cglig). L'appel de saveOrUpdate determine premièrement si cet objet existe en base, si oui, il construit son proxy CGLIB, ainsi hibernate sait si cet objet existe ou non en base de données. La comparaison de l'objet proxié et de l'objet que nous tentons d'insérer (Non proxié) provoque une incohérence et retourne l'erreur ci dessus. &lt;br /&gt;&lt;br /&gt;L'utilisation de la fonction saveOrUpdate() ne sert pas comme on le croit d'abord, à permettre de procéder à des insert ou des update en aveugle. &lt;br /&gt;&lt;br /&gt;La solution de ce problème est soit de connaitre l'état de l'objet avant de faire l'insertion en base. (Ce qui diminue notablement le charme de la fonction saveOrUpdate) soit d'utiliser la fonction merge, qui permet de cloné un objet sur son proxy.&lt;br /&gt;&lt;br /&gt;marge prend en argument un objet non proxié et retourne un objet proxié clone exact de l'objet passé en argument.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4628541464947055602?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4628541464947055602/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4628541464947055602' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4628541464947055602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4628541464947055602'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/04/problme-de-synchronisation-avec.html' title='Problème de synchronisation avec hibernate'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3024640563730832570</id><published>2008-04-02T02:54:00.000-07:00</published><updated>2008-04-02T03:00:00.375-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joram'/><category scheme='http://www.blogger.com/atom/ns#' term='jonas'/><category scheme='http://www.blogger.com/atom/ns#' term='queue'/><title type='text'>Créer dynamiquement des QUEUE</title><content type='html'>Dans le cadre de la création d'un bus de routage je souhaitais pouvoir créer dynamiquement des queues à l'aide de la méthode createQueue(String queuename).&lt;br /&gt;&lt;br /&gt;if (queue == null) { &lt;br /&gt;log.info("Création de la queue " +&lt;br /&gt; queueName); queue = session.createQueue(queueName); &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Cela n'a pas fonctionné car JORAM n'implémente pas cette fonction. Après quelques recherche sur internet, cette fonction devrait être utilisée de manière marginale et pas dans le cadre d'un bus et n'est pas recommandable&lt;br /&gt;&lt;br /&gt;12:35:29,484 ERROR BusServiceMdb:96 - Le transfert du message a échoué !&lt;br /&gt;javax.jms.InvalidDestinationException: Proxy could not forward the request to incorrectly identified destination: java.lang.IllegalArgumentException: QUEUELOUCHE: bad id&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3024640563730832570?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3024640563730832570/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3024640563730832570' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3024640563730832570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3024640563730832570'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/04/crer-dynamiquement-des-queue.html' title='Créer dynamiquement des QUEUE'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1941804353892232916</id><published>2008-04-01T02:53:00.000-07:00</published><updated>2008-11-14T04:54:27.566-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='securite'/><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='msec'/><title type='text'>Modifier le niveau de securité sur Mandriva</title><content type='html'>Ayant installé Mandriva 2008, je me suis retrouvé avec un niveau de sécurité trop élevé pour mes besoins  (4). &lt;br /&gt;&lt;br /&gt;Concrétement, les répertoire home changeais constamment de droits de sorte qu'il n'était pas possible à plusieurs utilisateur de se lire les fichiers&lt;br /&gt;&lt;br /&gt;Pour y remédier le commande :&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;msec -o log=stderr 2 &lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt; effectue le changement de niveau.&lt;br /&gt;&lt;br /&gt;Ces informations sont stockée dans le fichier /etc/sysconfig/msec&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;UMASK_ROOT=022 (Donne les droit d'acc&amp;#232;s du repertoire root)&lt;br /&gt;SECURE_LEVEL=3 (Donne le niveau de s&amp;#233;curit&amp;#233;)&lt;br /&gt;UMASK_USER=022 (Donne les droit d'acc&amp;#232;s des r&amp;#233;pertoire utilisateur)&lt;br /&gt;TMOUT=0&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;msec est lancé quotidiennement, on le trouve dans /etc/cron.daily&lt;br /&gt;&lt;br /&gt;http://club.mandriva.com/xwiki/bin/view/KB/SecureSmsec2?language=fr#HQuelniveaudesC3A9curitC3A9choisir3F&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1941804353892232916?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1941804353892232916/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1941804353892232916' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1941804353892232916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1941804353892232916'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/04/modifier-le-niveau-de-securit-sur.html' title='Modifier le niveau de securité sur Mandriva'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5949169549761229247</id><published>2008-03-13T07:45:00.000-07:00</published><updated>2008-09-05T07:37:29.565-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='relay'/><category scheme='http://www.blogger.com/atom/ns#' term='mail'/><category scheme='http://www.blogger.com/atom/ns#' term='postfix'/><title type='text'>Installer posfix Mandriva avec un relay smtp authentifié</title><content type='html'>Dans la fichier /etc/postfix/main.cf&lt;br /&gt;&lt;br /&gt;Ajouter les lignes :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;smtpd_sasl_path = /etc/postfix/sasl:/usr/lib/sasl2&lt;br /&gt;smtp_use_tls = yes&lt;br /&gt;smtp_sasl_auth_enable = yes&lt;br /&gt;smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd&lt;br /&gt;relayhost = smtp.my.network&lt;br /&gt;smtp_sasl_security_options =&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;Créer le fichier /etc/postfix/sasl_passwd et ajouter les lignes &lt;br /&gt;&lt;br /&gt;smtp.my.network monuser:monpassword&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Redémarrer postfix&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5949169549761229247?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5949169549761229247/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5949169549761229247' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5949169549761229247'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5949169549761229247'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/03/installer-posfix-mandriva-avec-un-relay.html' title='Installer posfix Mandriva avec un relay smtp authentifié'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-779912227296216807</id><published>2008-02-28T05:09:00.000-08:00</published><updated>2010-01-26T05:44:33.413-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='jmx'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jconsole'/><title type='text'>Utiliser la JConsole avec tomcat</title><content type='html'>JConsole est un utilitaire fourni avec le JDK. Il permet de voir l'état d'une machine virtuelle et il est particulièrement utile lorsqu'il s'agit d'effectuer le diagnostic de performance d'une application. &lt;br /&gt;&lt;br /&gt;Pour une application Web, il faut observer le tomcat. Pour ce faire, on crée dans le répertoire bin un fichier setenv.sh en ajoutant la ligne suivante :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;if [ &amp;quot;$1&amp;quot; = &amp;quot;start&amp;quot; ]; then&lt;br /&gt;export JAVA_OPTS=&amp;quot;-Dcom.sun.management.jmxremote \&lt;br /&gt; -Dcom.sun.management.jmxremote.port=50001 \ &lt;br /&gt; -Dcom.sun.management.jmxremote.ssl=false \&lt;br /&gt; -Dcom.sun.management.jmxremote.authenticate=false&amp;quot;&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ou bien sous windows dans setclasspath (de Tomcat 6.0)&lt;br /&gt;set JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=50001 -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false"&lt;br /&gt;&lt;br /&gt;Ensuite il faut lancer JConsole et se connecter sur la machine à observer sur le port 50000. Bien entendu, il est possible de sécuriser l'accès à ces informations.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-verbose:class permet d'afficher d'ou sont chargée les différentes classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-779912227296216807?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/779912227296216807/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=779912227296216807' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/779912227296216807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/779912227296216807'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/utiliser-la-jconsole-avec-tomcat.html' title='Utiliser la JConsole avec tomcat'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7509305199330872353</id><published>2008-02-28T01:54:00.001-08:00</published><updated>2008-03-04T04:47:22.888-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='log4j'/><category scheme='http://www.blogger.com/atom/ns#' term='remote'/><title type='text'>Journalisation distante avec  log4j</title><content type='html'>La journalisation distante est particulièrement utile pour voir les log dans les environnement de recette et/ou de production. &lt;br /&gt;Sur log4j on ajoute un traceur remote. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&lt;br /&gt;log4j.rootLogger=INFO, stdout, REMOTE&lt;br /&gt;&lt;br /&gt;log4j.appender.REMOTE=org.apache.log4j.net.SocketAppender&lt;br /&gt;log4j.appender.REMOTE.RemoteHost=mydisplayloghost&lt;br /&gt;log4j.appender.REMOTE.Port=4560&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Chainsaw est le client. Il faut créer un SocketReceiver.&lt;br /&gt;&lt;br /&gt;Téléchargable à cette URL : http://logging.apache.org/chainsaw/download.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7509305199330872353?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7509305199330872353/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7509305199330872353' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7509305199330872353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7509305199330872353'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/journalisation-distance-avec-log4j.html' title='Journalisation distante avec  log4j'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1316059888755375004</id><published>2008-02-26T02:33:00.000-08:00</published><updated>2008-02-26T02:35:26.657-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cargo'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Utilisation de cargo</title><content type='html'>Configuration du plugin en mode local et remote&lt;br /&gt;Voici la ligne à insérer dans le pom.xml&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;plugin&amp;gt;&lt;br /&gt;&amp;lt;groupId&amp;gt;org.codehaus.cargo&amp;lt;/groupId&amp;gt;&lt;br /&gt;&amp;lt;artifactId&amp;gt;cargo-maven2-plugin&amp;lt;/artifactId&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt; (Indique ou sont d&amp;#233;ploy&amp;#233;s les war)&lt;br /&gt;&amp;lt;type&amp;gt;existing&amp;lt;/type&amp;gt; (Le type par defaut est standalone, c'est &amp;#224; dire que les repertoire de deploiement est cr&amp;#233;&amp;#233; s'il n'existe pas)&lt;br /&gt;&amp;lt;home&amp;gt;/opt/tomcat/&amp;lt;/home&amp;gt; (N&amp;#233;cessaire dans le cas d'un existing)&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;container&amp;gt;&lt;br /&gt;&amp;lt;containerId&amp;gt;tomcat5x&amp;lt;/containerId&amp;gt;&lt;br /&gt;&amp;lt;home&amp;gt;/opt/tomcat/&amp;lt;/home&amp;gt; (Home indique ou trouver le container (le moteur))&lt;br /&gt;&amp;lt;/container&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&amp;lt;/plugin&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pour pouvoir déployer sous un chemin spécifique, indépendamment des version, il faut créer le fichier META-INF/context.xml et affecter le nom d'application que l'on souhaite.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Context path=&amp;quot;/gestion&amp;quot; /&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1316059888755375004?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1316059888755375004/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1316059888755375004' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1316059888755375004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1316059888755375004'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/utilisation-de-cargo.html' title='Utilisation de cargo'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3361559481898872066</id><published>2008-02-19T08:07:00.000-08:00</published><updated>2009-04-08T00:44:14.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jmeter'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Utiliser JMeter à travers un proxy</title><content type='html'>Dans le fichier jmeter.bat ajouter à la ligne de commande les paramètre -H et -P pour l'hôte et le port de proxy.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;%JM_START% %JM_LAUNCH% %JVM_ARGS% %ARGS%&lt;br /&gt; -jar &amp;quot;%JMETER_BIN%ApacheJMeter.jar&amp;quot; &lt;br /&gt; %JMETER_CMD_LINE_ARGS% -H hostname -P 80&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3361559481898872066?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3361559481898872066/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3361559481898872066' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3361559481898872066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3361559481898872066'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/utiliser-jmeter-travers-un-proxy.html' title='Utiliser JMeter à travers un proxy'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5740808125556651412</id><published>2008-02-19T07:49:00.000-08:00</published><updated>2008-02-28T04:52:55.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jmeter'/><category scheme='http://www.blogger.com/atom/ns#' term='web-service'/><title type='text'>Tester un Web Service à l'aide de JMeter</title><content type='html'>Pour tester un Web service à l'aide de JMeter. Il est possible de se servir soit d'un appel SOAP (C'est à dire que la couche d'abstraction Web Service n'est pas utilisée) soit d'utiliser les service en version Beta de test d'un Service Web&lt;br /&gt;&lt;br /&gt;Ce post décrit la méthode utilisant un type SOAP&lt;br /&gt;&lt;br /&gt;Dans le scénario ajouter un échantillon de Requete SOAP/XML-RPC pour ne pas &lt;br /&gt;&lt;br /&gt;Le corps du message est le suivant, il peut être récupéré en mode debug dans une IDE. Il s'agit du SOAPEnvelope du requestMessage du Message envoyé dans le call. Mis le plus simple consite à utiliser le moniteur de AXIS pour voir la requête qui est envoyée.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;java -cp axis.jar org.apache.axis.utils.tcpmon&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Le SOAP Enveloppe ressemble à ceci.  &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;soapenv:Envelope&lt;br /&gt;xmlns:soapenv=&amp;quot;http://schemas.xmlsoap.org/soap/envelope/&amp;quot; &lt;br /&gt;xmlns:xsd=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;br /&gt;xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;lt;soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;ns1:RechercherListeDossiers &lt;br /&gt;soapenv:encodingStyle=&amp;quot;http://schemas.xmlsoap.org/soap/encoding/&amp;quot;&lt;br /&gt;xmlns:ns1=&amp;quot;http://www.agriculture.gouv.fr/AIDA/2007&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;identifiant xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&lt;br /&gt;${pacage}&amp;lt;/identifiant&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;typeIdentifiant xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&lt;br /&gt;PACAGE&lt;br /&gt;&amp;lt;/typeIdentifiant&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;annee xsi:type=&amp;quot;xsd:string&amp;quot;&amp;gt;&lt;br /&gt;0&amp;lt;/annee&amp;gt;&lt;br /&gt;&amp;lt;/ns1:RechercherListeDossiers&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Body&amp;gt;&lt;br /&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5740808125556651412?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5740808125556651412/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5740808125556651412' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5740808125556651412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5740808125556651412'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/tester-un-web-service-laide-de-jmeter.html' title='Tester un Web Service à l&apos;aide de JMeter'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2933591220339928711</id><published>2008-02-01T06:42:00.000-08:00</published><updated>2008-02-01T06:43:15.631-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deploy'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Deployer avec les sources à l'aide de maven</title><content type='html'>Cette commande effectue le javadoc et la mise à disposition des sources. &lt;br /&gt;mvn -DperformRelease=true deploy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2933591220339928711?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2933591220339928711/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2933591220339928711' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2933591220339928711'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2933591220339928711'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/02/deployer-avec-les-sources-laide-de.html' title='Deployer avec les sources à l&apos;aide de maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3306084749679899317</id><published>2008-01-31T01:40:00.000-08:00</published><updated>2008-02-26T04:25:43.370-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jmeter'/><category scheme='http://www.blogger.com/atom/ns#' term='jsf'/><title type='text'>JMeter et JFaces</title><content type='html'>Afin de tester une application, je suis en train de préparer un test de performances à l'aide de l'outils JMETER.&lt;br /&gt;&lt;br /&gt;JMETER à l'aide de son proxy enregistre toutes les requêtes avec paramètres d'entête et de corps. Parmi eux, le paramètre com.sun.faces.VIEW comporte l'état de la vue encodé d'une manière complexe. La valeur de ce champs dépend de l'état des composants et de la structure de l'arbre de composants qui représente la page courante.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;L'implémentation de JSF sauvegarde l'arbre de composant et les états associés à chaque composant dans un flux de byte qui est ensuite encodé en base64.(C'est une sérialisation.) &lt;br /&gt;La méthode&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;com.sun.faces.renderkit.ResponseStateManagerImpl.writeState :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; public void writeState(FacesContext context, SerializedView&lt;br /&gt;view)&lt;br /&gt;        throws IOException {&lt;br /&gt;        ByteArrayOutputStream bos = null;&lt;br /&gt;        String hiddenField = null;&lt;br /&gt;&lt;br /&gt;        bos = new ByteArrayOutputStream();&lt;br /&gt;        ObjectOutput output = new ObjectOutputStream(bos);&lt;br /&gt;        output.writeObject(view.getStructure());&lt;br /&gt;        output.writeObject(view.getState());&lt;br /&gt;&lt;br /&gt;        hiddenField = &amp;quot; &amp;lt;input type=\&amp;quot;hidden\&amp;quot; name=\&amp;quot;&amp;quot;&lt;br /&gt;            + RIConstants.FACES_VIEW + &amp;quot;\&amp;quot;&amp;quot; + &amp;quot; value=\&amp;quot;&amp;quot; +&lt;br /&gt;            (new String(Base64.encode(bos.toByteArray()),&lt;br /&gt;&amp;quot;ISO-8859-1&amp;quot;)) +&lt;br /&gt;            &amp;quot;\&amp;quot; /&amp;gt;\n &amp;quot;;&lt;br /&gt;        context.getResponseWriter().write(hiddenField);&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lorsque l'utilisateur soumet la page ce champs est décodé par la méthode getTreeStructureToRestore de la même classe.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;public Object getTreeStructureToRestore(FacesContext&lt;br /&gt;context,&lt;br /&gt;                                            String treeId) {&lt;br /&gt;&lt;br /&gt;        Object structure = null;&lt;br /&gt;        Object state = null;&lt;br /&gt;&lt;br /&gt;        Map requestParamMap = context.getExternalContext()&lt;br /&gt;            .getRequestParameterMap();&lt;br /&gt;&lt;br /&gt;        String viewString = (String) requestParamMap.get(&lt;br /&gt;            RIConstants.FACES_VIEW);&lt;br /&gt;        if (viewString == null) {&lt;br /&gt;            return null;&lt;br /&gt;        }&lt;br /&gt;        byte[] bytes = Base64.decode(viewString.getBytes());&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            ObjectInputStream ois = new ObjectInputStream(&lt;br /&gt;                new ByteArrayInputStream(bytes));&lt;br /&gt;            structure = ois.readObject();&lt;br /&gt;            state = ois.readObject();&lt;br /&gt;            Map requestMap =&lt;br /&gt;context.getExternalContext().getRequestMap();&lt;br /&gt;            // store the state object temporarily in request&lt;br /&gt;scope until it is&lt;br /&gt;            // processed by getComponentStateToRestore which&lt;br /&gt;resets it.&lt;br /&gt;            requestMap.put(FACES_VIEW_STATE, state);&lt;br /&gt;            ois.close();&lt;br /&gt;        } catch (java.io.OptionalDataException ode) {&lt;br /&gt;            log.error(ode.getMessage(), ode);&lt;br /&gt;        } catch (java.lang.ClassNotFoundException cnfe) {&lt;br /&gt;            log.error(cnfe.getMessage(), cnfe);&lt;br /&gt;        } catch (java.io.IOException iox) {&lt;br /&gt;            log.error(iox.getMessage(), iox);&lt;br /&gt;        }&lt;br /&gt;        return structure;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Si cette valeur est incorrecte, cela ne peut pas fonctionner il n'est pas possible de reconstituer l'objet qui a été sérialisé. C'est comme d'ouvrir un fichier exe avec un&lt;br /&gt;éditeur hexadécimal et de supprimer ou d'ajouter des bytes par ci par là, et d'espèrer que le programme va s'éxécuter correctement. En général, si ce champs est incorrect JSF plante.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3306084749679899317?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3306084749679899317/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3306084749679899317' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3306084749679899317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3306084749679899317'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/01/jmeter-et-jfaces.html' title='JMeter et JFaces'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-597715569934864638</id><published>2008-01-17T04:17:00.000-08:00</published><updated>2008-01-18T03:05:35.709-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='axis'/><category scheme='http://www.blogger.com/atom/ns#' term='web-service'/><title type='text'>Générer un projet web service</title><content type='html'>Sous eclipse pour axis 1&lt;br /&gt;&lt;br /&gt;New -&gt; Dynamic Web Project pour créer le projet web&lt;br /&gt;New -&gt; Web Service&lt;br /&gt;&lt;br /&gt;A partir d'un WSDL, on génère un top-down Web service. &lt;br /&gt;A partir d'une classe java on fait une génération down-top&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Choisir cette option dans la combo box. &lt;/li&gt;&lt;li&gt; Choisir l'url du WSDL (WS definition)&lt;/li&gt;&lt;li&gt; Choisir le WS server &lt;/li&gt;&lt;li&gt; Choisir le projet web&lt;/li&gt;&lt;li&gt; Générer le WS dans notre nouveau projet. &lt;/li&gt;&lt;li&gt; Déployer sur le serveur d'application&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pour vérifier son installation, taper &lt;a class="moz-txt-link-freetext" href="http://localhost:8080/nom_application/services/"&gt;http://localhost:8080/nom_application/services/&lt;/a&gt;&lt;br /&gt;Le service doit apparaitre&lt;br /&gt;&lt;h2&gt;And now... Some Services&lt;/h2&gt; &lt;ul&gt;&lt;li&gt;AdminService &lt;a href="http://10.202.57.28:8080/cnasea/services/AdminService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;AdminService     &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Version &lt;a href="http://10.202.57.28:8080/cnasea/services/Version?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;getVersion     &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;MonService &lt;a href="http://10.202.57.28:8080/cnasea/services/AidaService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;MonOperation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; Il reste à implementer la classe suffixée par Impl&lt;br /&gt;&lt;br /&gt;Sous eclipse pour axis2&lt;br /&gt;&lt;br /&gt;Télécharger Eclipse Eurapa pour J2EE&lt;br /&gt;Télécharger la runtime (ws.apache.org/axis2/) en version WAR et en  version BIN.&lt;br /&gt;Dézipper le BIN et référencer le dossier extrait dans Eclipse -&gt; Window  -&gt; Preferences -&gt;  Web services -&gt; Axis Preferences&lt;br /&gt;Reprendre les étapes précédente en choisissant cette fois la runtime axis 2&lt;br /&gt;New -&gt; Dynamic Web Project pour créer le projet web&lt;br /&gt;New -&gt; Web Service&lt;br /&gt;&lt;br /&gt;A partir d'un WSDL, on génère un top-down Web service. &lt;br /&gt;A partir d'une classe java on fait une génération down-top&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Choisir cette option dans la combo box. &lt;/li&gt;&lt;li&gt; Choisir l'url du WSDL (WS definition)&lt;/li&gt;&lt;li&gt; Choisir le WS server &lt;/li&gt;&lt;li&gt; Choisir le projet web&lt;/li&gt;&lt;li&gt; Générer le WS dans notre nouveau projet. &lt;/li&gt;&lt;li&gt; Déployer sur le serveur d'application&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Pour vérifier son installation, taper &lt;a class="moz-txt-link-freetext" href="http://localhost:8080/nom_application/services/"&gt;http://localhost:8080/nom_application/services/&lt;/a&gt;&lt;br /&gt;Le service doit apparaitre&lt;br /&gt;&lt;h2&gt;And now... Some Services&lt;/h2&gt; &lt;ul&gt;&lt;li&gt;AdminService &lt;a href="http://10.202.57.28:8080/cnasea/services/AdminService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;AdminService     &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Version &lt;a href="http://10.202.57.28:8080/cnasea/services/Version?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;getVersion     &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;MonService &lt;a href="http://10.202.57.28:8080/cnasea/services/AidaService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;MonOperation&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; Il reste à implementer la classe suffixée par Impl&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-597715569934864638?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/597715569934864638/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=597715569934864638' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/597715569934864638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/597715569934864638'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/01/gnrer-un-projet-web-service.html' title='Générer un projet web service'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-4641406940051843310</id><published>2008-01-17T01:45:00.000-08:00</published><updated>2011-02-22T02:00:38.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='subversion'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='proxy'/><title type='text'>Subversion proxy</title><content type='html'>&lt;div class="post-content"&gt;&lt;p&gt;Si jamais vous êtes dans un réseau d'entreprise, derrière un proxy, et que vous souhaitez accéder à un serveur SVN distant, vous risquez d'être confronté à des messages d'erreurs impliquant "PROPFIND...".&lt;/p&gt;   &lt;p&gt;Voici un petit guide pour résoudre le problème (merci Guillaume), en se basant sur le SVN de &lt;a href="http://www.copix.org/"&gt;Copix&lt;/a&gt; pour l'exemple.&lt;/p&gt;   &lt;p&gt;Il faut modifier le fichier "servers" de subversion.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;sous Linux, c'est : $HOME/.subversion/servers.&lt;/li&gt;&lt;li&gt;sous Windows, c'est : %USERPROFILE%\Application Data\Subversion\servers.&lt;/li&gt;&lt;/ul&gt;  &lt;p&gt;Dans la section [group], ajoutez "copixorg=svn.copix.org", i.e. :&lt;/p&gt;   &lt;pre&gt;[group]&lt;br /&gt;copixorg=*.copix.org&lt;/pre&gt;   &lt;p&gt;Puis ajoutez la section suivante :&lt;/p&gt;   &lt;pre&gt;[copixorg]&lt;br /&gt;http-proxy-host = xxx.xxx.xxx.xxx&lt;br /&gt;http-proxy-port = 8080&lt;br /&gt;http-proxy-username = login&lt;br /&gt;http-proxy-password = mot_de_passe&lt;br /&gt;&lt;br /&gt;En utilisant tortoise SVN, il est également possible de le configurer directement dans les setting&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-4641406940051843310?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/4641406940051843310/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=4641406940051843310' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4641406940051843310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/4641406940051843310'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/01/subversion-proxy.html' title='Subversion proxy'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5216239372198593153</id><published>2008-01-03T05:04:00.000-08:00</published><updated>2010-03-10T06:21:22.927-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jonas'/><category scheme='http://www.blogger.com/atom/ns#' term='spring'/><category scheme='http://www.blogger.com/atom/ns#' term='datasource'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><category scheme='http://www.blogger.com/atom/ns#' term='jdbc'/><title type='text'>Configurer ses datasources tomcat ou jonas et Spring</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Récupérer la datasource dans le code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;        Context initialContext = null;&lt;br /&gt;      log.error("Initializing supervision servlet");&lt;br /&gt;      try {&lt;br /&gt;          initialContext = new InitialContext();&lt;br /&gt;          DataSource dataSource = (DataSource) initialContext&lt;br /&gt;                  .lookup("java:comp/env/jdbc/Journal");&lt;br /&gt;          connection = dataSource.getConnection();&lt;br /&gt;      } catch (Exception e) {&lt;br /&gt;          log.error("Cannot get initial context for JNDI: ");&lt;br /&gt;          e.printStackTrace();&lt;br /&gt;          log.error(e);&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Une connexion est obtenue à partir du DataSource. Cette connexion est une implémentation particulière puisque son appel à la méthode close() ne la ferme pas réellement mais la rend à nouveau disponible au pool de connexion. Sans cette action permet la connexion ne se libère pas. Pour cette raison, il est très important que la méthode close soit appelée et même en cas d'exception. Sans cela, sans cela le pool de la database perd des connections et il peut résulter une insiponibilité de la database.&lt;br /&gt;&lt;br /&gt;Le mieux est de faire close() de la session dans un bloc finally pour garantir son appel.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;br /&gt;&lt;code&gt;      try{&lt;br /&gt;            connection=getConnection(); // Permet de récupérer une connexion à partir du DataSource&lt;br /&gt;                 ...&lt;br /&gt;            traitement&lt;br /&gt;                 ...&lt;br /&gt;            resultSet.close();&lt;br /&gt;            connection.close();&lt;br /&gt;            logger.debug(infoDossiers.size() + &amp;quot; dossiers retourn&amp;#233;s&amp;quot;);&lt;br /&gt;            return infoDossiers;&lt;br /&gt;        } catch (SQLException e) {&lt;br /&gt;            try {&lt;br /&gt;                logger&lt;br /&gt;                        .error(&lt;br /&gt;                                &amp;quot;Erreur lors de la requ&amp;#234;te de r&amp;#233;cup&amp;#233;ration des infos du dossier pour l'identifiant : &amp;quot;&lt;br /&gt;                                        + identifiant&lt;br /&gt;                                        + &amp;quot; de type : &amp;quot;&lt;br /&gt;                                        + typeIdentifiant&lt;br /&gt;                                        + &amp;quot; pour l'ann&amp;#233;e :&amp;quot;&lt;br /&gt;                                        + annee, e);&lt;br /&gt;                if (connection != null) {&lt;br /&gt;                    connection.close();&lt;br /&gt;                }&lt;br /&gt;            } catch (SQLException e1) {&lt;br /&gt;                logger.error(&amp;quot;Erreur lors de fermeture de la connection&amp;quot;);&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Le fichier context.xml définit cette data source. Il peut être placé dans le répertoire META-INF/context.xml, dans ce cas, il est rechargé à chaque déploiement. La ressource peut aussi être définie au niveau du Host en créant un fichier context.xml.default dans le répertoire conf/Catalina/localhost de tomcat. Dans ce cas le déploiement ne reconfigure pas la datasource. Le fichier de context s'écrit  :&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Context displayName=&amp;quot;Calam-WS&amp;quot;  path=&amp;quot;/calam-ws&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;Resource name=&amp;quot;jdbc/MyDataSource&amp;quot; auth=&amp;quot;Container&amp;quot; type=&amp;quot;javax.sql.DataSource&amp;quot;&lt;br /&gt;               maxActive=&amp;quot;100&amp;quot; maxIdle=&amp;quot;2&amp;quot; maxWait=&amp;quot;5000&amp;quot;&lt;br /&gt;               username=&amp;quot;myuser&amp;quot; password=&amp;quot;mypass&amp;quot; driverClassName=&amp;quot;com.sybase.jdbc3.jdbc.SybDriver&amp;quot;&lt;br /&gt;               url=&amp;quot;jdbc:sybase:Tds:ouaga:5000/MyBase&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Au moment de récuppérer l'URL on pourra avoir de problèmes de classpath, dans ce ca le mettre dans les librairies commns de tomcat&lt;br /&gt;&lt;br /&gt;Dans le cas d'une utilisation au sein de Spring. Le fichier dao-context.xml a été modifié pour utiliser les datasources&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;bean id=&amp;quot;dataSource&amp;quot; class=&amp;quot;org.springframework.jndi.JndiObjectFactoryBean&amp;quot;&lt;br /&gt;        destroy-method=&amp;quot;close&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;property name=&amp;quot;jndiName&amp;quot; value=&amp;quot;java:comp/env/jdbc/my-datasource&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/bean&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Cette datasource se définit dans le fichier context.xml de votre serveur tomcat de eclipse, préciser la datasource. &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Context path=&amp;quot;/myapp&amp;quot; docBase=&amp;quot;myapp-ihm&amp;quot;&lt;br /&gt;        debug=&amp;quot;5&amp;quot; reloadable=&amp;quot;true&amp;quot; crossContext=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;    &lt;br /&gt;  &amp;lt;Resource name=&amp;quot;jdbc/my-datasource&amp;quot; auth=&amp;quot;Container&amp;quot; type=&amp;quot;javax.sql.DataSource&amp;quot;&lt;br /&gt;               maxActive=&amp;quot;100&amp;quot; maxIdle=&amp;quot;30&amp;quot; maxWait=&amp;quot;10000&amp;quot;&lt;br /&gt;               username=&amp;quot;user&amp;quot; password=&amp;quot;password&amp;quot; driverClassName=&amp;quot;com.mysql.jdbc.Driver&amp;quot;&lt;br /&gt;               url=&amp;quot;jdbc:mysql://localhost:3306/mydb&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ensuite copier la librairie connector-mysql (Z:\00-DOSSIER_PROD\DEquipe\Produits\Poste dev\mysql-connector-java-5.0.5.jar ). Dans votre répertoire  lib de tomcat&lt;br /&gt;&lt;br /&gt;A l'issue de ces manipulations, un clean et une publication seront prudent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installer des datasources sous JONAS&lt;/h2&gt; &lt;br /&gt;&lt;br /&gt;Dans le fichier conf/jonas.properties de votre serveur d'application, ajouter les datasources séparée par des virgules :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;jonas.service.dbm.datasources    my_datasource1&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Créer le fichier &lt;br /&gt;my_datasource1.properties dans votre répertoire conf et y ajouter les propriétés de votre datasources &lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;#This file is generated by JOnAS&lt;br /&gt;#Fri Feb 26 14:16:50 CET 2010&lt;br /&gt;jdbc.maxconpool=-1&lt;br /&gt;jdbc.connmaxage=1440&lt;br /&gt;jdbc.maxwaittime=10&lt;br /&gt;datasource.url=\ jdbc\:mysql\://my-db\:3306/mydb&lt;br /&gt;datasource.description=no desc&lt;br /&gt;datasource.mapper=rdb&lt;br /&gt;jdbc.minconpool=0&lt;br /&gt;jdbc.connteststmt=SELECT 1&lt;br /&gt;datasource.username=myuser&lt;br /&gt;datasource.name=ftjobs_1&lt;br /&gt;datasource.classname=com.mysql.jdbc.Driver&lt;br /&gt;jdbc.maxwaiters=1000&lt;br /&gt;datasource.password=mypassword&lt;br /&gt;jdbc.connchecklevel=1&lt;br /&gt;jdbc.maxopentime=1440&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Créer un fichier jonas-web dans le répertoire WEB-INF de votre application&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;jonas-web-app&amp;gt;&lt;br /&gt;&amp;lt;jonas-resource&amp;gt;&lt;br /&gt;&amp;lt;res-ref-name&amp;gt;jdbc/my-datasource&amp;lt;/res-ref-name&amp;gt;&lt;br /&gt;&amp;lt;jndi-name&amp;gt;mydatasource_1&amp;lt;/jndi-name&amp;gt;&lt;br /&gt;&amp;lt;/jonas-resource&amp;gt;&lt;br /&gt;&amp;lt;/jonas-web-app&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5216239372198593153?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5216239372198593153/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5216239372198593153' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5216239372198593153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5216239372198593153'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2008/01/configurer-ses-datasources-laide-de.html' title='Configurer ses datasources tomcat ou jonas et Spring'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-852781196751651660</id><published>2007-12-11T08:21:00.000-08:00</published><updated>2009-11-30T06:17:04.475-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hibernate'/><category scheme='http://www.blogger.com/atom/ns#' term='thread'/><title type='text'>Hibernate session en multithread</title><content type='html'>J'utilise plusieurs threads pour la requête affichage de liste dans une application WEB. Lorsque je lance une requête en servant de la session  Hibernate (partagée par les différents threads) j'obtiens le message suivant :&lt;br /&gt;Exception in thread "Thread-41" org.hibernate.HibernateException: Not able to obtain connection&lt;br /&gt;    at &lt;br /&gt; org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:113)&lt;br /&gt; &lt;br /&gt;Le forum http://forums.hibernate.org/viewtopic.php?t=945337 suggère de passer dans un mode transactionnel, mais cela ne fonctionne pas dans mon cas. Il suggère également de laisser spring la possibilité de créer des connexions sur les threads qui en ont le besoin à l'aide de l'option  allowCreate &lt;br /&gt;&lt;http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/orm/hibernate3/HibernateTemplate.html#setAllowCreate%28boolean%29&gt;&lt;br /&gt; à true ou bien de faire des requête callback. &lt;br /&gt;&lt;br /&gt;Réponse :&lt;br /&gt;&lt;br /&gt;La session hibernate gèe une seule connection et n'est pas thread safe : on ne peut pas partager une instance de session par plusieurs threads à moins d'utiliser les mécanismes de synchronisation.&lt;br /&gt;&lt;br /&gt;C'est la même chose pour une connection JDBC : on ne peut pas avoir un thread qui lit les résultats d'une requête tandis qu'un autre tente de lancer un autre select sur la&lt;br /&gt;même connection.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tu peux faire rendre ton code thread safe si ton cas d'utilisation le permet en utilisant le mot clef synchronized.&lt;br /&gt;&lt;br /&gt;// un seul thread à la fois peut exécuter ce code&lt;br /&gt;synchronized {&lt;br /&gt;&lt;br /&gt;// mon code &lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;ou &lt;br /&gt;&lt;br /&gt;synchronized(maSession) {&lt;br /&gt;  // mon code &lt;br /&gt;&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-852781196751651660?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/852781196751651660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/852781196751651660'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/12/hibernate-session-en-multithread.html' title='Hibernate session en multithread'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-1550977932224194555</id><published>2007-12-11T00:12:00.000-08:00</published><updated>2007-12-11T00:14:23.408-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>Mysql connection refused Mandriva</title><content type='html'>Comment rendre disponible la connexion reseau de mysql sur une mandriva (Connection refused error)&lt;br /&gt;Dans le fichier /etc/sysconfig/mysqld&lt;br /&gt;Commenter MYSQLD_OPTIONS="--skip-networking"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-1550977932224194555?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/1550977932224194555/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=1550977932224194555' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1550977932224194555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/1550977932224194555'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/12/mysql-connection-refused-mandriva.html' title='Mysql connection refused Mandriva'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5462862692963641216</id><published>2007-12-10T03:00:00.000-08:00</published><updated>2007-12-11T00:25:49.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Comment définir le niveau des source JSP</title><content type='html'>Dans le fichier conf/web.xml on règle le source level&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;pre class=&amp;quot;text&amp;quot;&amp;gt;   &amp;lt;servlet&amp;gt;&lt;br /&gt;      &amp;lt;servlet-name&amp;gt;jsp&amp;lt;/servlet-name&amp;gt;&lt;br /&gt;      &amp;lt;servlet-class&amp;gt;org.apache.jasper.servlet.JspServlet&amp;lt;/servlet-class&amp;gt;&lt;br /&gt;      &amp;lt;init-param&amp;gt;&lt;br /&gt;          &amp;lt;param-name&amp;gt;fork&amp;lt;/param-name&amp;gt;&lt;br /&gt;          &amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;br /&gt;      &amp;lt;/init-param&amp;gt;&lt;br /&gt;       &amp;lt;init-param&amp;gt;&lt;br /&gt;               &amp;lt;param-name&amp;gt;compilerSourceVM&amp;lt;/param-name&amp;gt;&lt;br /&gt;                  &amp;lt;param-value&amp;gt;1.5&amp;lt;/param-value&amp;gt;&lt;br /&gt;                 &amp;lt;/init-param&amp;gt;&lt;br /&gt;  &amp;lt;init-param&amp;gt;&lt;br /&gt;      &amp;lt;param-name&amp;gt;compilerTargetVM&amp;lt;/param-name&amp;gt;&lt;br /&gt;      &amp;lt;param-value&amp;gt;1.5&amp;lt;/param-value&amp;gt;&lt;br /&gt;   &amp;lt;/init-param&amp;gt;&lt;br /&gt;   &amp;lt;init-param&amp;gt;&lt;br /&gt;          &amp;lt;param-name&amp;gt;xpoweredBy&amp;lt;/param-name&amp;gt;&lt;br /&gt;          &amp;lt;param-value&amp;gt;false&amp;lt;/param-value&amp;gt;&lt;br /&gt;      &amp;lt;/init-param&amp;gt;&lt;br /&gt;      &amp;lt;load-on-startup&amp;gt;3&amp;lt;/load-on-startup&amp;gt;&lt;br /&gt;  &amp;lt;/servlet&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a class="wiki_link_ext" href="http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html" rel="nofollow"&gt;http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5462862692963641216?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5462862692963641216/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5462862692963641216' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5462862692963641216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5462862692963641216'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/12/comment-dfinir-le-niveau-des-source-jsp.html' title='Comment définir le niveau des source JSP'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5465318549189467133</id><published>2007-11-20T05:13:00.000-08:00</published><updated>2008-11-26T08:47:39.838-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='context'/><category scheme='http://www.blogger.com/atom/ns#' term='contexte'/><category scheme='http://www.blogger.com/atom/ns#' term='jndi'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Récupérer un objet dans un annuaire JNDI</title><content type='html'>Ceci est un fichier contexte exemple qui permet de définir une ressource &lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;Context displayName=&amp;quot;web-service server&amp;quot; docBase=&amp;quot;/opt/tomcat/webapps/myservice&amp;quot; path=&amp;quot;/myservice&amp;quot; workDir=&amp;quot;work/Catalina/localhost/myservice&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;Environment description=&amp;quot;&amp;quot; name=&amp;quot;pathDepot&amp;quot; type=&amp;quot;java.lang.String&amp;quot; value=&amp;quot;/var/depot-ws/myservice&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;Environment description=&amp;quot;&amp;quot; name=&amp;quot;facteurAttente&amp;quot; type=&amp;quot;java.lang.Integer&amp;quot; value=&amp;quot;0&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Dans le fichier web.xml, il faut utiliser ce code&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;env-entry&amp;gt;&lt;br /&gt;    &amp;lt;env-entry-name&amp;gt;docPath&amp;lt;/env-entry-name&amp;gt;&lt;br /&gt;    &amp;lt;env-entry-value&amp;gt;c:/doc/doc1&amp;lt;/env-entry-value&amp;gt;&lt;br /&gt;    &amp;lt;env-entry-type&amp;gt;java.lang.String&amp;lt;/env-entry-type&amp;gt;&lt;br /&gt;&amp;lt;/env-entry&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Je propose un bout de code pour récupérer un objet dans un annuaire JNDI.&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;        Context initialContext = null;&lt;br /&gt;        try {&lt;br /&gt;            initialContext = new InitialContext();&lt;br /&gt;            pathDepot = (String) initialContext&lt;br /&gt;                    .lookup(&amp;quot;java:comp/env/pathDepot&amp;quot;);&lt;br /&gt;            facteurDattente = (Integer) initialContext&lt;br /&gt;                    .lookup(&amp;quot;java:comp/env/facteurAttente&amp;quot;);&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            log.debug(&amp;quot;Cannot get initial context for JNDI: &amp;quot;);&lt;br /&gt;            log.debug(e);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5465318549189467133?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5465318549189467133/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5465318549189467133' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5465318549189467133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5465318549189467133'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/11/rcuprer-un-objet-dans-un-annuaire-jndi.html' title='Récupérer un objet dans un annuaire JNDI'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-275643838295847034</id><published>2007-11-20T05:06:00.000-08:00</published><updated>2007-11-20T05:09:05.681-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='tomcat'/><title type='text'>Installer son tomcat</title><content type='html'>&lt;h2&gt;Installer son tomcat&lt;br /&gt;&lt;/h2&gt; &lt;p&gt;Maintenant que nous avons vu la théorie, il est temps de commencer la    pratique. Avant de commencer il peut être bon de vous avertir que les    opérations à venir ne prennent pas une demi heure. Ne vous attendez    donc pas à voir fonctionner l'application de démonstration dans    le quart d'heure à venir.&lt;/p&gt; &lt;h2&gt; Tomcat&lt;/h2&gt; &lt;h3&gt;Installation&lt;/h3&gt; &lt;p&gt;Tomcat est un chef d'oeuvre de simplicité à installer&lt;/p&gt; &lt;p&gt;Pour nos expériences nous allons nous servir de la version 5 du serveur,    bien qu'il ne s'agisse pas encore de la version la plus répandue du serveur,    elle peut servir dans un contexte de production :&lt;/p&gt; &lt;p&gt;http://jakarta.apache.org/ est l'url de référence pour tous les    projets sous licence apache. Bien que cette page puisse sembler relativement    austère, beaucoup de composants JAVA de Jakarta ont su s'imposer sur    le marché. On y trouve entre autre tomcat et struts :&lt;/p&gt; &lt;p&gt;Tomcat :&lt;a href="http://jakarta.apache.org/tomcat"&gt; http://jakarta.apache.org/tomcat&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Struts : &lt;a href="http://stuts.apache.org/"&gt;http://stuts.apache.org/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Cliquez sur le liens download binaries et cherchez tomcat et struts. Comme    c'est du code open source, prennez l'habitude, à chaque fois que vous    téléchargez un programme pour le developpement d'également    télécharger son code source. C'est lavantage de l'open source,    un petit coup d'oeil dans le code source vous épargnera peut-être    des heures et des heures de tatonnement irrationnels comme cela se produit dans    les Apis propriétaires. Vérifiez bien que les versions binaires    correspondent au sources. &lt;/p&gt; &lt;p class="note"&gt;Note :&lt;/p&gt; &lt;p&gt;Si l'envie folle vous prend de procéder à l'ancienne :"Je    compile mon projet". Sachez que les dépendances pour les constructions    tomcat sont abracadabrantesques et rappelez vous que le java est portable, c'est    donc sans bénéfice pour la performance mais cela vous permettra    de debugger et de placer des trace dans le code source. Dézzipper votre    tomcat à l'endroit ou vous souhaitez le voir s'exécuter. Par défaut,    tomcat n'écrira que dans des sous répertoires de son répertoire    racine. &lt;/p&gt; &lt;p&gt;Affectez une variable JAVA_HOME sur le chemin de votre JDK (Pas JRE) en cliquant    sur le bouton droit droit sur le poste de travail dans windows. &lt;/p&gt; &lt;p&gt;Placez vous dans le répertoire de tomcat/bin et lancez la commande startup.sh    startup.bat suivant que vous vous trouvez sur Linux ou sur Windows. Vous venez    d'installer Tomcat. Félicitations !&lt;/p&gt; &lt;p&gt;Maintenant vous pouvez voir le résultat :&lt;/p&gt; &lt;p&gt;&lt;a href="http://localhost:8080/"&gt;http://localhost:8080/&lt;/a&gt;&lt;/p&gt; &lt;p class="note"&gt;Note : &lt;/p&gt; &lt;p&gt;Il est possible que votre OS fournissent une distribution de Tomcat avec des    chemins d'installation diffèrents de ceux par proposé par défault.    Je recommande plutôt d'utiliser une arborescence identique à celle    qui est proposée dans l'archive de la fondation apache tant qu'il s'agit    de développement.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/tomcat1ecran.gif" height="525" width="700" /&gt;&lt;/p&gt; &lt;p&gt;Voici ce que vous devez voir.&lt;/p&gt; &lt;h3&gt;Installer les options d'administration&lt;/h3&gt; &lt;p&gt;Pour pouvoir contrôler tomcat à distance il est nécessaire    d'activer les utilisateurs d'administration. Placez vous dans le répertoire    $TOMCAT_HOME/conf &lt;/p&gt; &lt;p&gt;Editez le fichier tomcat-users.xml pour qu'il ressemble à ceci :&lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/xmlusers.gif" height="448" width="588" /&gt;&lt;/p&gt; &lt;p&gt;Redémarrez tomcat et connectez vous à l'URL. Il vous affiche    le manager d'application qui vous permet de lister et de contrôler les    différentes applications déployées sur le serveur.&lt;/p&gt; &lt;p&gt;&lt;a href="http://localhost:8080/manager/html"&gt;http://localhost:8080/manager/html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/manager.gif" height="407" width="600" /&gt;&lt;/p&gt; &lt;h2&gt;Installer Eclipse&lt;/h2&gt; &lt;p&gt;Eclipse se télécharge &lt;a href="http://www.eclipse.org/"&gt;ici&lt;/a&gt;    : Installez la version 3.0. &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.eclipse.org/"&gt;http://www.eclipse.org&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Comme nous allons nous servir de tomcat, nous allons utiliser le plugin Sysdeo    qui permet de contrôller tomcat à travers eclipse. Pour installer    le plugin, dezippez simplement l'archive dans l'arborescence de eclipse et relancez    eclipse &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.sysdeo.com/eclipse/tomcatPlugin.html"&gt;http://www.sysdeo.com/eclipse/tomcatPlugin.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Configurez le pluggin dans le menu préférences afin qu'il sache    dialoguer avec tomcat.&lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/plugsydeo.gif" height="539" width="706" /&gt;&lt;/p&gt; &lt;p&gt;Nous sommes prêt à travailler sur une application réelle.&lt;/p&gt; &lt;h3&gt;L'application de démonstration&lt;/h3&gt; &lt;p&gt;L'application de démonstration nous présente une application    relativement complexe où vous pourrez retrouver beaucoup des problèmes    que l'on peu rencontrer dans le web. Elle présente les notions de :&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Connection à une base de données&lt;/li&gt;&lt;li&gt;Login et Enregistrement d'utilisateur&lt;/li&gt;&lt;li&gt;Utilisation du controleur Strut pour le contrôleur&lt;/li&gt;&lt;li&gt;Internationalisation (Charset et détection)&lt;/li&gt;&lt;li&gt;Gestion de formulaire dynamique&lt;/li&gt;&lt;li&gt;Boucle de traitement simple et imbriquée&lt;/li&gt;&lt;li&gt;Sécurisation de la partie administration&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Téléchargez l'application de démonstration &lt;a href="http://us.f1f.yahoofs.com/bc/3c035585/bc/Public%2Bdirectory/QuizzTomcat.zip.zip?bf3cJUBBbl.ZmD.p"&gt;ici&lt;/a&gt;.    Elle se présente sous la forme d'une archive WEB (.war) qui est en fait    un zip ou les fichiers se trouvent organisé d'une manière spéciale.    Pour la déployer il suffit de la copier dans le répertoire webapp    de tomcat, l'extraction des fichiers se fait automatiquement. &lt;/p&gt; &lt;p&gt;Maintenant quand vous vous connecter sur&lt;a href="http://localhost:8080/manager/html"&gt;    l'application manager&lt;/a&gt; vous devez appercevoir l'application QuizzTomcat dans    la liste. &lt;/p&gt; &lt;p&gt;Cependant, cette application s'appuie sur une base de donnée et il faut    l'installer ! Courage c'est presque fini ! &lt;/p&gt; &lt;h3&gt;Installation de MySQLpour l'application de démonstration&lt;/h3&gt; &lt;p&gt;Téléchargez mysql en vesion 4.0 &lt;a href="http://www.mysql.com/"&gt;ici&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Dans le répertoire c:\mysql\bin lancez winmysqladmin et installez MySQL    en temps que service. Lancez en ligne de commande le programme &lt;/p&gt; &lt;p class="code"&gt;mysql -uroot&lt;/p&gt; &lt;p&gt;Vous êtes l'utilisateur d'administration. Maintenant nous allons créer    la database et donner les droit à l'utilisateur quizz d'accéder    à cette database. &lt;/p&gt; &lt;p class="code"&gt;mysql&gt;create database quizz;&lt;br /&gt; mysql&gt;grant all privileges on quizz.* to quizz@localhost identified by 'quizz';&lt;br /&gt; mysql&gt;use quizz;&lt;br /&gt;&lt;/p&gt; &lt;p&gt; Nous allons créer les tables nécessaires à l'application    de démonstration avec le fichier &lt;code&gt;quizz.dmp&lt;/code&gt; qui se trouve    dans QuizzTomcat/WEB-INF/sql/quizz.dmp à l'intérieur de la WebApp.  &lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/dumpmysql.gif" height="128" width="529" /&gt; &lt;/p&gt; &lt;p&gt;Suit une volée d'insultes et peut-être des bip si votre ordinateur    est un bavard. &lt;/p&gt; &lt;p&gt;Voila la base de données est initialisée. &lt;/p&gt; &lt;h3&gt;Configuration de l'application WEB&lt;/h3&gt; &lt;p&gt;Maintenant, prennez le fichier jar qui se trouve dans WEB-INF/lib/mysql-connector-bin.jar    et copier le dans le répertoire tomcat/common/lib. &lt;/p&gt; &lt;p&gt;Connectez vous à la console d'administration de tomcat et tapez le user    et le mot passe tomcat pour vous connecter. &lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/tomcatadminlog.gif" height="379" width="414" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/tomcatadmindatasource1.gif" height="574" width="917" /&gt;&lt;/p&gt; &lt;p&gt;Placez vous sur &lt;code&gt;Service-&gt;Host-&gt;Context(QuizzTomcat)-&gt;DataSource&lt;/code&gt;    et selectionnez Create a new DataSource. Et rentrez les paramètres de    la data source. Sauvez et commit les changements. &lt;/p&gt; &lt;p&gt;&lt;img src="http://clementsoullard.com/persoclement/java/images/tomcatadmindatasource2.gif" height="742" width="1024" /&gt;&lt;/p&gt; &lt;p&gt;Pour vérifier que tout s'est bien passé, il faut aller voir dans    le fichier TOMCAT_HOME/conf/Catalina/localhost/QuizzTomcat.xml qui est le fichier    de contexte. &lt;/p&gt; &lt;p&gt;Il doit avoir l'allure suivante :&lt;/p&gt; &lt;p class="code"&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt; &amp;lt;context displayname=&amp;quot;Quizz App&amp;quot; docbase=&amp;quot;C:\Documents and    Settings\Propri&amp;#195;&amp;#169;taire\Bureau\eclipse\workspace\QuizzTomcat&amp;quot; path=&amp;quot;/QuizzTomcat&amp;quot; reloadable=&amp;quot;true&amp;quot; workdir=&amp;quot;C:\Documents    and Settings\Propri&amp;#195;&amp;#169;taire\Bureau\eclipse\workspace\QuizzTomcat\work&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;resource name=&amp;quot;jdbc/Quizz&amp;quot; type=&amp;quot;javax.sql.DataSource&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;resourceparams name=&amp;quot;jdbc/Quizz&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;maxWait&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;5000&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;maxActive&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;4&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;password&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;quizz&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;url&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;jdbc:mysql://localhost/quizz?autoReconnect=true&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;driverClassName&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;org.gjt.mm.mysql.Driver&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;maxIdle&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;2&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;parameter&amp;gt;&lt;br /&gt; &amp;lt;name&amp;gt;username&amp;lt;/name&amp;gt;&lt;br /&gt; &amp;lt;value&amp;gt;quizz&amp;lt;/value&amp;gt;&lt;br /&gt; &amp;lt;/parameter&amp;gt;&lt;br /&gt; &amp;lt;/resourceparams&amp;gt;&lt;br /&gt; &amp;lt;resourcelink global=&amp;quot;UserDatabase&amp;quot; name=&amp;quot;users&amp;quot; type=&amp;quot;org.apache.catalina.UserDatabase&amp;quot;&amp;gt;&lt;br /&gt; &amp;lt;/resourcelink&amp;gt;&amp;lt;/resource&amp;gt;&amp;lt;/context&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Avant de commencer à rentrer dans le détail du code dans le chapitre    suivant, il serait bon que vous parcouriez l'application de démonstration    QuizzTomcat&lt;/p&gt; &lt;p class="note"&gt;Note :&lt;/p&gt; &lt;p&gt;L'application de démonstration ne resemble pas à ce qu'on pourrait    appeler un Tutorial, pour deux raisons&lt;/p&gt; &lt;ul&gt;&lt;li&gt;D'abord, en ne restant que sur des applications simples, on se préserve      des questions qui font mal quand on passe au réel . &lt;/li&gt;&lt;li&gt;Ce cours est fait pour être détaillé de vive voix. &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-275643838295847034?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/275643838295847034/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=275643838295847034' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/275643838295847034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/275643838295847034'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/11/installer-son-tomcat.html' title='Installer son tomcat'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3641183225167331897</id><published>2007-11-16T04:55:00.000-08:00</published><updated>2007-12-11T00:24:41.987-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><title type='text'>Configurer une source ftp dans mandriva</title><content type='html'>Pour éditer la source de média lancer drakrpm-edit-media et cliquer sur ajouter une nouvelle source personnalisée. &lt;br /&gt;&lt;br /&gt;URL : ftp://ftp.national/linux/mandriva/dis/Mandrake/2006/i586/media/main&lt;br /&gt;&lt;br /&gt;Chemin relatif vers HDSynthesys : ../media_info/hdlist_main.cz&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3641183225167331897?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3641183225167331897/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3641183225167331897' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3641183225167331897'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3641183225167331897'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/11/configurer-une-source-ftp-dans-mandriva.html' title='Configurer une source ftp dans mandriva'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3449945659500675448</id><published>2007-11-05T07:59:00.000-08:00</published><updated>2007-11-05T08:28:31.301-08:00</updated><title type='text'>Déploiement d'un web service</title><content type='html'>Objectif du document&lt;br /&gt;&lt;br /&gt;Fournir un guide pour le déploiement d’un Web-Service une fois que la fonction est réalisée.&lt;br /&gt;&lt;br /&gt;Prérequis&lt;br /&gt;·    Eclipse 2.2 ou 2.3 (Version testée)&lt;br /&gt;·    Axis 1.3 (Version testée)&lt;br /&gt;Comment déployer sa fonction en tant que Web-Service&lt;br /&gt;Une fois le service développé, nous créons une librairie, mondispositifservice.jar. Il s’agit maintenant de la déployer sous forme de Web-service.&lt;br /&gt;&lt;br /&gt;1. Nous créons un projet Web Dynamique à l’aide de eclipse : Fichier --&gt; New …&lt;br /&gt;&lt;img src="http://lh3.google.fr/ClementSoullard/Ry8_z_RMRuI/AAAAAAAAANU/BvNjhrYnmOI/genweb01.jpg" /&gt;&lt;br /&gt;&lt;img http://lh4.google.fr/ClementSoullard/Ry8_0PRMRvI/AAAAAAAAANc/FwrsPdgE4G4/genweb02.jpg/&gt;&lt;br /&gt;&lt;br /&gt;2. On se laisse guider par l’assistant. Il faut veiller à ne pas selectionner les modules AXIS2 qui sont proposés à la fin de l’assistant (Nous n’utilisons pas AXIS2)&lt;br /&gt;&lt;br /&gt;3. Dans le repertoire WebContent/WEB-INF/lib du projet généré, nous copions les librairies&lt;br /&gt;&lt;br /&gt;·    aida-meta.jar&lt;br /&gt;·    aida-commons.jar&lt;br /&gt;·    mondispositifservice.jar&lt;br /&gt;&lt;br /&gt;4. Le Web-Service est déployé par la commande New--&gt; Web-Service&lt;br /&gt;Un assistant nous est proposé.&lt;br /&gt;&lt;img src="http://lh4.google.fr/ClementSoullard/Ry8_0PRMRwI/AAAAAAAAANk/iW-l8Jffh-4/genweb03.jpg"/&gt;&lt;br /&gt;Choisir&lt;br /&gt;·    L’implémentation du service la classe qui réalise notre fonction dans service implementation&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.google.fr/ClementSoullard/Ry8_0PRMRxI/AAAAAAAAANs/Z3cA5QgVg48/genweb04.jpg?imgmax=576"/&gt;&lt;br /&gt;·    Le project qui hébergera notre application (le service project )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dans l’écran suivant vérifier que l’affichage correspond aux méthodes que l’on souhaite rendre accessible par Web Service.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://lh4.google.fr/ClementSoullard/Ry8_0PRMRyI/AAAAAAAAAN0/wNYsZkGd3lc/genweb05.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dans l’écran suivant. Il n’est pas nécessaire d’inscrire son WEB-Service sur un UDDI.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. Enfin, pour terminer il faut affecter les bons namespaces. Un fichier généré : server-config.wsdd a été généré. Les namespaces doivent être affecté à : http://www.agriculture.gouv.fr/AIDA/2007. http://utils.commons.aida doit être remplacé  par http://www.agriculture.gouv.fr/AIDA/2007&lt;br /&gt;6. Au redémarrage du serveur. Le service devrait fonctionner, il faut pour le vérifier verifier que son WSDL utilise le bon namespace (http://www.agriculture.gouv.fr/AIDA/2007) et effectuer un test à l’aide d’un client.&lt;br /&gt;Comment tester son implémentation&lt;br /&gt;Un client correspond à la génération d’un certain nombre de fichier JAVA. Ces fichiers seront par la suite compilés et permettrons de se connecter au web service. Le processus le naturel pour générer un lient Web service est le suivant :&lt;br /&gt;&lt;br /&gt;1- Télécharger le descripteur de déploiement&lt;br /&gt;2- Générer le client à l'aide d'un assistant&lt;br /&gt;3- Tester le service&lt;br /&gt;1- Télécharger le descripteur de déploiement&lt;br /&gt;Si le serveur est un serveur axis, http://monserveur.com/axis-webapp/services donne accès à des liens vers les descripteur de déploiement. Sur le lien WSDL télécharger le descripteur de déploiement. (Lien en bleu)&lt;br /&gt;&lt;br /&gt;And now... Some Services&lt;br /&gt;·    AdminService (wsdl)&lt;br /&gt;o    AdminService&lt;br /&gt;·    Version (wsdl)&lt;br /&gt;o    getVersion&lt;br /&gt;·    AidaService (wsdl)&lt;br /&gt;o    rechercherListeDossiers&lt;br /&gt;o    detailDossier&lt;br /&gt;&lt;br /&gt;2- Générer le client de Web service à l'aide d'un assistant&lt;br /&gt;En utilisant Eclipse, la génération d'un client est très simple. Se placer dans un projet java, on générera le client dans un  projet, par exemple, ws-test&lt;br /&gt;Dans le menu Fichier --&gt; Nouveau, choisir client de Web Service, l'écran suivant apparait&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dans le second écran on renseigne l'url ou se trouve le WSDL&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Les options par défaut, génère seulement le client.&lt;br /&gt;3- Tester le service&lt;br /&gt;&lt;br /&gt;Pour se servir du service, on utilise Locator pour résoudre la localisation du service au niveau du réseau, des namespaces, puis on se sert du service comme s'il s'agissait d'une fonction tout à fait ordinaire.&lt;br /&gt;&lt;br /&gt;MyServiceLocator locator = new MyServiceLocator();&lt;br /&gt;MyService service = locator.getMyService();&lt;br /&gt;String result = service.fonction01("param1","param2");&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3449945659500675448?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3449945659500675448/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3449945659500675448' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3449945659500675448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3449945659500675448'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/11/dploiement-dun-web-service.html' title='Déploiement d&apos;un web service'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6783196215840978381</id><published>2007-10-26T02:05:00.000-07:00</published><updated>2007-10-26T08:00:48.388-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sybase'/><title type='text'>Comment décrire une table Sybase</title><content type='html'>La commande describe ne fonctionne pas sous Sybase en revanche la commande sp_help nom_de_table (nom_de_view) fonctionne.&lt;br /&gt;&lt;br /&gt;L'autre solution est d'utiliser le client de Sybase qui fournit ces informations pratiquement directement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6783196215840978381?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6783196215840978381/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6783196215840978381' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6783196215840978381'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6783196215840978381'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/10/comment-dcrire-une-table-sybase.html' title='Comment décrire une table Sybase'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-5557911183789600618</id><published>2007-10-23T06:28:00.000-07:00</published><updated>2007-11-05T07:26:07.340-08: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='jmeter'/><title type='text'>Mesure des performance d'une application WEB</title><content type='html'>Pour un sujet si complexe, il est pratiquement impossible, d'adresser toutes les problématiques dans un seul exposé. Je m'efforcerais de rester aux exigences les plus courantes que tente de vérifier une étude de performance. &lt;span style="color: rgb(0, 0, 0);"&gt;Nous nous attachons au cas d'une application WEB à visibilité grand public. &lt;/span&gt;&lt;br /&gt;&lt;h1&gt;Objectifs&lt;/h1&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Dans la plupart des cas, une étude de performance vise à ce qu'une application réponde rapidement à un utilisateur. Or cette rapidité est un critère psychologique . Un être humain fonde sa détermination de la rapidité  : A partir de la complexité qu'il suppose,  du prix qu'il accorde à son action, de son âge. C'est à dire qu'une transaction bancaire peut psychologiquement tarder plus que le visionnage d'une publicité.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Toute hypothèse sur l'utilisateur est donc vaseuse, deux utilisateurs ne font pas la même utilisation de performance, c'est pourtant par là qu'il faut commencer. Un utilisateur n'a généralement pas une utilisation prudente d'un logiciel, il vaut mieux donc supposer qu'il clique n'importe comment. &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Sur une connexion haut-débit, &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;on considère qu'un utilisateur n'attend pas si le temps de réponse est inférieur à deux secondes et l'application doit fonctionner de manière continue.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;A partir de là on détermine en gros les critères objectifs :&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Rapidité&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;2 secondes en moyenne pour que service réponde quelques soit l'action&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Charge&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;2000 visiteurs simultanés&lt;/p&gt;   &lt;p style="margin-bottom: 0cm;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Stabilité&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;Le système doit être stable&lt;/p&gt; &lt;h1&gt;Tester les performances  &lt;/h1&gt; &lt;p style="margin-bottom: 0cm;"&gt;Bien qu'une étude de performance appelle des réponses essentielement techniques, la mesure des performances d'une application ne constitue pas une fin en soi. En effet, la vitesse de traitement et l'occupation mémoire d'une application (la qualité de la programmation) ne suffit pas à mesurer la qualité dans d'une application. L'étude de la performance d'une application doit donc être menée en veillant à ne pas s'éloigner du réel. Tous les aspects techniques sont considérés en gardant à l'esprit ce fil rouge.&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;Les critères usuels sont :&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Stabilité&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Rapidité&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Capacité de tenir la charge&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;Rapidité&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;La rapidité renseigne sur la vtesse d'un traitement. C'est un critère mesurable qui doit être mis en rapport avec la capacité de charge ( elle influencera grandement ce paramètre)  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Chaque temps de réponse sera mis en relation avec une charge. L'utilisateur final est l'étalon pour la rapidité.  &lt;/p&gt;  &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Charge&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;C'est la capacité à traiter simultanément un grand nombre de requêtes. On distingue deux seuils : &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Le seuil au delà duquel le  temps de réponse devient inacceptable&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Le seuil d'écroulement&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Stabilité&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;C'est la capacité pour l'application de fonctionner longtemps sans être redémarrée. Le java, avec son garbage collector fournit de fortes garanties de stabilité. Cependant, si l'on se sert de concept un peu avancés comme les Threads, ce genre de problème peut survenir.  &lt;/p&gt;  &lt;p style="margin-bottom: 0cm;"&gt;On peut qualifier l'instabilité  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Par la charge qui provoque  l'écroulement   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Par le nombre de jours sans  redémarrage&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;h1 class="western"&gt;Moyens et condition de fonctionnement réel&lt;/h1&gt; &lt;p&gt;Un test est d'autant plus pertinent qu'il reproduit les moyens et les conditions réelles de la production.  &lt;/p&gt; &lt;p&gt;Serveur production :  &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Mémoire vive : 2 Go&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Vitesse processeurs : 1,5 GHz&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Nombre serveurs : 2   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Nombre d'applications : 4&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Niveau de log INFO&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Equilibrage de charge : OUI&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;On suppose que le débit réseau n'est pas  problématique&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;h1 class="western"&gt;Moyens et condition de fonctionnement de test de charge&lt;/h1&gt; &lt;p&gt;Pour les tests de charge, nous ne disposons pas des outils permettant de reconstituer une expérience utilisateur, nous avons quelques restrictions et nous livrant à certaines approximations :&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Nos moyens nous permettent seulement de faire le test dans un  contexte n'incluant pas les étapes d'identification. C'est  une hypothèse optimiste que de croire que l'identification ne  sera pas pénalisante, d'un autre coté, elle ne dépend  pas de l'équipe AIDA.   &lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Nous nous baserons sur la requête la plus pénalisante  pour le système, nous plaçant dans un cas passimiste.  La requête la plus pénalisante est celle qui insterroge  tous les partenaires.   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;La requête sera toujours identique, sur du HTTP,  portera toujours sur le même utilisateur et le même  dossier.   &lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;h2 class="western"&gt;Objectifs techniques&lt;/h2&gt; &lt;h2 class="western"&gt;Estimation&lt;/h2&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Nombre d'utilisateur potentiel&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;C'est le nombre total d'utilisateurs capable de se connecter sur le site.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Nombre de visiteurs simultanés&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;C'est le nombre estimé de visiteurs simultanés sur le site en période chargée&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Nombre d'actions moyenne d'un utilisateur&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;C'est le nombre de requête qu'un utilisateur est succeptible de déclencher pendant sa visite sur le site.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Site à pic de charge&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Un site à pic de charge est périodiquement plus chargé (En dehors des cycle naturel jour/nuit et hebdomadaires)&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Equlibrage de charge&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;L'équilibrage de charge intervient au niveau de l'exploitation, aussi il nous avons déjà la garantie d'avoir un système scalable.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Le temps moyen d'une session&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;C'est le temps moyen d'une session estimé. Mieux veut prévoir court.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Facteur de zapping&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Plus il est facile de se déplacer dans l'application et de déclencher des actions, plus les actions seront effectivement déclenchées. Donc un site à clics provoquent un surcroit de requêtes.  &lt;/p&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Nombre d'utilisateur potentiel : 200000&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Nombre de visiteurs simultanés : 2000&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Nombre d'actions moyenne d'un  utilisateur : 4&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Site à pic de charge :  Déclenchement ou pas de pic de charge : oui&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Le temps moyen d'une session : 5  mn   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Facteur de zapping : x 2&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;A l'aide de ces informations, on pourra se faire une idée du nombre de requêtes effectuées chaque unité de temps, cela demeure cependant indicatif.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:Courier New,monospace;"&gt; 2000 x 4 x 2 /5 = 3200 requête/mn&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;soit  3200 /60 = 53 requête/s&lt;/span&gt;&lt;/p&gt; &lt;h1 class="western"&gt;Utilisation de Jmeter&lt;/h1&gt; &lt;p&gt;Jmeter permet de lancer des requêtes http en spécifiant des contraintes temporelle (Echelon et cycles)&lt;/p&gt; &lt;h1 class="western"&gt;Scénarios&lt;/h1&gt; &lt;p&gt;On définit plusieurs scénarios de charge :  &lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Charge instantanée&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;On envoie 50 requêtes liste dossier en 1 seconde, chaque requête ne répond que lorsque l'ensemble des dossiers est rappatrié.  &lt;/p&gt;&lt;br /&gt; &lt;p style="margin-bottom: 0cm;"&gt;La requête envoyée au serveur WS est toujours la même. La réponse l'est également.&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt;Charge durant une minute&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;On envoie 3000 requêtes en 60 secondes &lt;span style="background: rgb(255, 255, 0) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;(non effectué)&lt;/span&gt;&lt;/p&gt; &lt;h1 class="western"&gt;Résultats&lt;/h1&gt; &lt;p&gt;Pour chaque résultat on présente :  &lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;p&gt;Le temps moyen qui est le temps que  met en moyenne une  requête pour répondre. Il fait la sytnhèse des  bonnes et des mauvaise expériences utilisateurs. Plus les  résultats ont une forte dispertion et plus il faut traiter  cette donnée avec circonspection.   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Le temps médian qui est le temps qu'expérimente  un utilisateur moyen. Il donne la rapidité d'une requête  pour un utilisateur faisant une expérience normale du  produit.   &lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;La déviation (Ecart-type) donne une représentation  de la dispersion des résultats. Elle donne une idée  des processus(Thread) zombies.   &lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="background: transparent none repeat scroll 0% 50%; margin-left: -1.25cm; margin-bottom: 0cm; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; page-break-before: auto;"&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;i&gt;&lt;b&gt; 15 itérations de charge instantanée 50 requêtes&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;p class="configuration"&gt;Serveur sur machine bureautique, partenaire  réels proxié&lt;/p&gt;&lt;li&gt;&lt;p&gt;Temps moyen : 18 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Temps médian : 17 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Temps médian : 18 sec&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://lh3.google.fr/ClementSoullard/Rx4YsWHLYyI/AAAAAAAAALg/H0lN2JFpXMs/50notlatence.jpg?imgmax=640" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;ul&gt;&lt;p class="configuration"&gt;Configuration : Serveur sur machine  bureautique, partenaire bouchons proxié sans latence&lt;/p&gt;&lt;li&gt;&lt;p&gt;Temps moyen : 16 secTemps moyen : 16 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Temps médian : 3,5 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p&gt;Deviation 18 sec&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;i&gt;&lt;b&gt;15 itérations de charge instantanée 100 requêtes&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;p class="configuration"&gt;Configuration : Serveur sur machine  bureautique, partenaire bouchons proxié sans latence&lt;/p&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Temps moyen : 32 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Temps median : 3,5sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Deviation : 87 sec&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://lh6.google.fr/ClementSoullard/Ry8rBvRMRsI/AAAAAAAAANI/Bv4CehKmmfk/150nolatence.png?imgmax=640" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;i&gt;&lt;b&gt;15 itérations de charge instantanée 150 requêtes&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul&gt;&lt;p class="configuration"&gt;&lt;br /&gt;Configuration : Serveur sur machine  bureautique, partenaire bouchons proxié sans latence&lt;/p&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Temps moyen : 32 sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Temps median : 3,5sec&lt;/p&gt;  &lt;/li&gt;&lt;li&gt;&lt;p style="margin-bottom: 0cm;"&gt;Deviation : 87 sec&lt;/p&gt; &lt;/li&gt;&lt;/ul&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor: pointer; width: 400px;" src="http://lh5.google.fr/ClementSoullard/Ry8rBfRMRrI/AAAAAAAAANA/zXai9JOWixc/100nolatence.png?imgmax=640" alt="" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;h2 class="western"&gt;Conclusion&lt;/h2&gt; &lt;p style="margin-bottom: 0cm;"&gt;Dans les situations ou le serveur bouchon est utilisé, ces résultats montrent que la dispersion croit avec la charge, pour autant le temps de réponse médian reste du même ordre de grandeur.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Cette dispersion peut être expliquées par un deadlock dans la partie-core (Qui pourrait être dangereux). Elle peut être également expliquée par une saturation des partenaires, comme nous n'utilisons qu'une simulation de partenaires (Et qu'il est fort probable que les ressources des partenaires ne saturent pas aussi facilement) Il faut donc continuer les test en se servant de partenaires réel plutôt que les bouchons.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Pour ce qui concerne la stabilité : plus le serveur est fragilisé, plus il se fragilise. Il faut donc éviter les zones rouges.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;Ces test mettent également en évidence qu'il est nécessaire de mesurer les performances des partenaires depuis le MAP.  &lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style="margin-bottom: 0cm;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-5557911183789600618?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/5557911183789600618/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=5557911183789600618' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5557911183789600618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/5557911183789600618'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/10/performance-dune-application.html' title='Mesure des performance d&apos;une application WEB'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-6267786333338530555</id><published>2007-10-10T08:02:00.000-07:00</published><updated>2007-12-11T00:24:23.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mandriva'/><category scheme='http://www.blogger.com/atom/ns#' term='samba'/><title type='text'>Mounting  samba file</title><content type='html'>I had some trouble performing a samba mount using Mandriva 2006&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mount -tsmbfs //10.202.57.110/clunch /mnt/calam/ -ousername=tareum &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;dmesg displayed the following error :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mount_data version 1919251317 is not supported&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I had to use the cifs  type for mounting (Probably a more modern standard for the samba filesystem)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;mount -tcifs //10.202.57.110/aidacalam /mnt/calam/ -ousername=tareum&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can now have a look in the /etc/mtab file copy/paste the following line in the /etc/fstab line to have the block mounted on startup/&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;//10.202.57.110/aidacalam /mnt/calam cifs rw,username=tridge,password=foobar 0 0&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-6267786333338530555?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/6267786333338530555/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=6267786333338530555' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6267786333338530555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/6267786333338530555'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/10/mounting-samba-file.html' title='Mounting  samba file'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3947891953117310653</id><published>2007-10-04T10:21:00.000-07:00</published><updated>2008-02-29T08:47:49.476-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='resources'/><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><category scheme='http://www.blogger.com/atom/ns#' term='profils'/><title type='text'>Bonne pratique pour gérer les environnement multiple dans maven</title><content type='html'>A chaque fois qu'un fichier représente un élément de configuration :&lt;br /&gt;&lt;br /&gt;- fichier de propriétés&lt;br /&gt;- fichier de configuration des log&lt;br /&gt;- fichier de configuration hibernate &lt;br /&gt;etc. &lt;br /&gt;&lt;br /&gt;Il doit être aisément modifiable, c'est à dire qu'il ne doit pas se trouver dans un jar mais se trouvé dans un fichier facilement modifiable. Dans une application Web on placera le fichier de log4j.properties, hibernate.cfg.xml dans le répertoire classes.  Ainsi, ces répertoire sont facilement modifiable par un intervenant qui ne connait a priori rien au fonctionnement de l'application.&lt;br /&gt;&lt;br /&gt;Quand une application Web utilise un librairie, il ne faut donc pas qu'elle contienne de ressource susceptible d'interférer avec sa propre configuration. Concrètement, il faut éviter de mettre les fichier de configuration dans les partie&lt;br /&gt;&lt;br /&gt;src/main des application et les mettre dans le repertoire test. &lt;br /&gt;&lt;br /&gt;Il arrive parfois que la configuration soit une tache complexe et qu'il ne s'agisse pas de modifier quelques lignes mais de nombreuse modifications auquels cas il est plus approprié d'effectuer une copie pure et simple des fichiers de configuration et de garder ceux-ci dans le référentiel de sources. &lt;br /&gt;&lt;br /&gt;Pour ce genre de problématique, maven a un mécanisme permettant de constituer un package et sa configuration à partir d'un ensemble de fichiers groupé dans un répertoire. Le mécanisme utilisé s'appelle profil. L'utilisation d'un profil conditionne le comportement de maven, il est selectionné par maven en tapant la commande -P &lt;br /&gt;&lt;br /&gt;Supposons qu'on ai 4 environnements :&lt;br /&gt;&lt;br /&gt;- Développement&lt;br /&gt;- Test&lt;br /&gt;- Recette&lt;br /&gt;- Production&lt;br /&gt;&lt;br /&gt;Pour créer un package, on spécifie le profil utilisé. Par exemple mvn -Ptest &lt;br /&gt;&lt;br /&gt;Pour gérer ces différents environnements, on créé autant de profils dans le fichier settings.xml qui se trouve dans $HOME/.m2&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;settings&amp;gt;&lt;br /&gt;[...]&lt;br /&gt;   &amp;lt;profiles&amp;gt;&lt;br /&gt;      &amp;lt;profile&amp;gt;&lt;br /&gt;          &amp;lt;id&amp;gt;dev&amp;lt;/id&amp;gt;&lt;br /&gt;          &amp;lt;properties&amp;gt;&lt;br /&gt;              &amp;lt;mode&amp;gt;dev&amp;lt;/mode&amp;gt;&lt;br /&gt;          &amp;lt;/properties&amp;gt;&lt;br /&gt;      &amp;lt;/profile&amp;gt;&lt;br /&gt;      &amp;lt;profile&amp;gt;&lt;br /&gt;          &amp;lt;id&amp;gt;recette&amp;lt;/id&amp;gt;&lt;br /&gt;          &amp;lt;properties&amp;gt;&lt;br /&gt;              &amp;lt;mode&amp;gt;recette&amp;lt;/mode&amp;gt;&lt;br /&gt;          &amp;lt;/properties&amp;gt;&lt;br /&gt;      &amp;lt;/profile&amp;gt;&lt;br /&gt;      &amp;lt;profile&amp;gt;&lt;br /&gt;          &amp;lt;id&amp;gt;test&amp;lt;/id&amp;gt;&lt;br /&gt;          &amp;lt;properties&amp;gt;&lt;br /&gt;              &amp;lt;mode&amp;gt;test&amp;lt;/mode&amp;gt;&lt;br /&gt;          &amp;lt;/properties&amp;gt;&lt;br /&gt;      &amp;lt;/profile&amp;gt;&lt;br /&gt;      &amp;lt;profile&amp;gt;&lt;br /&gt;          &amp;lt;id&amp;gt;prod&amp;lt;/id&amp;gt;&lt;br /&gt;          &amp;lt;properties&amp;gt;&lt;br /&gt;              &amp;lt;mode&amp;gt;prod&amp;lt;/mode&amp;gt;&lt;br /&gt;          &amp;lt;/properties&amp;gt;&lt;br /&gt;      &amp;lt;/profile&amp;gt;&lt;br /&gt;  &amp;lt;/profiles&amp;gt;&lt;br /&gt;  &amp;lt;activeProfiles&amp;gt;&lt;br /&gt;      &amp;lt;activeProfile&amp;gt;dev&amp;lt;/activeProfile&amp;gt;&lt;br /&gt;  &amp;lt;/activeProfiles&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;&amp;lt;/settings&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ainsi, chaque fois que l'on tape mvn -Pprod on utilise le profil de production. La configuration des plugin et un ensemble de propriétés d'éxécution sont définies à ce moment. Dans cet exemple on ne configure que les propriétés, ainsi la propriété mode est définie à dev quand on est dans l'environnement de développement.&lt;br /&gt;&lt;br /&gt;activeProfile permet de déterminer le profil par défaut (dev)&lt;br /&gt;&lt;br /&gt;Pour avoir des ressources différenciées, on peut se servir du filtering maven. Le filtering effectue des substitution lors des copies de ressources. Toutefois, il est plus commode lorsque les modifications sont importantes et portent sur des fichiers en entier d'avoir recours à des répertoires différentiés.&lt;br /&gt;Ainsi on a la structure de répertoire suivante :&lt;br /&gt;&lt;br /&gt;- main/resources/resources qui contient les resources communes&lt;br /&gt;&lt;br /&gt;et&lt;br /&gt;&lt;br /&gt;- main/resources/dev&lt;br /&gt;- main/resources/test&lt;br /&gt;- main/resources/recette&lt;br /&gt;- main/resources/prod&lt;br /&gt;&lt;br /&gt;qui contiennent les ressources spécifiques à des environnements.&lt;br /&gt;&lt;br /&gt;On modifie le descripteur de projet en modifiantle pom.xml&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;   &amp;lt;build&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;  &amp;lt;resources&amp;gt;&lt;br /&gt;  &amp;lt;resource&amp;gt;&lt;br /&gt;  &amp;lt;directory&amp;gt;src/main/resources&amp;lt;/directory&amp;gt;&lt;br /&gt;  &amp;lt;/resource&amp;gt;&lt;br /&gt;  &amp;lt;resource&amp;gt;&lt;br /&gt;  &amp;lt;directory&amp;gt;src/main/${mode}&amp;lt;/directory&amp;gt;&lt;br /&gt;  &amp;lt;/resource&amp;gt;&lt;br /&gt;  &amp;lt;/resources&amp;gt;&lt;br /&gt;  [...]&lt;br /&gt;&amp;lt;build&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3947891953117310653?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3947891953117310653/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3947891953117310653' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3947891953117310653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3947891953117310653'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/10/comment-grer-diffrents-environnements.html' title='Bonne pratique pour gérer les environnement multiple dans maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-2186565750723518191</id><published>2007-10-03T22:59:00.000-07:00</published><updated>2007-10-03T23:00:16.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web-service'/><title type='text'>La génération d'un client Web-Service</title><content type='html'>La génération d'un client est en réalité la génération d'un certain nombre de fichier JAVA, ces fichiers seront par la suite compilé et permettrons de se connecter de manière simple au web service. Le processus le naturel pour générer un lient Web service est le suivant :&lt;br /&gt;&lt;br /&gt;1- Télécharger le descripteur de déploiement&lt;br /&gt;2- Générer le client à l'aide d'un assistant&lt;br /&gt;3- Tester le service&lt;br /&gt;&lt;h2&gt;1- Télécharger le descripteur de déploiement&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Si le serveur est un serveur axis, http://monserveur.com/axis-webaapp/services donne accès à des liens vers les descripteur de déploiement. Sur le lien WSDL télécharger le descripteur de déploiement.&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;&lt;h2&gt;And now... Some Services&lt;/h2&gt; &lt;ul&gt;&lt;li&gt;AdminService &lt;a href="http://10.202.57.28:8080/cnasea/services/AdminService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;AdminService &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Version &lt;a href="http://10.202.57.28:8080/cnasea/services/Version?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;getVersion &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;AidaService &lt;a href="http://10.202.57.28:8080/cnasea/services/AidaService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;rechercherListeDossiers &lt;/li&gt;&lt;li&gt;detailDossier &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;QosService &lt;a href="http://10.202.57.28:8080/cnasea/services/QosService?wsdl"&gt;&lt;i&gt;(wsdl)&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;echo &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;&lt;hr /&gt;&lt;h2&gt;2- Générer le client de Web service à l'aide d'un assistant&lt;/h2&gt;En utilisant Eclipse, la génération d'un client est très simple.&lt;br /&gt;Se placer dans un projet java, on générera le client dans ce projet, par exemple, ws-test&lt;br /&gt;&lt;br /&gt;Dans le menu Fichier --&gt; Nouveau, choisir client de Web Service, on aboutit à l'écran suivant :&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_T_Hxq71ibbo/RwNa9mHLYuI/AAAAAAAAAKE/qHVNHo-9K4E/s1600-h/genweb01.jpg"&gt;&lt;img style="cursor: pointer;" src="http://3.bp.blogspot.com/_T_Hxq71ibbo/RwNa9mHLYuI/AAAAAAAAAKE/qHVNHo-9K4E/s400/genweb01.jpg" alt="" id="BLOGGER_PHOTO_ID_5117033615872189154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Dans le second écran on renseigne l'url ou se trouve le WSDL&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_T_Hxq71ibbo/RwNiEWHLYvI/AAAAAAAAAKM/iizfmMdkASw/s1600-h/webserv02.jpg"&gt;&lt;img style="cursor: pointer;" src="http://2.bp.blogspot.com/_T_Hxq71ibbo/RwNiEWHLYvI/AAAAAAAAAKM/iizfmMdkASw/s400/webserv02.jpg" alt="" id="BLOGGER_PHOTO_ID_5117041428417700594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Les options par défaut, génère seulement le client.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;3- Tester le service &lt;/h2&gt;&lt;br /&gt;Pour se servir du service, on utilise Locator pour résoudre la localisation du service au niveau du réseau, des namespaces, puis on se sert du service comme s'il s'agissait d'une fonction tout à fait ordinaire.&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;MyServiceLocator locator = new MyServiceLocator();&lt;br /&gt;MyService service = locator.getMyService();&lt;br /&gt;String result = service.fonction01("param1","param2");&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-2186565750723518191?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/2186565750723518191/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=2186565750723518191' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2186565750723518191'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/2186565750723518191'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/10/la-gnration-dun-client-web-service.html' title='La génération d&apos;un client Web-Service'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_T_Hxq71ibbo/RwNa9mHLYuI/AAAAAAAAAKE/qHVNHo-9K4E/s72-c/genweb01.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3822177819466484821</id><published>2007-09-27T05:06:00.000-07:00</published><updated>2008-11-07T07:58:06.339-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='xsd'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='validation'/><title type='text'>Valider un schéma XSD en java</title><content type='html'>La validation d'un schéma XSD permet de vérifier qu'un document est bien conforme. Cette action se fait en même temps que le parsing, pour cela il est nécessaire de mettre dans la première ligne du xml le schéma que doit vérifier les données XML.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre face="Andale Mono,Lucida Console,Monaco,fixed,monospace" size="12px" style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); line-height: 14px; width: 100%;"&gt;&lt;code&gt;&amp;lt;dossier xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&lt;br /&gt;xsi:noNamespaceSchemaLocation=&lt;br /&gt;"http://mydomain.org/schema/dossier.xsd"&amp;gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre face="Andale Mono,Lucida Console,Monaco,fixed,monospace" size="12px" style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); line-height: 14px; width: 100%;"&gt;&lt;code&gt;DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();&lt;br /&gt;dbf.setIgnoringComments(true);&lt;br /&gt;dbf.setNamespaceAware(true);&lt;br /&gt;dbf.setValidating(true);&lt;br /&gt;dbf.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);&lt;br /&gt;try {&lt;br /&gt;  documentBuilder = dbf.newDocumentBuilder();&lt;br /&gt;  documentBuilder.setErrorHandler(new DossierErrorHandler());&lt;br /&gt;} catch (ParserConfigurationException e) {&lt;br /&gt;e.printStackTrace();&lt;br /&gt;}&lt;br /&gt;ByteArrayInputStream bif = new ByteArrayInputStream(xml.getBytes());&lt;br /&gt;documentBuilder.parse(bif);&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il est également possible de forcer le schéma&lt;br /&gt;par&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;dbf.setAttribute(JAXP_SCHEMA_SOURCE, &lt;span style="color: rgb(0, 0, 255);"&gt;new&lt;/span&gt; File(xsdFile));&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ou bien par une ressource :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;InputStream schemaIs = getClass().getResourceAsStream(&amp;quot;/schema.xsd&amp;quot;);&lt;br /&gt;sp.setProperty(JAXP_SCHEMA_SOURCE, schemaIs);&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3822177819466484821?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3822177819466484821/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3822177819466484821' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3822177819466484821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3822177819466484821'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/09/valider-un-schma-xsd-en-java.html' title='Valider un schéma XSD en java'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3615509136616025071</id><published>2007-09-27T02:15:00.000-07:00</published><updated>2007-09-27T04:13:11.803-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maven'/><title type='text'>Utilisation des filters dans maven</title><content type='html'>Les filter de maven permettent de copier des resources en modifiant le contenu défini comme étant filtré. Ils sont utiles pour fonctionner dans différent environnement. Notamment dans les fichier de propriétés qui définissent des propriétés pour passer les test unitaires.&lt;br /&gt;&lt;br /&gt;Supposons qu'il soit nécessaire de configurer un chemin d'un fichier de log différemment suivant que l'on travaille sur un station LINUX ou sur son poste de développement Windows.&lt;br /&gt;&lt;br /&gt;Ce fichier est défini dans un fichier de src/main/resources/log-aida.properties  &lt;br /&gt;&lt;br /&gt;son contenu est :&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;aida.logFile=${fileLog}&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Il faut définir dans le fichier pom.xml que ces resources sont filtrées&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;&amp;lt;build&amp;gt;&lt;br /&gt;  &amp;lt;resources&amp;gt;&lt;br /&gt;      &amp;lt;resource&amp;gt;&lt;br /&gt;          &amp;lt;directory&amp;gt;src/main/resources&amp;lt;/directory&amp;gt;&lt;br /&gt;          &amp;lt;filtering&amp;gt;true&amp;lt;/filtering&amp;gt;&lt;br /&gt;      &amp;lt;/resource&amp;gt;&lt;br /&gt;   &amp;lt;/resources&amp;gt;&lt;br /&gt;[...]&lt;br /&gt;&amp;lt;/build&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Dans le fichier ~/.m2/settings on défini cette propriété&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;   &amp;lt;profiles&amp;gt;&lt;br /&gt;       &amp;lt;profile&amp;gt;&lt;br /&gt;           &amp;lt;id&amp;gt;unix&amp;lt;/id&amp;gt;&lt;br /&gt;           &amp;lt;properties&amp;gt;&lt;br /&gt;               &amp;lt;filelog&amp;gt;/tmp/log.prout&amp;lt;/filelog&amp;gt;&lt;br /&gt;           &amp;lt;/properties&amp;gt;&lt;br /&gt;       &amp;lt;/profile&amp;gt;&lt;br /&gt;   &amp;lt;/profiles&amp;gt;&lt;br /&gt;   &amp;lt;activeprofiles&amp;gt;&lt;br /&gt;       &amp;lt;activeprofile&amp;gt;unix&amp;lt;/activeprofile&amp;gt;&lt;br /&gt;   &amp;lt;/activeprofiles&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;Dès lors quand on tape mvn resources:resources le fichier &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:times new roman;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:times new roman;"&gt;src/main/resources/log-aida.properties est copié vers target/classes/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-family:times new roman;"&gt;log-aida.properties et son contenu est&lt;br /&gt;&lt;br /&gt;&lt;pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee;font-size: 12px;border: 1px dashed #999999;line-height: 14px;padding: 5px; overflow: auto; width: 100%"&gt;&lt;code&gt;aida.logFile=/tmp/log.prout&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3615509136616025071?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3615509136616025071/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3615509136616025071' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3615509136616025071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3615509136616025071'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/09/utilisation-des-filters-dans-maven.html' title='Utilisation des filters dans maven'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-208148979262611725</id><published>2007-09-26T07:47:00.000-07:00</published><updated>2007-10-26T05:48:33.147-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='web-service'/><title type='text'>Les Web Services</title><content type='html'>&lt;h2&gt;Généralité&lt;/h2&gt; &lt;p&gt;Ces dernière années ont vus l'émergence d'un nouveau    type d'appel distant s'appuyant sur le protocole HTTP : Les &lt;span style="font-style: italic;"&gt;Web Services&lt;/span&gt; . Ils permettent de réaliser des appels distants de manière standard et simple.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Bien que, ces aspects sont abordés par CORBA et RMI, la complexité de ces protocoles les a réservés à des applications très techniques. Les Web Services, en revanche sont facile à mettre en oeuvre . &lt;/p&gt; &lt;p&gt;Les services Web permettent de traiter les requêtes synchrones. Fonctionnement, un Web Service est comme un Call mais ses fonctions de sérialisation et de transport sont réalisées à    l'aide des protocole HTTP et SOAP et non plus en utilisant une méthode propriétaire. Initié par Microsoft, SOAP (Simple Object Access Protocol) fournissait un cadre pour une généraliser les opérations de Call en utilisant le XML. Le Web Service ajoute les bénéfices du HTTP à SOAP. Le    Web Service possède donc les qualités ces protocoles.&lt;/p&gt; &lt;ul&gt;&lt;li&gt; La robustesse de HTTP&lt;/li&gt;&lt;li&gt; L’interopérabilité du XML&lt;/li&gt;&lt;li&gt;Les réalisations de Web Service sont indépendantes du système      d'exploitation et du langage de programmation utilisé.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;A l'aide de son langage de description (WSDL), il permet de faciliter les échanges    de données. Il permet également la communication normalisée    entre les applications au sein des entreprises et entre les entreprises. Le langage    de description de WebService : le WSDL (Web Service Deploiement Langage) permet    de décrire un Web Service.&lt;/p&gt;&lt;p&gt;Il convient de bien comprendre les atouts qui ont fait le succès des    Services Web et pour savoir les utiliser à bon escient. &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Ils s’appuient sur le protocole le plus robuste de tous les réseau      : HTTP&lt;/li&gt;&lt;li&gt;Ils ne sont pas propre à un langage en particulier et sont formalisé      par un standard&lt;/li&gt;&lt;li&gt; Ils proposent un langage de description de service (Descripteur simples      à comprendre)&lt;/li&gt;&lt;li&gt;Ils sont à la mode et dispose donc d'un support important&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h4&gt;Prérequis technique&lt;/h4&gt; &lt;p&gt;Pour utiliser des services Web, il faut d'abord un serveur d'application et d'un moteur de Web Service.  En java, les implémentations incontournables sont&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://ws.apache.org/axis"&gt;AXIS &lt;/a&gt;implémentation libre sous licence apache&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Websphere&lt;br /&gt;&lt;/li&gt;&lt;li&gt;WebLogic&lt;/li&gt;&lt;/ul&gt; &lt;p&gt; Le rôle de ce composant est de répondre au requêtes HTTP en les transformant en appel d'un efonction JAVA.&lt;/p&gt; &lt;p&gt;Dans le cadre d’un développement de Service-Web il est recommandé de n’avoir aucune interface visuelle    dans la Webapp. &lt;/p&gt; &lt;h3&gt;Utilisation des service Web&lt;/h3&gt; &lt;p&gt;Le « Service Web » est utilisé pour retourner le résultat    d'une fonction de traitement d'un objet Métier. Concrètement,    vous n'aurez pas à modifier vos anciens développements pour transformer    votre classe métier en service Web car vous utiliserez les Web Services    comme une surcouche. Cela permet d’éviter les re-développement    de l'application.&lt;/p&gt; &lt;p&gt;Une bonne pratique consiste à ne pas appeler directement les classes    métiers mais en passant par des «Classes Façades »    qui permettent de définir clairement quelles sont les méthodes    de accessibles par le Web. &lt;/p&gt;&lt;br /&gt;&lt;h4&gt;Avantages&lt;/h4&gt; &lt;p&gt;Dans les systèmes d'information, il est fréquent de voir des    réseaux se modifier, soit du point de vue des machines soit du point    de l'architecture. Le service Web est alors idéal car il ne nécéssite    que peut de développement pour être mis en place autour d'une ancienne    architecture et garanti un agencement très souple de l'architecture.  &lt;/p&gt; &lt;p&gt;Bien souvent, vous mettrez en comparaison les Web Service avec des appels RMI    car la fonction première du RMI (Remote Method Invocation) est la même    que les services WEB. &lt;/p&gt; &lt;table border="1" width="82%"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td width="48%"&gt;&lt;div align="center"&gt;&lt;strong&gt;RMI&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;     &lt;td width="52%"&gt;&lt;div align="center"&gt;&lt;strong&gt;Web Service&lt;/strong&gt;&lt;/div&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Faible interropérabilité&lt;/td&gt;     &lt;td&gt;Forte interropérabilité&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Cout de traitement 2/3 moins élevé que le Web Service&lt;/td&gt;     &lt;td&gt;Cout processeur élevé&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Transmet l'état de l'objet&lt;/td&gt;     &lt;td&gt;L'état de l'objets doit être transmis en paramètre.      &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Complexe à mettre en ouvre&lt;/td&gt;     &lt;td&gt;Simple à mettre en oeuvre&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Protocole nécessitant une forte cohérence des unités        de traitement entre elle. (Quand un composant ne fonctionne plus plus rien        ne fonctionne)&lt;/td&gt;     &lt;td&gt;Protocole robuste. &lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;Difficile à optimiser &lt;/td&gt;     &lt;td&gt;Plus simple à optimiser. &lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Dans les pages précédentes j'ai souvent affirmé que la    performance d'une méthode dépendait de l'intelligence de la programmation.    Il en va de même pour les services Web, même s'ils sont réellement    plus coûteux que des appels RMI, il sont plus simples à étudier    et donc à optimiser. &lt;/p&gt; &lt;p&gt;Si vos machines ne se trouvent pas dans un même endroit, il n'est pas    nécessaire de se poser de question c'est le Web Service qu'il faudra    choisir. Dans le cas contraire, pour contrebalancer le couts des appels au Web    Service il faut tout simplement diminuer le nombre des appels et augmenter la    granularité. &lt;/p&gt; &lt;p&gt;En un mot, toute la richesse du Web Service réside dans sa simplicité    et son interopérabilité. Ces qualités doivent être    préservées. &lt;/p&gt; &lt;h3&gt;Ce que ne sont pas les Web Services / Inconvénients&lt;/h3&gt; &lt;p&gt; Les Web Services ne sont pas une méthodologie de développement    de services utilisée dans le Web. En clair, ce n’est pas parce    que votre service est utilisé dans une page Web qu’il doit utiliser    un Web Service. &lt;/p&gt; &lt;p&gt;En outre, les services Web ne sont pas appropriés pour tous les types    de traitements.Ils ne concernent qu’une sous classe de service (Qu’on    appelle les services sans état – stateless ) :&lt;/p&gt; &lt;ul&gt;&lt;li&gt; Ne les utilisez pas pour des processus asynchrones.&lt;/li&gt;&lt;li&gt; Ne les utilisez pas pour des fonctions qui doivent être fréquemment      appelées &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Enfin, il faut signaler que les Web Services sont à la mode et plus    ou moins succeptible d'être assaisonés à toutes les sauces.    A vous de voir...&lt;/p&gt; &lt;h3&gt;Le plus simple des services Web&lt;/h3&gt; &lt;p&gt;Le plus simple des services web est une simple classe JAVA que l'on utilise    avec l'extension JWS (Java Web Service) et qui se place dans un repertoire de    la WebApp. On peut alors directement appeler les service en question par un    Call. Vous programmer donc une fonction Web de la même manière    qu'une JSP. Le fin du fin étant qu'elle peut être compilée    à la volée.&lt;/p&gt; &lt;h2&gt;Architecture&lt;/h2&gt; &lt;h3&gt;L'architecture des applications&lt;/h3&gt; &lt;p&gt;Par rapport aux applications standard l'architecture d'une service web est    un petit peu différente, en effet, il est possible de déployer    un service web unitairement. Par conséquent il est envisagable de n'avoir    qu'un seul moteur de service Web. &lt;/p&gt; &lt;p&gt;Supposons que vous ayez deux applications Web : une application de facturation    et une application pour les payes. Ces WS sont appeléspar une troisième    application extérieure. La première tendance sera de rajouter    à chaque application un moteur de service web. Cette solution n'est pas    mauvaise, toutefois elle presente l'inconvénient de caler le cycle de    vie de l'application de Service Web sur le cycle de vie de l'application Web    IHM. Généralement les services Web sont appelés à    partir de traitements batch. Ceci a pour conséquence de rendre interdépendantes    au panne et maintenance l'application WebService de l'application IHM. Il vous    faudra donc faire un arbitrage entre le degré d'interconnexion entre    le service Web et l'application et la tolérance au pannes que vous souhaitez    assurer.&lt;/p&gt; &lt;p&gt;Ces trois possibilités sont détaillées dans le schéma    ci dessous.Les grand rectangles représentent les application.&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/IHMWS2.gif" height="187" width="170" /&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/IHMWS3.gif" height="192" width="192" /&gt;&lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/IHMWS1.gif" height="206" width="277" /&gt;&lt;/p&gt; &lt;h3&gt;La mécanique interne d’un service Web&lt;/h3&gt; &lt;p&gt;Pour utiliser un service Web il faut réaliser les 5 couches techniques    que l'on voit sur le dessin ci dessous. Nous n'évoquerons pas la partie    Métier du coté du serveur car elle est complètement dépendante    de la problématique. &lt;/p&gt; &lt;p align="center"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/webservice2.png" height="129" width="432" /&gt;&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;strong&gt;Configurer le dispatcher : &lt;/strong&gt;C'est ici que nous décrivons      notre service Web à partir du langage de description de service web      WSDL. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Couche de Médiation : &lt;/strong&gt;Elle nous permet d'écrire      notre requête directement à partir du code JAVA sans avoir une      seule ligne de XML à taper. Ces médiateurs sont générés      automatiquement à partir du fichier WSDD.Nous le verrons dans le chapitre      suivant &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Les façades :&lt;/strong&gt; Il s'agit de l'opération qui      consiste à utiliser les classes métier. Dans les facades on      doit gérer les instanciations des classes métier. &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Préparer votre classe métier&lt;/h3&gt; &lt;p&gt;Vous avez le choix dans les réponses que le web service vous retournera    après son appel, ce peut être des type simples comme int ou double,    mais le plus souvent vous souhaiterez faire transiter des type structurés    (des beans). Cependant, les web service ne permettent pas de sérialiser    et de désérialiser des types aussi complexes que l'on pourrait    le souhaiter. Par exemple les interfaces java.util.Set ne sont pas sérialisables    dans les web service et il est nécessaire de passer par une étape    intermédiaire.&lt;/p&gt; &lt;p&gt;Lorsque vous créez votre web service à partir d'une classe métier,    il vaut mieux faire intervenir une classe façade qui au lieu de retourner    des beans complexe qui intègre de la logique métier ne retournera    que des beans &lt;em&gt;stricto senso&lt;/em&gt; qui seront des copies de vos bean métiers    qui leur enlève le superflux.&lt;/p&gt; &lt;p&gt;On a donc trois opérations pour créer notre façade :&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Créer des beans de retour allégés&lt;/li&gt;&lt;li&gt;Créer des beans de paramètres allégés&lt;/li&gt;&lt;li&gt;Créer la méthode façade acceptant ces beans&lt;/li&gt;&lt;/ul&gt; &lt;p align="center"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/facade.png" height="266" width="457" /&gt;&lt;/p&gt; &lt;p&gt;Les utilitaires vont générer un WSDL qui comportera les informations    qui permettront d'enrichir le bean des méthodes qui permettront la sérialisation.    Il existe deux méthodes pour enrichir le bean, soit on utilise des classes    qui manipuleront le bean pour le remplir, c'est cette méthode qui est    retenue par IBM, soit le code du bean est modifié, c'est cette philosophie    qui est utilisée par Axis. &lt;/p&gt; &lt;h3&gt;Création d'un fichier WSDL à partir d'une classe JAVA&lt;/h3&gt; &lt;p&gt;Une fois que notre service est isolé à l'aide des façade,    il est temps de créer le descripteur de Web Service. A partir de ce descripteur,    nous allons enrichir le bean pour le rendre serialisable. &lt;/p&gt; &lt;h4&gt;WSAD&lt;/h4&gt; &lt;p&gt;Puis, sous WSAD c'est très simple, il suffit de se servir de l'assistant    et de se laisser guider. &lt;/p&gt; &lt;p&gt;Dans cet environnement, les classes de médiation sont appelée    proxy. Vous devez choisir votre implémentation, selectionner la classe    que vous souhaitez transformer en WebService. Attention, dans les premières    versions de WSAD, ce n'est pas très fiable.&lt;/p&gt; &lt;h4&gt;Axis et Eclipse&lt;/h4&gt; &lt;p&gt;Axis nous fournit des utilitaires qui permettent de générer le    WSDL. &lt;/p&gt; &lt;p class="code"&gt;% java org.apache.axis.wsdl.Java2WSDL -o wp.wsdl -l"http://localhost:8080/axis/services/WidgetPrice"&lt;br /&gt;-n "urn:Example6" -p"samples.userguide.example6" "urn:Example6"    samples.userguide.example6.WidgetPrice&lt;/p&gt; où  &lt;ul&gt;&lt;li&gt; -o indique le nom du fichier de sortie&lt;/li&gt;&lt;li&gt; -l indique l'endroit ou est rendu le service ( Notez qu'à l'interieur      d'un web service nous avons des information qui sont propore au serveur. &lt;/li&gt;&lt;li&gt;-n est l'espace de nommage du WSDL cible&lt;/li&gt;&lt;li&gt; -p indicates a mapping from the package to a namespace. There may be multiple      mappings.&lt;br /&gt; the class specified contains the interface of the webservice.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Nous générons un fichier WSDL qui décrit la signature    de la méthode ainsi que le serveur qui rend ce service. En parcourant    ce fichier on voit qu'il contient les informations &lt;/p&gt; &lt;ul&gt;&lt;li&gt;La première partie types contient la description des Types (Bean      de paramètre et de résultats qui seront utilisés dans      notre WebService. &lt;/li&gt;&lt;li&gt;La deuxième partie comporte la structure des messages.&lt;/li&gt;&lt;li&gt;La troisième partie comporte les bindings.Qui représente les      fonctions accessible par notre service.&lt;/li&gt;&lt;li&gt;La quatrième partie nous présente la liste des services chaque      service est rattaché à une URL. &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Appel de Web Service&lt;/h3&gt; &lt;p&gt; Nous avons deux possibilités pour tester un service web que nous avons    déployé sur le serveur : &lt;/p&gt; &lt;ul&gt;&lt;li&gt; Utiliser le client de test fourni par WSAD et accessible par un click droit      sur un WSDL &lt;/li&gt;&lt;li&gt;Générer automatiquement les classes de proxy à partir      du WSDL et les utiliser &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;WSAD propose un assistant pour vous aider à construire des clients de    WebService à partir de&lt;br /&gt;Descripteurs de Web Service (Fichier aux extensions .wsdl ). Le WSDL comprend    des informations de : &lt;/p&gt; &lt;ul&gt;&lt;li&gt;Définition de Schéma de message. &lt;/li&gt;&lt;li&gt;Point d’appel (EndPoint) &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Le produit de cette opération est une série de classes qui vous    permettrons d’appeler les services Web et de reconstruire un objet à    partir d’un flux. &lt;/p&gt; &lt;p&gt;Penser au moment de livrer le wsdl à remplacer l’adresse ‘localhost    :9080’ par le nom ou l’adresse IP du serveur sur lequel le service    est déployé.&lt;br /&gt;&lt;/p&gt; &lt;h3&gt;La génération des classes de médiation &lt;/h3&gt; &lt;p class="definition"&gt;Vocabulaire :&lt;/p&gt; &lt;p&gt;Binding désigne en anglais un lien entre deux choses, c'est précisement    ce qu'il fait : Il vous permet de relier votre code java au web service en ignorant    le fonctionnement d'une web service. C'est souvent bien utile. En pratique on    se sert pratiquement toujours des bindings. &lt;/p&gt; &lt;p&gt;Les binding sont générés en même temps que sont    généré vos bean enrichis.Alors utilisez les !&lt;/p&gt; &lt;p class="definition"&gt;Cas d'école :&lt;/p&gt; &lt;p&gt;Etudions le descripteur de déploiement des WebServices fournis par google    : &lt;a href="http://www.clementsoullard.com/persoclement/java/GoogleSearch.wsdl"&gt;GoogleSearch.wsdl&lt;/a&gt;. Nous y voyons le schéma    du Web Service. A partir de ce schéma, il nous est possible de générer    les classes qui permettrons d'appeler ce service sans que jamais nous n'ayons    besoin de coder nous même les fonctions d'appel. Il faut comprendre que    les bean enrichis doivent être présent non seulement du coté    serveur mais également du coté client. &lt;/p&gt; &lt;p&gt;Voici la ligne de commande utilisée pour axis&lt;/p&gt; &lt;p class="code"&gt;java org.apache.axis.wsdl.WSDL2Java -o src -d Session -s -S true    -Nurn:Matrix matrix.ws wp.wsdl&lt;/p&gt; &lt;h3&gt;Déploiement&lt;/h3&gt; &lt;p&gt;Il nous reste ensuite à générer les fichiers de déploiement,    ces fichiers seront utiles pour informer le dispatcher des services qu'il doit    rendre. C'est le seul lien qui exite entre la classe JAVA que vous avez créer    et votre dipatcher de requête. Sans le savoir vous les avez déjà    générés, ce sont les fichiers deploy.wsdl et undeploy.wsdl    qui se trouvent au même endroit que vos dindings.&lt;/p&gt; &lt;h3&gt;Table d’association des type JAVA-&gt;SOAP&lt;/h3&gt; &lt;p&gt; Vous pouvez vous servir de ce tableau pour comprendre ce qui est décrit    par votre WSDL.&lt;/p&gt; &lt;table border="0" width="50%"&gt;   &lt;tbody&gt;&lt;tr&gt;      &lt;td&gt;&lt;p&gt;xsd :base64Binary &lt;/p&gt;&lt;/td&gt;     &lt;td&gt;byte[]&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:boolean &lt;/td&gt;     &lt;td&gt;boolean&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:byte &lt;/td&gt;     &lt;td&gt;byte&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:dateTime &lt;/td&gt;     &lt;td&gt;java.util.Calendar&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:decimal &lt;/td&gt;     &lt;td&gt;java.math.BigDecimal&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:double &lt;/td&gt;     &lt;td&gt;double&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:float &lt;/td&gt;     &lt;td&gt;float&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:hexBinary &lt;/td&gt;     &lt;td&gt;byte[]&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:int&lt;/td&gt;     &lt;td&gt;int&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:integer&lt;/td&gt;     &lt;td&gt;java.math.BigInteger&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:long&lt;/td&gt;     &lt;td&gt;long&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:QName&lt;/td&gt;     &lt;td&gt;javax.xml.namespace.QName&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:short&lt;/td&gt;     &lt;td&gt;short&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;      &lt;td&gt;xsd:string&lt;/td&gt;     &lt;td&gt;java.lang.String&lt;/td&gt;   &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;h3&gt;Et l'interropérabilité ?&lt;/h3&gt; &lt;p&gt;Dans certaine entreprise des petites applications ont parfois des besoins d'appeler    des services qui sont déjà disponibles sur d'autre serveurs. Les    WS seront intéressant pour faire communiquer une application PHP et JAVA.  &lt;/p&gt; &lt;ul&gt;&lt;li&gt;JAVA &lt;/li&gt;&lt;li&gt;C++&lt;/li&gt;&lt;li&gt;Perl / Python etc.&lt;/li&gt;&lt;li&gt;Rebol&lt;/li&gt;&lt;li&gt;PHP&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-208148979262611725?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/208148979262611725/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=208148979262611725' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/208148979262611725'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/208148979262611725'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/09/les-web-services.html' title='Les Web Services'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-3051901551170857138</id><published>2007-09-25T04:36:00.000-07:00</published><updated>2007-09-27T12:06:44.995-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Le langage JAVA</title><content type='html'>&lt;h3&gt;Les interfaces&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Une  interface possède en Java&lt;/p&gt; &lt;ul&gt;&lt;li&gt; Un nom&lt;/li&gt;&lt;li&gt;Un package &lt;/li&gt;&lt;li&gt;Des  méthodes&lt;/li&gt;&lt;/ul&gt; &lt;p class="exemplelibelle"&gt;Exemple de code :&lt;/p&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;package mypackage;&lt;br /&gt;&lt;br /&gt;interface Voiture{&lt;br /&gt;accelere();&lt;br /&gt;freine();&lt;br /&gt;tourneLeVolant(float degres);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Les classes&lt;/h3&gt; &lt;p&gt;La classe est l'un des élément de base de java. Une  classe d'objets ou classe doit avoir :&lt;/p&gt; &lt;ul&gt;&lt;li&gt; Un nom&lt;/li&gt;&lt;li&gt;Un package  &lt;/li&gt;&lt;li&gt;Des attributs &lt;/li&gt;&lt;li&gt;Des méthodes&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Voici une  définition de classe :&lt;/p&gt; &lt;p class="exemplelibelle"&gt;Exemple de code :&lt;/p&gt;&lt;br /&gt;package mypackage;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;&lt;br /&gt;class Client {&lt;br /&gt;String nom;&lt;br /&gt;String prenom;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;h3&gt;Les relations entre les classes&lt;/h3&gt; &lt;p&gt;On ne  peut dériver un classe que d'une seule classe en Java, c'est une des limitation  de Java savament désignée par : Il n'est pas possible de faire du polymorphisme  en Java. (Ca fait bien ! )&lt;/p&gt; &lt;p&gt;Voici une définition de classe qui dérive de  la classe client. La dérivation s'écrit à l'aide du mot clé &lt;span class="motclef"&gt;extends&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;package mypackage;&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px dashed rgb(153, 153, 153); padding: 5px; overflow: auto; font-family: Andale Mono,Lucida Console,Monaco,fixed,monospace; color: rgb(0, 0, 0); background-color: rgb(238, 238, 238); font-size: 12px; line-height: 14px; width: 100%;"&gt;&lt;code&gt;class ClientHeureux extends Client{&lt;br /&gt;void smile();&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Le  mot clé &lt;span class="motclef"&gt;extends&lt;/span&gt; signifie que la classe  ClientHeureux est une spécialisation du Client. Le ClientHeureux possède aussi  un nom et un prénom mais il possède la spécificité de sourire. &lt;/p&gt;  &lt;h3&gt; &lt;/h3&gt; &lt;h3&gt;Les portées ou scopes&lt;/h3&gt; &lt;p&gt;Un scope est utilisé pour  caractériser le champ d'application d'une fonction. Une bonne pratique consiste  à utiliser les visibilité minimale, toutefois, Voici les différentes visibilités  qui sont utilisées en JAVA. &lt;/p&gt; &lt;ul&gt;&lt;li class="motclef"&gt;default&lt;/li&gt;&lt;li class="motclef"&gt;private&lt;/li&gt;&lt;li class="motclef"&gt;protected&lt;/li&gt;&lt;li class="motclef"&gt;public&lt;/li&gt;&lt;/ul&gt; &lt;p class="definition"&gt;Private &lt;/p&gt;  &lt;p&gt;Caractérise un attribut ou une méthode organique, c'est à dire qu'elle n'est  accessible que depuis la classe d'objet considérée.&lt;/p&gt; &lt;p class="definition"&gt;Protected&lt;/p&gt; &lt;p&gt;Caractérise un attribut ou une méthode  organique. Toutefois, les descendant des cette classe d'objet auront également  accès à cette méthode. &lt;/p&gt; &lt;p class="definition"&gt;Public &lt;/p&gt; &lt;p&gt;Caractérise uns  attribut ou une méthode qui est accessible depuis n'importe quelle classe. &lt;/p&gt;  &lt;p class="definition"&gt;Default &lt;/p&gt; &lt;p&gt;Caractérise un attribut ou une méthode  accessible depuis tout le package. Si aucun mot clef n'est donné, c'est cette  visibilité qui est utilisée. &lt;/p&gt; &lt;h3&gt;Les packages&lt;/h3&gt; &lt;p&gt;Les packages  permettent d'organiser les classes et interfaces en sous ensembles, c'est la  notion de package. Dans un package on place plusieurs classes. &lt;/p&gt; &lt;p&gt; Du point  de vue strict de la programmation cette organisation apporte des bénéfices au  niveau de la clarté. &lt;/p&gt; &lt;p&gt;Ce qui est important c'est de définir pour le  projet une organisation homogène. Dans la pratique, on utilise les package pour  faire un découpage fonctionnel et ou technique. &lt;/p&gt; &lt;p&gt;Par exemple, toutes les  classes qui se rapportent à un client peuvent être regroupées dans un même  package, on procède dans ce cas à un découpage fonctionnel. Il est également  possible de regrouper les classes d'un point de vue technique, par exemple on  regroupe entre elle toutes les classes se rapportant au parsing d'un fichier.  &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Les Exceptions&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;Une des caractéristiques de JAVA est de gérer  depuis la runtime les exceptions. Ainsi il est impossible de créer un erreur de  segmentation. Tous les programmes JAVA se termine donc de manière normale. &lt;/p&gt;  &lt;p&gt;Pour parler des exceptions il est nécessaire de se placer dans le cadre de  l'execution d'un programme. Un programme est manipulé au niveau de la runtime  comme une pile d'appel. Le sommet de la pile donne l'instruction qui va être  executée. Parfois certaines opérations sont impossibles et provoquent un  résultat indéterminé, c'est par exemple le cas d'une division par  zéro. Le processeur n'est pas en mesure de donner le résultat, il a donc  le choix :&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Soit il donne une réponse aléatoire... Mais ce n'est pas  le genre de l'informatique&lt;/li&gt;&lt;li&gt;Soit il s'arrête et déclare qu'il ne sait  pas faire &lt;/li&gt;&lt;li&gt;En Java, il a une troisième possibilité : Il lance une  exception.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Attention à ne pas confondre une exceptions avec le  traitement d'erreur, car il y aura toujours des cas qu'on avait pas prévu, on  s'appuie sur la machine virtuelle pour ces cas là. Pour autant, il n'est pas bon  de faire du traitement d'erreur avec des exceptions.&lt;/p&gt; &lt;p&gt;La lancée d'une  exception c'est comme une bulle dans la stack, elle remonte jusqu'a ce qu'un  bloc d'un frame supérieur soit en mesure de traiter l'exception. &lt;/p&gt; &lt;p&gt;La  lancée d'une exception se fait par le mot clé &lt;span class="motclef"&gt;throw&lt;/span&gt;. Si l'exception n'étend pas une RuntimeException,  il est nécessaire que vous ajoutiez dans votre code un block de traitement  d'exception par les mots clés &lt;span class="motclef"&gt;try&lt;/span&gt; et &lt;span class="motclef"&gt;catch. &lt;/span&gt;&lt;/p&gt; &lt;p&gt;La récupération d'une exception se fait  par le mot clé &lt;span class="motclef"&gt;catch&lt;/span&gt;. &lt;/p&gt; &lt;p&gt;Pour pouvoir  attrapper une exception il est nécessaire de l'avoir placée dans un block &lt;span class="motclef"&gt;try.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;Il existe deux types d'exceptions :&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Les exceptions standards qui dérivent de la classe Exception&lt;/li&gt;&lt;li&gt;Les  exceptions RuntimeException qui sont une sous classe de la classe des Exception,  celle ci sont déclenchées par une impossibilité du processeur de traiter  l'instruction. Par exemple ArithmeticException est une RuntimeException car le  processeur ne sait pas diviser par zéro. &lt;/li&gt;&lt;/ul&gt; &lt;h3&gt; &lt;/h3&gt; &lt;p class="author"&gt;Clément Soullard, Juin 2004&lt;/p&gt; &lt;div class="licence"&gt; &lt;p&gt;Ce document est placé sous la licence libre Free Doc. La reproduction  partielle ou totale de ce document est permise et encouragée. Cependant,  les images du film Matrix ne sont évidement pas libres de droits. &lt;/p&gt; &lt;p&gt;Si vous faites évoluer le document merci de me tenir au courant. &lt;/p&gt;  &lt;/div&gt; &lt;h2&gt;Barbarismes Javaien et liens&lt;/h2&gt;   &lt;table border="1" cellpadding="5" cellspacing="0" width="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;td align="center"&gt;&lt;b&gt;Java Term&lt;/b&gt;&lt;/td&gt;  &lt;td align="center"&gt;&lt;b&gt;Definition&lt;/b&gt;&lt;/td&gt; &lt;td align="center"&gt;&lt;b&gt;More  Information&lt;/b&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="applet" id="applet"&gt;&lt;/a&gt;&lt;b&gt;Applet&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;An applet is a Java program  that runs within the web browser. Applets use a graphical user interface and may  have text, images, buttons, scrollbars, and sound. &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#awt"&gt;AWT&lt;/a&gt; and &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#swing"&gt;SWING&lt;/a&gt; are frequently associated with articles and tutorials  about creating applets.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/onlineTraining/Programming/BasicJava1/applet%20.html"&gt;Building Applets&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/docs/books/tutorial/applet/"&gt;Trail: Writing  Applets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/applet/package-summary.html"&gt;Package &lt;code&gt;java.applet&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td valign="top"&gt; &lt;a name="awt" id="awt"&gt;&lt;/a&gt;&lt;b&gt;AWT&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The Abstract Window Toolkit (AWT) is a package of classes for  creating components such as buttons, menus, and scrollbars for applets and  standalone applications.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/awt/"&gt;AWT  Fundamentals&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/docs/books/tutorial/applet/practical/gui.html"&gt;Using  the AWT to Create a GUI&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/j2se/1.3/docs/api/java/awt/package-summary.html#package_description"&gt;Package &lt;code&gt;java.awt&lt;/code&gt;  Description&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://forum.java.sun.com/forum.jsp?forum=5"&gt;AWT Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;Java API&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The  Java Application Programming Interface (API) is prewritten code, organized into  packages of similar topics. For instance, the &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#applet"&gt;Applet&lt;/a&gt; and  &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#awt"&gt;AWT&lt;/a&gt; packages include classes for creating fonts, menus, and  buttons. The full Java API is included in the &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#j2se"&gt;Java 2 Standard  Edition&lt;/a&gt; download.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/"&gt;API Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/new2java/divelog/"&gt;Building  an Application&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;JavaBeans&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;JavaBeans architecture  provides a way of designing reuseable software components that can be visually  manipulated in builder tools. Beans can besimple like buttons, or more complex  like a tool to access databases.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/javabeans/"&gt;JavaBeans Technology&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/technicalArticles/jbeans/BeanContext/"&gt;JavaB  eans Technology: Unlocking The BeanContext API&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://forum.java.sun.com/forum.jsp?forum=39"&gt;JavaBeans Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="jfc" id="jfc"&gt;&lt;/a&gt;&lt;b&gt;Java  Foundation Classes (JFC)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The Java Foundation Classes  (JFC) are a set of GUI components and other services simplifying the development  and deployment of desktop and Internet/Intranet applications. &lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jfc/index.jsp"&gt;Java  Foundation Classes (JFC)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jfc/faq.html"&gt;JFC FAQ&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forums.java.sun.com/forum.jsp?forum=57"&gt;Project Swing  Forum&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://forums.java.sun.com/forum.jsp?forum=3"&gt;Accessibility Forum&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;Java Native Interface (JNI)&lt;/b&gt;&lt;/td&gt;  &lt;td valign="top"&gt;JNI is the native programming interface for Java that is part  of the &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#jdk"&gt;JDK.&lt;/a&gt; The JNI allows Java code to operate with  applications and libraries written in other languages, such as C, C++, and  assembly. Recommended only for advanced programmers.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt; &lt;a href="http://java.sun.com/docs/books/tutorial/native1.1/"&gt;Trail: Java  Native Interface&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/onlineTraining/Programming/JDCBook/jni.html"&gt;Chapter 5: JNI Technology&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/products/jdk/1.2/docs/guide/jni/index.html"&gt;Java  Native Interface, 1.2&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;JavaServer Pages (JSP)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;Create dynamic  web pages with JSP by embedding scriptlets (Java programming language code) with  HTML. JSP pages process forms, perform calculations, or do anything else that  can be written with the Java programming language. To develop and test JSP,  download the &lt;a href="http://java.sun.com/products/jsp/download.html"&gt;JavaSever  Web Development Kit&lt;/a&gt;, and &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#j2se"&gt;J2SE&lt;/a&gt;.&lt;/td&gt; &lt;td valign="top"&gt;  &lt;ol&gt;&lt;li&gt; &lt;a href="http://java.sun.com/products/jsp/docs.html"&gt;JavaServer Pages  Tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/technicalArticles/Programming/jsp/"&gt;JavaServ  er Pages: A Developer's Perspective&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/Books/javaserverpages/"&gt;JSP Pro (Two  chapters in PDF)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/Books/cservletsjsp/"&gt;Core Servlets and  JavaServer Pages (Two chapters)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://forum.java.sun.com/forum.jsp?forum=45"&gt;JavaServer Pages  Forums&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://forum.java.sun.com/forum.jsp?forum=33"&gt;JavaSever Web Development  Kit Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;a name="j2ee" id="j2ee"&gt;&lt;/a&gt; &lt;b&gt;Java 2 Platform, Enterprise Edition (J2EE)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The J2EE platform provides a component-based approach to the  design, development, assembly, and deployment of enterprise applications. The  J2EE platform gives you a multitiered distributed application model, the ability  to reuse components, a unified security model, and flexible transaction  control.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt; &lt;a href="http://java.sun.com/j2ee/index.jsp"&gt;Java 2 Platform, Enterprise  Edition&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/"&gt;J2EE  Tutorial&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2ee/download.html"&gt;Downloads&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/reference/blueprints/"&gt;Java BluePrints&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/EJBIntro/"&gt;Enterprise  JavaBeans(EJB) Technology Fundamentals&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forums.java.sun.com/forum.jsp?forum=31"&gt;Java Programming  Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="j2me" id="j2me"&gt;&lt;/a&gt;&lt;b&gt;Java 2, Micro Edition (J2ME)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;Java 2  Micro Edition (J2ME) is targeted for the consumer and embedded market. The API  specifications are based on Java 2 Standard Edition (J2SE), but modified to meet  the unique requirements of each product. J2ME makes it possible to write Java  applications for cell phones, smart cards, pagers, and other consumer devices.  &lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2me/index.jsp"&gt;Java 2 Micro Edition (J2ME)  Technology&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wireless.java.sun.com//"&gt;Wireless  Developer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://developers.sun.com/techtopics/mobility/indexlearn.html"&gt;How  Wireless Applications Work&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/wireless/"&gt;Java Wireless Technology  Discussions&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="j2se" id="j2se"&gt;&lt;/a&gt; &lt;b&gt;Java 2, Standard Edition (J2SE)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;This  download includes the essential compiler, tools, runtimes, and APIs for writing,  deploying, and running applets and applications in the Java programming  language.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt; &lt;a href="http://java.sun.com/j2se/"&gt;Java 2 Platform, Standard Edition  (J2SE)&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/j2se/1.4.2/docs/api/"&gt;Online  Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/onlineTraining/new2java/programming/intro/"&gt;  Introducing the Java Platform&lt;/a&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://java.sun.com/developer/onlineTraining/new2java/programming/learn/"&gt;  Getting Started&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;Java Virtual  Machine (JVM)&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The Java virtual machine executes  instructions that a Java compiler generates. This run time environment, or JVM,  is embedded in various products, such as web browsers, servers, and operating  systems. &lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt; &lt;a href="http://forum.java.sun.com/forum.jsp?forum=37"&gt;Java Virtual Machine  Forums&lt;/a&gt; &lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;JDBC&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;JDBC is a Java API for executing SQL statements. By using the JDBC  API, you can access almost any data source, from relational databases to  spreadsheets to flat files. &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#j2se"&gt;J2SE&lt;/a&gt; includes the JDBC API.&lt;/td&gt;  &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jdbc/index.jsp"&gt;JDBC API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/jdbc/basics/"&gt;Lesson: Learn JDBC  Basics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/forum.jsp?forum=48"&gt;JDBC  Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="jdk" id="jdk"&gt;&lt;/a&gt;&lt;b&gt;JDK&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;JDK is the short-cut name for the  set of Java development tools, consisting of the API classes, a Java compiler,  and the Java Virtual Machine interpreter, regardless of which version. The JDK  is used to compile Java applications and applets. The most current version is  the &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#j2se"&gt;J2SE.&lt;/a&gt;, the preferred term these days. If you use J2SE  1.2 and later to develop applications, you are using what's known as the Java 2  Platform.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.4/"&gt;Download J2SE 1.4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.3/docs/api/"&gt;Online Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/new2java/programming/intro/"&gt;  Introducing the Java Platform&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/new2java/programming/learn/"&gt;  Getting Started&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;JINI&lt;/b&gt;&lt;/td&gt;  &lt;td valign="top"&gt;The Jini network technology enables any service--from  enterprise systems to kitchen appliances--to network smoothly and simply. The  Jini architecture lets each service (device or software) tell others how to talk  to it, without any administrator settings.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://wwws.sun.com/software/jini/"&gt;Jini Network Technology&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/jini/JiniEvents/"&gt;Distribu  ted Events in Jini&lt;/a&gt;&lt;/li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/jini/JiniEvents/"&gt;  Technology&lt;/a&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/jini/userinterface/"&gt;How  to Attach a User Interface to a Jini Service&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/Books/CoreJini/"&gt;Core Jini&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/forum.jsp?forum=11"&gt;General Distributed  Computing Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;a name="swing" id="swing"&gt;&lt;/a&gt;&lt;b&gt;Project Swing&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;The  &lt;code&gt;javax.swing&lt;/code&gt; package of classes is used to create GUI components for  applets and applications. Project Swing classes enable programmers to specify a  different look and feel for each platform, or a uniform look across all  platforms. &lt;i&gt;Swing&lt;/i&gt; is the project code name for the lightweight GUI  components in &lt;a href="http://clementphotos.com/persoclement/java/java02bist.htm#jfc"&gt;JFC.&lt;/a&gt;&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jfc/index.jsp"&gt;Java Foundation  Classes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/GUI/Swing1/"&gt;Fundamentals of  JFC/Swing: Part I&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/GUI/Swing2/"&gt;Fundamentals of  JFC/Swing: Part II&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/uiswing/"&gt;Creating GUI with  JFC/Swing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/Programming/JDCBook/swing.htm%20l"&gt;Project Swing: Building a User Interface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/forum.jsp?forum=57"&gt;Project Swing Forums&lt;/a&gt;  &lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;RMI&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;Remote Method Invocation (RMI) lets Java applications communicate  across a network. The communicating applications can be running on different  computers on opposite sides of the planet. This higher-level and method-based  approach to network communications allows access to a remote object as easily as  a local object.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/jdk/rmi/index.jsp"&gt;Java Rmote Invocation  (RMI)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/rmi/"&gt;Fundamentals of RMI  Short Course&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/j2se/1.3/docs/guide/rmi-iiop/"&gt;RMI-IIOP Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/Programming/BasicJava1/rmi.ht%20ml"&gt;Lesson 8: Remote Method Invocation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/forum.jsp?forum=59"&gt;RMI-IIOP Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt;&lt;b&gt;Servlets&lt;/b&gt;&lt;/td&gt; &lt;td valign="top"&gt;A  servlet is an extension to a server that enhances the server's functionality.  Servlets are most commonly used to process forms, handle redirects or  authenticate user names and passwords, and create dynamic content.&lt;/td&gt; &lt;td valign="top"&gt; &lt;ol&gt;&lt;li&gt;&lt;a href="http://java.sun.com/products/servlet/index.jsp"&gt;Java Servlet  Technology&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/docs/books/tutorial/servlets/"&gt;Lesson: Overview of  Servlets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/Programming/BasicJava1/servle%20t.html"&gt;Lesson 5: Writing Servlets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/technicalArticles/Servlets/servletapi/"&gt;What  's New in the Servlet API?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://java.sun.com/developer/onlineTraining/Servlets/Fundamentals/"&gt;Funda  mentals of Java Servlets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://forum.java.sun.com/forum.jsp?forum=33"&gt;JavaServer Web Development  Kit Forums&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-3051901551170857138?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/3051901551170857138/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=3051901551170857138' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3051901551170857138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/3051901551170857138'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/09/le-langage-java.html' title='Le langage JAVA'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-381976882413347392.post-7481722128505733679</id><published>2007-09-25T02:07:00.000-07:00</published><updated>2007-10-29T02:47:33.507-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Introduction au JAVA</title><content type='html'>&lt;div class="imgmatrix"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/matriximg/neophone.jpg" height="360" width="480" /&gt;      &lt;p&gt;Allo. Comment JAVA ?&lt;/p&gt;   &lt;/div&gt;   &lt;h2&gt;&lt;a name="principebase" id="principebase"&gt;&lt;/a&gt;Principes de base :&lt;/h2&gt;   &lt;h3&gt;Langage et plateforme JAVA&lt;/h3&gt;   &lt;p&gt;Le JAVA est un langage informatique orienté objet qui a été créé pour satisfaire      à plusieurs besoins :&lt;/p&gt;   &lt;ul&gt;&lt;li&gt;Simplicité de programmation&lt;/li&gt;&lt;li&gt;Portabilité&lt;/li&gt;&lt;li&gt;Simplicité de la gestion de la mémoire &lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;Pour être exact il faut distinguer le langage JAVA de la plateforme de developpement      JAVA qui sont souvent assimilés :&lt;/p&gt;   &lt;ul&gt;&lt;li&gt;Une plateforme de développement permet de créer et d'exécuter des programmes.      &lt;/li&gt;&lt;li&gt;Un langage permet de décrire soit des objets, soit des actions. &lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;La plateforme Java est utilisée pour exécuter des programmes, il existe déjà      des programmes écrits en JAVA qui tournent sous des plateforme autre que JAVA      : la plateforme Mono ou .NET.&lt;/p&gt;   &lt;p&gt;Cette plateforme est constituée par :&lt;/p&gt;   &lt;ol&gt;&lt;li&gt;Un compilateur &lt;/li&gt;&lt;li&gt;Un interpréteur ou runtime&lt;/li&gt;&lt;li&gt;Des librairies ou APIS&lt;/li&gt;&lt;/ol&gt;   &lt;p align="center"&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/couchejava.gif" height="150" width="127" /&gt;&lt;/p&gt;   &lt;p class="imglegend" align="center"&gt;Les trois étages de représentation      en JAVA&lt;/p&gt;   &lt;p&gt;En réalité, la transformation en langage machine repose sur deux moments      : &lt;/p&gt;   &lt;ol&gt;&lt;li&gt;La compilation&lt;/li&gt;&lt;li&gt;L'interprétation runtime&lt;/li&gt;&lt;/ol&gt;   &lt;h3&gt;Forces et faiblesses du JAVA&lt;/h3&gt;   &lt;p class="affirmation"&gt;Le JAVA est simple, facile à programmer, facile à debugger&lt;/p&gt;   Sans cet élément crucial, il est probable que le JAVA n'aurait pas connu un    tel succès    &lt;p class="affirmation"&gt;Le kit de développement est gratuit et la communauté      de développeurs est énorme&lt;/p&gt;   &lt;p&gt;De nombreux frameworks sont proposés gratuitement pour accélérer vos développements.&lt;/p&gt;   &lt;p class="affirmation"&gt;Le JAVA est réellement portable sur les environnements      Solaris, Linux, Windows, Mac OS-X et AIX sur tous les aspects non visuels.    &lt;/p&gt;   &lt;p&gt;C'est a dire qu'aucun développement n'est nécessaire pour effectuer un portage.&lt;/p&gt;   &lt;p class="affirmation"&gt;Le JAVA est portable facilement quand il y a des aspects      visuels à prendre en compte. &lt;/p&gt;   &lt;p&gt;C'est a dire que les bugs rencontrés lors des portages seront mineurs et      facilement corrigeables.&lt;/p&gt;   &lt;p class="affirmation"&gt;Le JAVA a des performances moindres sur les aspects nécessitant      beaucoup de traitement processeur ( Vidéo, 3D ) &lt;/p&gt;   &lt;p&gt;Par contre, il est suffisant pour l'imagerie et la publication.&lt;/p&gt;   &lt;p class="affirmation"&gt;Le JAVA n'est pas recommandé lorsqu'on souhaite se servir      de fonctions propres à un OS&lt;/p&gt;   &lt;p&gt;Le principe de JAVA étant de factoriser les talents communs à tous les OS,      il faudrait revenir sur sa portabilité si l'on souhaitait exploiter des spécificités      du système. &lt;/p&gt;   &lt;h2&gt; Comparatifs technologiques&lt;/h2&gt;   &lt;p&gt; J’ai un jugement relativement peu nuancé concernant le bénéfice      de la technologie JAVA, si je suis intègre dans mon prosélytisme,      il n’en demeure pas moins que mon jugement est sans doute une version      légèrement euphorique du marché. Cet avertissement donné,      je ne parlerai plus au conditionnel ! Le Java, disais-je, est formidable :      Il peut être utilisé dans tous les champs connus d’applications      de l’informatique : &lt;/p&gt;   &lt;ul&gt;&lt;li&gt; Interface Utilisateur (Client Lourd)&lt;/li&gt;&lt;li&gt; Interface Web (Client Léger)&lt;/li&gt;&lt;li&gt; Middleware (Batch et Workflow)&lt;/li&gt;&lt;li&gt; Informatique Scientifique&lt;/li&gt;&lt;li&gt; Informatique embarquée&lt;/li&gt;&lt;li&gt; Temps Réel&lt;/li&gt;&lt;/ul&gt;   &lt;p&gt;La différence est que suivant le domaine il ne possède pas      les mêmes qualités à opposer à ses adversaires.    &lt;/p&gt;   &lt;h3&gt;Interface Utilisateur&lt;/h3&gt;   &lt;p&gt; Pour les interfaces utilisateurs on utilise essentiellement les Langages      Objet comme C++ et Objective C pour les applications grand public. Ce type      d’application il nécessite des installeurs. &lt;/p&gt;   &lt;p&gt;Pour les petite application d'entreprise on utilise également du VB      et d’autres langages scriptés, les exigences de robustesse et      de facilité d’installation sont habituellement moindres. Par      rapports à ces deux alternatives les avantages du JAVA sont les suivants      :&lt;/p&gt;   &lt;ul&gt;&lt;li&gt; Pour les applications grand public, l’installation est simplifiée        du fait de la portabilité native du JAVA.&lt;/li&gt;&lt;li&gt; Par rapport aux applications utilisée dans les entreprises basé        sur des scripts. Le JAVA possède un design (lié à la        force/rigueur du langage) qui lui donne un amortissemenet plus long à        ce genre d’application. Cela qui garanti au prix d’un effort        un peu plus important au début d’avoir une meilleure pérennité        du produit développé. &lt;/li&gt;&lt;/ul&gt;   &lt;h3&gt;Interface Web et Middleware&lt;/h3&gt;   &lt;p&gt; C’est véritablement l’environnement dans lequel le JAVA      a vraiment tiré son épingle du jeu, lorsqu’on l’attendait      plutôt sur les aspects plus graphiques et grand public. Ce sont les      développeurs qui en votant avec leurs pieds ont fait du JAVA un acteur      majeur du coté des serveurs. Sa force de ce point de vue réside      dans la réponse normalisée qui a été apportées      très tôt aux CGI par la plateforme J2EE. &lt;/p&gt;   &lt;p&gt;Ses concurrents actuels sont le PHP et les solutions Microsoft. PHP connaît      un succès certain en particuliers dans les sites qui ont besoins d’une      grande réactivité, mais globalement, les solutions JAVA prennent      l’avantage dès qu’il s’agit d’un projet dont      l’amortissement est prévu sur plus de 5 ans. Sur le Middleware,      IBM s’est aligné avec JAVA et il est pratiquement le seul en      lice pour les technologies de demain à ce niveau. &lt;/p&gt;   &lt;h3&gt;Informatique scientifique&lt;/h3&gt;   &lt;p&gt; On dépasse progressivement l’époque où c’était      avant tout la puissance qui était demandée à l’informatique      scientifique. Maintenant, le JAVA est attendu dans toutes les applications      scientifiques réellement critiques, comme le pilotage d’un robot      sur Mars, pilotage de fusées etc. C’est un phénomène      assez nouveau, d’une part les nouveaux chercheurs connaissent ce langage.D’autre      parts, on sait mieux intégrer le risque « humain » de programmation.    &lt;/p&gt;   &lt;h3&gt;Informatique embarquée&lt;/h3&gt;   &lt;p&gt; L’informatique embarquée occupe maintenant une part non négligeable      du CA global de ce secteur avec l’avènement du téléphone      portable et plus généralement de l’informatique embarquée.      Et, surprise, Sun a réalisé une partie non négligeable      de son CA l’année dernière sur les jeux embarqués      dans les téléphones portables. Pour les mêmes raisons      de fiabilité on trouve bénéfice à utiliser ce      langage sur des plateformes embarquées. &lt;/p&gt;   &lt;h3&gt;Runtime et JDK&lt;/h3&gt;   &lt;p&gt;Sun est le principal acteur du JAVA c'est lui qui détient les droits sur      la norme. Cette norme est publique et bien que les sources java des librairies      soient publiques, les codes source de la machine virtuelle ne sont pas publics.    &lt;/p&gt;   &lt;p&gt;Sun fournit deux types de plateforme Java :&lt;/p&gt;   &lt;p class="definition"&gt;JRE&lt;/p&gt;   &lt;p&gt;Java Runtime Environnement : c'est ce qu'il faut installer pour faire fonctionner      JAVA, ce kit comprend la RunTime ainsi que divers utilitaires qui peuvent      être utilisés lors de l'exécution d'un programme, par exemple un gestionnaire      de sécurité.&lt;/p&gt;   &lt;p class="definition"&gt;JDK&lt;/p&gt;   &lt;p&gt;Java Developpement Kit : Ee kit en plus de la runtime comprend un compilateur,      un packager et divers utilitaires qui permettent de créer des programmes JAVA.      Il sert pour le developpement. Ce Kit peut être nécessaire pour faire fonctionner      certaines applications serveur, en particulier les serveur d'application car      il ont besoin d'avoir un compilateur. &lt;/p&gt;   &lt;h3&gt;La compilation&lt;/h3&gt;   &lt;p&gt;Pour produire un programme JAVA, il est nécessaire de le compiler. Ainsi      le code est transformé en des classes compilées (Qu'on appelle bytecode) qui      pourront s'exécuter sur la machine virtuelle.&lt;/p&gt;   &lt;p&gt; On peut compiler en utilisant en ligne de commande le programme javac qui      fait partie du JDK. Cependant, ce fontionnement est de plus en plus marginal      et il existe des IDE gratuites et puissantes comme &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt;      qui effectuent graphiquement ce genre d'opération. &lt;/p&gt;   &lt;h3&gt;La machine virtuelle&lt;/h3&gt;   &lt;div class="imgmatrix"&gt;      &lt;p&gt;&lt;img src="http://www.clementsoullard.com/persoclement/java/images/matriximg/redpill.jpg" height="360" width="480" /&gt;&lt;/p&gt;     &lt;p&gt;Which pill would you take, the red or the blue?&lt;/p&gt;   &lt;/div&gt;   &lt;p&gt;Pour pouvoir être exécutées les intructions données par le bytecode sont      transformées en instructions processeur. Puisque tous les processeurs ne disposent      pas du même jeu d'instructions et que certaines opérations sont possibles      en un seul cycle d'horloge sur un processeur tandis qu'elles se réalisent      en plusieurs instructions sur un autre processeur, le rôle de la machine virtuelle      est de convertir un jeu d'instructions propre au processeur.&lt;/p&gt;   &lt;p&gt;C'est ici que se trouve la force et la faiblesse du JAVA. La phase d'interprétation      du JAVA est celle qui le pénalise le plus par rapport à des langages tel que      le C ou C++ qui produisent des exécutables directement en langage machine.      En effet, la phase d'interprétation consomme du temps processeur. Les machines      virtuelles récentes sont trois fois plus lente que celle en langage processeur.      Mais Attention cependant, cela ne veut pas dire que le JAVA est trois fois      plus lent car dans un ordinateur il n'y a pas que le processeur qui compte,      habituellement ce sont plus les entrées sorties qui consomment le plus de      temps. &lt;/p&gt;   &lt;p&gt;De plus, ce désavantage en performance sur le papier est compensé par des      aspects pratiques au niveau de la programmation. En effet, le langage JAVA      est un langage facile à programmer, une bonne conception est souvent la plus      grande source de gain en termes de performances. Il ne faut donc pas éliminer      le JAVA avec cet argument va-tout que vous entendrez encore dans la bouche      de certains vétérans : "Le java n'est pas suffisament performant".    &lt;/p&gt;   &lt;p&gt;En programmation C ou C++ c'est au programmeur d'allouer et de désallouer      de la mémoire. En java on ne parle plus d'allocation de mémoire, mais de référencement      d'objet. Pour le programmeur JAVA cette machine virtuelle est une aubaine      car elle permet au progammeur de ne plus avoir en tête la représentation      mémoire de son programme. &lt;/p&gt;   &lt;p&gt;Quand on programme en C, il est facile de penser à allouer de la mémoire      sinon ça ne marche pas. Il est par contre beaucoup moins nécessaire      de désallouer de la mémoire car le programme fonctionne toujours même      s'il consomme plus de mémoire, ce ne sont que de bonne habitudes de      développement qui permettent de s'en sortir et il y aura toujours certaines      fuites mémoire imprévisibles. C'est assez difficile de s'en apercevoir      et difficile à réparer car l'incident se produit parfois longtemps      après le développement. En Java, exit ce genre de problème.      Ou presque...&lt;/p&gt;   &lt;h3&gt;Liens utiles&lt;/h3&gt;   &lt;p&gt;&lt;a href="http://java.sun.com/"&gt;Le site de référence&lt;/a&gt; : On      y trouve le JDK et tout un tas de tutoriaux (mais c'est en anglais).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/381976882413347392-7481722128505733679?l=frenchhack.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://frenchhack.blogspot.com/feeds/7481722128505733679/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=381976882413347392&amp;postID=7481722128505733679' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7481722128505733679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/381976882413347392/posts/default/7481722128505733679'/><link rel='alternate' type='text/html' href='http://frenchhack.blogspot.com/2007/09/introduction-au-java.html' title='Introduction au JAVA'/><author><name>Clement Soullard</name><uri>https://profiles.google.com/105796387734288624127</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh6.googleusercontent.com/-MJ5sX90sVjU/AAAAAAAAAAI/AAAAAAAAAAA/9caXPHpR7ds/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
