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

<channel>
	<title>Le Touilleur Express &#187; idea intellij</title>
	<atom:link href="http://www.touilleur-express.fr/tag/idea-intellij/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.touilleur-express.fr</link>
	<description>Blog sur Java, le métier de développeur et la vie de freelance par Nicolas Martignole</description>
	<lastBuildDate>Wed, 08 Feb 2012 11:54:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Eclipse est mort, vive Rational Jazz</title>
		<link>http://www.touilleur-express.fr/2007/02/16/eclipse-est-mort-vive-rational-jazz/</link>
		<comments>http://www.touilleur-express.fr/2007/02/16/eclipse-est-mort-vive-rational-jazz/#comments</comments>
		<pubDate>Fri, 16 Feb 2007 06:35:51 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Perso]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[idea intellij]]></category>
		<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=53</guid>
		<description><![CDATA[Avec un titre comme celui-ci, je suis certain que la majorité des lecteurs vont se dire que j&#8217;ai encore fondu un plomb et que dans 3 lignes je vais vous parler d&#8217;IDEA IntelliJ&#8230; perdu ! Non ce matin j&#8217;ai envie de parler du projet Rational Jazz sur lequel travaille
Erich Gamma, l&#8217;un des auteurs d&#8217;Eclipse. Eclipse ne va pas être abandonné, loin de là.
Voyons juste ce qu&#8217;IBM prépare pour notre environnement de travail dans 2 ou 3 ans.
Tout d&#8217;abord, connaissez-vous Erich Gamma ? Erich est l&#8217;un des auteurs d&#8217;Eclipse, l&#8217;un des ...]]></description>
			<content:encoded><![CDATA[<p>Avec un titre comme celui-ci, je suis certain que la majorité des lecteurs vont se dire que j&#8217;ai encore fondu un plomb et que dans 3 lignes je vais vous parler <a href="http:// www.jetbrains.com/idea/">d&#8217;IDEA IntelliJ</a>&#8230; perdu ! Non ce matin j&#8217;ai envie de parler du projet Rational Jazz sur lequel travaille<br />
Erich Gamma, l&#8217;un des auteurs d&#8217;Eclipse. Eclipse ne va pas être abandonné, loin de là.<br/><br />
Voyons juste ce qu&#8217;IBM prépare pour notre environnement de travail dans 2 ou 3 ans.</p>
<p>Tout d&#8217;abord, connaissez-vous <b>Erich Gamma</b> ? Erich est l&#8217;un des auteurs d&#8217;Eclipse, l&#8217;un des co-auteurs du livre <a href="http://www.amazon.fr/patterns-Catalogue-mod%C3%A8les-conception-r%C3%A9utilisables/dp/2711786447/sr=1-1/qid=1171612961/ref=sr_1_1/171-8128472-1405820?ie=UTF8&#038;s=books">Design patterns. Catalogue des modèles de conception réutilisables</a> et enfin l&#8217;un des co-auteurs du framework de test unitaires JUnit. Autant dire donc que sans le savoir vous avez certainement déjà utilisé l&#8217;un des outils auquel il a contribué ou dont il est l&#8217;auteur.</p>
<p>Erich Gamma travaille sur un nouveau projet en collaboration avec IBM, <b>Rational Jazz</b>. Il s&#8217;agit d&#8217;un nouvel outil et d&#8217;une nouvelle plateforme de développement collaboratif. Fortement orienté vers un travail en réseau, Jazz sera à la fois un éditeur mais aussi un environnement de travail afin qu&#8217;un développeur à Bangkok puisse travailler avec un développeur à Paris ou à Palo-Alto. Il y aura à coup sûr donc des outils comme un serveur central de code source (CVS,SVN), un système centralisé de gestion d&#8217;artefacts (comme CollabNet, SourceForge.net, Jira). Je pense qu&#8217;il y aura aussi un système de Wiki pour documenter (comme <a href="http://www.atlassian.com/software/confluence/">Confluence</a>) et échanger des documents (<a href="www.microsoft.atat.at/france/sharepoint/">à la Microsoft SharePoint</a>). Que manque-t-il ? Sans doute un serveur d&#8217;intégration continue (<a href="cruisecontrol.sourceforge.net">CruiseControl</a> ou mieux, <a href="www.jetbrains.com/teamcity/">TeamCity</a> de JetBrains.). Quoi d&#8217;autre ? J&#8217;y ajouterai avec un peu de Websphere un environnement pour mettre en ligne automatiquement les applications J2EE compilées afin d&#8217;avoir en permanence une démo qui tourne par exemple&#8230;</p>
<p>Rational Jazz ce sera donc un peu tout cela: faire jouer ensemble des musiciens complètement différent, pouvoir s&#8217;adapter au changement facilement tout en restant simple et puissant. Le message fort derrière ce nouveau projet est qu&#8217;avec des équipes de développement localisées aux 4 coins du monde, des outils modernes et puissants sont nécessaires afin d&#8217;améliorer la productivité et la qualité. En disant cela je pense très fort à un produit chez nous, hop voilà c&#8217;est fini&#8230; vive les pays de l&#8217;Est.</p>
<p>Pour résumer, Jazz Rational est un nouvel outil de développement collaboratif qui ne sortira que dans quelques mois. Il proposera une réelle innovation pour s&#8217;adapter aux nouvelles méthodes de travail en équipe à travers Internet qui n&#8217;existaient pas il y a 6 ou 7 ans.</p>
<p>Pour terminer quelques liens:</p>
<ul>
<li>Article <a href="http://www.eweek.com/article2/0,1759,1972532,00.asp?kc=EWRSS03129TX1K0000612">sur eWeeks</a></li>
<li><a href="https://jazz.net/pub/index.jsp">Le site Rational Jazz</a></li>
<li>La conférence <a href="http://www.eclipsecon.org/2007/">eclipseCon 2007</a> à Santa-Clara, CA, du 5 au 8 mars 2007.</li>
<li> <a href="http://www.redmonk.com/sogrady/archives/2006/06/rsdc_forget_what_i_said_before.html">Témoignage de Steve O&#8217;Grady sur une démo de Jazz</a>
</ul<br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/02/16/eclipse-est-mort-vive-rational-jazz/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Idea IntelliJ 6.0 est disponible</title>
		<link>http://www.touilleur-express.fr/2006/10/11/idea-intellij-60-est-disponible/</link>
		<comments>http://www.touilleur-express.fr/2006/10/11/idea-intellij-60-est-disponible/#comments</comments>
		<pubDate>Wed, 11 Oct 2006 07:42:28 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Perso]]></category>
		<category><![CDATA[idea intellij]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=63</guid>
		<description><![CDATA[Aaaah grand moment de bonheur ce matin: IDEA IntelliJ 6.0 est enfin disponible !
Parmis les nombreux nouvelles fonctionnalités on note le support des EJB3, de JBoss Seam, de JSF, du Google Web Toolkit, une meilleur gestion des gestionnaires de code source&#8230; etc. Bref si vous utilisez Eclipse, et que vous avez envie d&#8217;essayer l&#8217;autre éditeur Java et bien je vous encourage à récupérer une version sur le site de JetBRAINS.
]]></description>
			<content:encoded><![CDATA[<p>Aaaah grand moment de bonheur ce matin: IDEA IntelliJ 6.0 est enfin disponible !<br />
<a href="http://www.jetbrains.com/idea/features/newfeatures.html">Parmis les nombreux nouvelles fonctionnalités</a> on note le support des EJB3, de JBoss Seam, de JSF, du Google Web Toolkit, une meilleur gestion des gestionnaires de code source&#8230; etc. Bref si vous utilisez Eclipse, et que vous avez envie d&#8217;essayer <b>l&#8217;autre éditeur Java</b> et bien je vous encourage à récupérer une version sur <a href="http://www.jetbrains.com/idea/download/index.html">le site de JetBRAINS.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2006/10/11/idea-intellij-60-est-disponible/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>String et intern() on ne sait pas tout sur les Strings</title>
		<link>http://www.touilleur-express.fr/2006/09/12/string-et-intern-on-ne-sait-pas-tout-sur-les-strings/</link>
		<comments>http://www.touilleur-express.fr/2006/09/12/string-et-intern-on-ne-sait-pas-tout-sur-les-strings/#comments</comments>
		<pubDate>Tue, 12 Sep 2006 06:50:02 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[idea intellij]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=64</guid>
		<description><![CDATA[Hier soir, plongé dans du code de Xerces-J pour notre parseur XML j&#8217;ai vu plusieurs fois ce bout de code:


protected final static String A_CONSTANT = "constantTest".intern();



Quel est le fonctionnement de la méthode intern() de la class String ? Comme vous le savez en Java, il y a deux moyens de comparer deux objets. La méthode equals() et l&#8217;opérateur ==. La méthode equals() s&#8217;assure que les deux objets contiennent les mêmes données alors que l&#8217;opérateur == vérifie si les références de l&#8217;ojbet pointent sur le même objet. D&#8217;ailleurs une des premières ...]]></description>
			<content:encoded><![CDATA[<p>Hier soir, plongé dans du code de Xerces-J pour notre parseur XML j&#8217;ai vu plusieurs fois ce bout de code:</p>
<pre>
<code java>
protected final static String A_CONSTANT = "constantTest".intern();
</code>
</pre>
</p>
<p>Quel est le fonctionnement de la méthode intern() de la class String ? Comme vous le savez en Java, il y a deux moyens de comparer deux objets. La méthode equals() et l&#8217;opérateur ==. La méthode equals() s&#8217;assure que les deux objets contiennent les mêmes données alors que l&#8217;opérateur == vérifie si les références de l&#8217;ojbet pointent sur le même objet. D&#8217;ailleurs une des premières leçons des débutants en Java est qu&#8217;il faut en général utiliser la méthode equals() pour comparer 2 String en Java.<br />
En effet à votre avis quel est le résultat de l&#8217;exécution de ce code ?</p>
<pre><code>
System.out.println("Comparaison: "+ new String("Touilleur)==new String("Touilleur") );
</code></pre>
<p>Si vous avez répondu Comparaison: true vous vous êtes trompé. S&#8217;agissant de deux objets distints, ils ne sont pas égaux. Le code retourne false. Voyons maintenant avec l&#8217;opérateur equals de la class String:</p>
<pre>
<code>
System.out.println("Comparaison: "+ new String("Touilleur).equals(new String("Touilleur")) );
</code>
</pre>
<p>Dans ce cas précis le programme retournera Comparaison: true car la méthode equals compare les contenus des chaines. Cependant cette méthode qui itére les caractères peut être très lente. Alors comment Java optimise ce pattern en interne ? N&#8217;en déplaise à mes amis fan de C/C++ les gens qui codent la virtual machine de Java ne sont pas plus bêtes que d&#8217;autres, et bien souvent ils ont aussi de bonnes connaissances en C/C++.</p>
<p>L&#8217;opérateur == compare l&#8217;identité en mémoire des objets, et donc cet appel sera vraiment plus rapide que l&#8217;appel de la méthode equals. Si comme dans Xerces-J la comparaison de String est le coeur de votre moteur, il est indispensable de l&#8217;optimiser, les gains en terme de performances seront important.<br />
Pour cela ce qu&#8217;il faut c&#8217;est une liste de Strings à comparer en mémoire dans laquelle nous viendrons piocher lorsque nous devrons comparer une String à notre liste de référence. D&#8217;autre part si la String comparée n&#8217;existe pas nous voudrons stocker sa référence en mémoire. Avec ce mécanisme il sera possible d&#8217;utiliser l&#8217;opérateur == pour comparer des instances. C&#8217;est le rôle de la méthode <b>intern()</b> de la class String qui gére cette liste et qui nous retourne la référence de la string en mémoire.
</p>
<pre>
<code>
    public static void main(String[] args)
    {
        System.out.println("Test 1 "+(new String("Touilleur")==new String("Touilleur")));

        System.out.println("Test 2 "+( (new String("Touilleur").intern()) == (new String("Touilleur").intern())));
    }
</code>
Attention aux parenthèses qui sont importantes ici pour que le test soit valide. L'execution de ce programme affichera:
<code>
Test 1 false
Test 2 true
</code>
</pre>
<p>La question qui reste en suspend est pourquoi alors une String qui est static et final est instancié avec un appel à intern() ? Nous sommes habitués à voir ce code là:</p>
<pre>
<code>
 public static final String MY_PARAM="params";
</code>
</pre>
<p>moi ce qui m&#8217;a étonnné c&#8217;est</p>
<pre>
<code>
 public static final String MY_PARAM="params".intern();
</code>
</pre>
<p>Il se trouve que Java fait en sorte que ce genre de pattern soit déjà optimisé. Toutes les Strings d&#8217;une class sont par défaut automatiquement &laquo;&nbsp;internés&nbsp;&raquo; de sorte que vous pouvez avoir quelques optimisations. Le code ci-dessous montre que les String qui peuvent être résolue à la compilation seront optimisées. Si par contre vous lancez le programme en passant test (java QuickTest test) vous verrez que les paramètres dynamiques ne peuvent pas être optimisé et que l&#8217;execution du code retournera false.
</p>
<pre>
<code>
public class QuickTest
{
    public static final String MY_PARAM="test";

    public static void main(String[] args)
    {
        // Est-ce que test est identique a MY_PARAM ?
        System.out.println("test" == MY_PARAM); // VA AFFICHER TRUE

        // Et si nous concatenons la string
        String s2="te"+"st";
        System.out.println( s2 == MY_PARAM); // VA AFFICHER TRUE

        // Si nous specifions test en tant que premier argument de ce programme
        // afin de voir a l'execution si nous avons une difference
        String s3=args[0];
        System.out.println(s3 == MY_PARAM);  // VA AFFICHER FALSE

        // Maintenant si nous passons par l'appel a intern()
        System.out.println(s3.intern() == MY_PARAM);  // VA AFFICHER TRUE
    }
}
</code>
</pre>
<p>Le 4eme appel dans le code ci-dessus est donc la raison pour laquelle nous pouvons tout à fait ajouter un call intern() sur une constante en Java. Il faut donc simplement que notre code force un appel à intern() pour pouvoir utiliser l&#8217;opérateur ==. D&#8217;autre part pour revenir au début de ce post, forcer un appel à intern() sur une constante permet de transformer cette constante résolue à la compilation en constante résolue à l&#8217;execution. (Voir <a href="http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.28"JS 15.28M</a>) bien que finalement ceci est un intérêt assez limité.
</p>
<p>La méthode intern() de la class String est une méthode native. L&#8217;implémentation est donc déléguée à la JVM, ce qui fait qu&#8217;il y a aussi une difference en terme de performance entre BEA JRockIt et SUN JVM</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2006/09/12/string-et-intern-on-ne-sait-pas-tout-sur-les-strings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

