<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Shiny happy people coding : Cat&#233;gorie Java, tout sur Java</title>
    <link>http://blog.shingara.fr</link>
    <atom:link type="application/rss+xml" rel="self" href="http://blog.shingara.fr/category/java.rss"/>
    <language>fr-fr</language>
    <ttl>40</ttl>
    <description>codons avec le sourire</description>
    <item>
      <title>Le logger ruby avec son bloc</title>
      <description>&lt;p&gt;Alors que je m'amusais &#224; &#233;tendre le Logger de base de Ruby, j'ai d&#233;couvert que l'on pouvait utiliser le Logger comme ci-dessous :&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class=&quot;CodeRay&quot;&gt;&lt;span class=&quot;co&quot;&gt;Logger&lt;/span&gt;.debug { &lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;My object is &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;.map(&amp;amp;&lt;span class=&quot;sy&quot;&gt;:id&lt;/span&gt;)&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt; }&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Par d&#233;faut, on l'utilise en fournissant une string en param&#232;tre comme ceci : &lt;code&gt;Logger.debug(&quot;My object is #{self.map(&amp;:id)}&quot;)&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;La diff&#233;rence entre ces deux &#233;critures ?&lt;/p&gt;

&lt;p&gt;La premi&#232;re permet d'&#233;viter d'&#233;valuer la chaine qui sera logg&#233; si elle n'en a pas besoin. Contrairement &#224; la deuxi&#232;me qui sera toujours &#233;valu&#233;e m&#234;me si vous ne la loggez pas. Ainsi le temps de traitement pourrais s'en faire ressentir.&lt;/p&gt;

&lt;p&gt;Gr&#226;ce &#224; &#231;a, on peux facilement &#233;viter les fameux :&lt;/p&gt;

&lt;div class=&quot;CodeRay&quot;&gt;&lt;pre&gt;&lt;notextile&gt;&lt;span class=&quot;CodeRay&quot;&gt;&lt;span class=&quot;co&quot;&gt;Logger&lt;/span&gt;.debug(&lt;span class=&quot;s&quot;&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;My object is &lt;/span&gt;&lt;span class=&quot;il&quot;&gt;&lt;span class=&quot;idl&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;pc&quot;&gt;self&lt;/span&gt;.map(&amp;amp;&lt;span class=&quot;sy&quot;&gt;:id&lt;/span&gt;)&lt;span class=&quot;idl&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&amp;quot;&lt;/span&gt;&lt;/span&gt;) &lt;span class=&quot;r&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;co&quot;&gt;Logger&lt;/span&gt;.level == &lt;span class=&quot;co&quot;&gt;Logger&lt;/span&gt;::&lt;span class=&quot;co&quot;&gt;DEBUG&lt;/span&gt;&lt;/span&gt;&lt;/notextile&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En effet, ce genre de code est tr&#232;s fr&#233;quent en Java, pour gagner un petit peu en performance sans perdre ses logs.&lt;/p&gt;

</description>
      <pubDate>Wed, 21 Oct 2009 23:08:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:e9403a43-7d1a-4927-9660-19bb38ecb1cf</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/le-logger-ruby-avec-son-bloc.html#comments</comments>
      <category>ruby</category>
      <category>Informatique</category>
      <category>Java</category>
      <link>http://blog.shingara.fr/le-logger-ruby-avec-son-bloc.html</link>
    </item>
    <item>
      <title>Sortir un test Junit &#224; partir d'un test Junit d'Eclipse</title>
      <description>&lt;p&gt;Au niveau de mon travail, on m'a demand&#233; de r&#233;aliser une sortie console de nos tests unitaires. H&#233;las on a jamais pris le temps de r&#233;aliser un pom.xml complet (pour projet Maven) pour ainsi avoir toutes les d&#233;pendances n&#233;cessaires.&lt;/p&gt;

&lt;p&gt;Comme toujours on m'a demand&#233; de r&#233;aliser cette sortie assez rapidement. J'ai donc trouv&#233; une petite bidouille pour arriver &#224; r&#233;aliser mon test en console en conservant compl&#232;tement mon classpath d&#233;fini par Eclipse.&lt;/p&gt;

&lt;p&gt;Tout d'abord il faut r&#233;cup&#233;rer la commande r&#233;aliser par Eclipse pour lancer le test. Pour cela, il suffit de mettre un point d'arr&#234;t dans son script Junit, lancer le script en mode &#171; Debug &#187; et ensuite quand le point d'arr&#234;t &#224; stopper le processus, un clic droit sur le thread permet de consulter le menu de propri&#233;t&#233; de lancement de ce thread.&lt;/p&gt;

&lt;p&gt;On copie enti&#232;rement la ligne de commande qui est de la forme suivante :&lt;/p&gt;

&lt;pre&gt;
C:\bea\jdk142_05\bin\javaw.exe -classpath ${CLASSPATH_DE_LANCEMENT}
-Xdebug 
-Xnoagent
-Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:1859 
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner 
-version 3 
-port 1858 
-testLoaderClass Org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader
-classNames ${CLASSE_LANCER_POUR_LE_TEST}
&lt;/pre&gt;

&lt;p&gt;Dans mon exemple les variables ${} sont bien s&#251;r diff&#233;rente. Je les ai remplac&#233; pour limiter un peu la place prise par la ligne de commande.&lt;/p&gt;

&lt;p&gt;Maintenant que vous avez cette ligne de commande, il suffit de faire quelque modification dessus et vous aurez votre ligne de commande compl&#232;te. Les modifications &#224; r&#233;aliser sont les suivantes :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suppression de l'option -Xdebug&lt;/li&gt;
&lt;li&gt;Suppression de l'option -Xnoagent&lt;/li&gt;
&lt;li&gt;Suppression de l'option -Xrunjdwp:transport=dt_socket,suspend=y,address=localhost:1859&lt;/li&gt;
&lt;li&gt;Suppression de -port 1858 &lt;/li&gt;
&lt;li&gt;Transformer l'ex&#233;cutable de lancement pas java.exe au lieu de javaw.exe&lt;/li&gt;
&lt;li&gt;Transformer la classe de lancement par junit.textui.TestRunner au lieu de org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestLoader qui est sp&#233;cifique &#224; Eclipse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Maintenant que vous avez r&#233;alis&#233; tous ces petits changements vous pouvez d&#233;sormais lancer la ligne de commande obtenu de la fa&#231;on suivante :&lt;/p&gt;

&lt;pre&gt;C:\bea\jdk142_05\bin\java.exe 
-classpath ${CLASSPATH_DE_LANCEMENT} 
junit.textui.TestRunner 
-version 3 
-classNames ${CLASSE_LANCER_POUR_LE_TEST}&lt;/pre&gt;

&lt;p&gt;Bien s&#251;r il y a d'autres techniques qui sont de simplement r&#233;cup&#233;rer le CLASSPATH par exemple et de le mettre dans notre ligne de commande.&lt;/p&gt;


</description>
      <pubDate>Thu, 27 Sep 2007 10:34:00 +0200</pubDate>
      <guid isPermaLink="false">urn:uuid:a898099f-07c9-4aad-8620-86e7838c7249</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/sortir-un-test-junit-%C3%A0-partir-dun-test-junit-declipse.html#comments</comments>
      <category>Java</category>
      <category>java</category>
      <category>junit</category>
      <category>bidouille</category>
      <link>http://blog.shingara.fr/sortir-un-test-junit-%C3%A0-partir-dun-test-junit-declipse.html</link>
    </item>
    <item>
      <title>Technique de controleurs entre Hibernate et Struts</title>
      <description>&lt;p&gt;
	Dans un pr&#233;c&#233;dent &lt;a
href=&quot;http://shingara.free.fr/blog/index.php/?2007/01/16/138-hibernate-et-les-
mappings&quot;&gt;billet sur Hibernate et les mappings&lt;/a&gt;, je me posais la question de
savoir comment s&#233;parer au maximum chaques fonctions dans une application J2EE
utilisant &lt;a href=&quot;http://www.hibernate.org/&quot;&gt;Hibernate&lt;/a&gt; et &lt;a href=&quot;http://struts.apache.org/&quot;&gt;Struts&lt;/a&gt;. Voici donc la
technique que j'ai fini par adopter, apr&#232;s r&#233;flexion. Cette technique est ma
propre technique et n'est peut-&#234;tre pas la meilleure.
&lt;/p&gt;

&lt;h1&gt;Contexte&lt;/h1&gt;

&lt;p&gt;
Dans une application J2EE utilisant Hibernate et Struts, nous utilisons
classiquement 3 composants:
&lt;/p&gt;

&lt;ul&gt;
	&lt;li&gt;Les mappings Hibernate&lt;/li&gt;
	&lt;li&gt;Les DAO (Database Access Object) pour toutes les communications &#224; la
base de donn&#233;e&lt;/li&gt;
	&lt;li&gt;Les actions Struts pour la gestion des requ&#234;tes HTTP de
l'utilisateur&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;
Mais voil&#224; avec ces 3 composants, les actions struts doivent utiliser
les mappings Hibernate et les DAO. les DAO eux devront utiliser les
mappings. Comme indiqu&#233; dans le sch&#233;ma suivant :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/images/DAO-MAPPING-STRUTS.png&quot; alt=&quot;Graphique repr&#233;sentant la communication DAO, Mapping et Action Struts&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Il manque donc un composant interm&#233;diaire entre les DAO et les
mappings qui sera le composant &#224; &#234;tre utilis&#233; par les actions Struts. ce
composant est appel&#233; &#171;Controleur&#187;.
&lt;/p&gt;

&lt;h1&gt;Les controleurs&lt;/h1&gt;

&lt;p&gt;
Le but du controleur est de faire la liaison entre le mapping Hibernate et
le DAO. En effet, le mapping doit &#234;tre un objet le plus l&#233;ger possible et
n'avoir en cons&#233;quence que des attributs et leurs getter/setter. Par contre, les
DAO ne stocke rien &#224; part la Session de connection &#224; la base de donn&#233;e. Ainsi
le controleur n'a pour seul champ priv&#233; obligatoire que le mapping. On peux
aussi lui adjoindre des donn&#233;es compl&#233;mentaires qui seront issues de
contraintes annexes et ainsi augmenter les possibilit&#233;s d'attribut interne &#224; la
classe. Mais des m&#233;thodes de confort pourront aussi lui &#234;tre ajout&#233;es comme la
m&#233;thode classique du save() qui se chargera de sauvegarder le mapping Hibernate
dans la session du DAO. Il aura ainsi plusieurs constructeurs avec diff&#233;rentes
possibilit&#233;s. Par contre, il faudra faire attention au getter/setter de attribut
qui ne sont pas issue du mapping et qui peuvent d&#233;pendre du constructeur. Une
bonne gestion des erreurs et &#224; pr&#233;voir. Ce syst&#232;me permet ainsi l'utilisation
unique du controleur dans l'actions Struts. Celui-ci n'aura qu'&#224; construire
l'objet et l'utiliser. L'action Struts n'aura plus aucun dialogue avec les
mappings et DAO. Comme montr&#233; sur le sch&#233;ma suivant :&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/blog/images/DAO-MAPPING-STRUTS-CONTROLER.png&quot; alt=&quot;Graphique repr&#233;sentant la communication DAO, Mapping, Action Struts et Controleur&quot; /&gt;&lt;/p&gt;

&lt;h1&gt;Cas des listes de mapping Hibernates&lt;/h1&gt;

&lt;p&gt;
Dans certain cas, on veux avoir une information suppl&#233;mentaire &#224; un
mapping et pour cela on utiliser les controleurs. Mais cette information peux
n&#233;cessit&#233; un calcul. Hors, au niveau du DAO, nous ne r&#233;cup&#233;rons qu'une liste
d'objet de
mapping. Pour ajouter des informations, il faudrait alors it&#233;rer sur tous les
&#233;l&#233;ments et leur ajouter les &#233;l&#233;ments voulus. Cette technique n'est pas optimum
dans le cas d'une utilisation partielle de la liste, comme avec l'utilisation de
&lt;a href=&quot;http://displaytag.sourceforge.net/11/&quot;&gt;Display Tag&lt;/a&gt; qui n'affichera
pas toutes les lignes et cr&#233;era une pagination. La
technique est donc de cr&#233;er un objet h&#233;ritant de ArrayList et de surcharger la
m&#233;thode get(int). Au moment de l'appel de cette m&#233;thode, nous ne renvoyons plus
de mapping, mais notre controleur se construit &#224; partir d'une liste d'objet
mapping. Le calcul des informations suppl&#233;mentaires ne se fera donc plus que
sur les objets r&#233;element demand&#233; et non sur tous les objets de la liste
initiale.
&lt;/p&gt;

&lt;h1&gt;Pourquoi cette impl&#233;mentation ?&lt;/h1&gt;

&lt;p&gt;
Je voulais par cette m&#233;thode n'obtenir que des objets le plus l&#233;ger possible.
En effet, je pr&#233;f&#233;re que mon programme utilise plus de petits objets que moins
d'objets, mais gros. Je voulais aussi que mes actions Struts soit le plus simple
possible &#224; lire. Car sans l'utilisation de ce proc&#233;d&#233;, je me retrouvais avec
des actions comprenant &#233;norm&#233;ment de ligne de code. Cette technique rend le
code plus simple &#224; lire et &#224; comprendre. Je voulais aussi effectuer les
traitements non n&#233;cessaire qu'&#224; la fin pour ainsi permettre de n'effectuer que
le n&#233;cessaire et &#233;viter ainsi le superflu.
&lt;/p&gt;

&lt;p&gt;Pour les curieux, j'ai fait mes graphiques gr&#226;ce &#224; Graphivz que je ne maitrise h&#233;las pas trop. Vous pouvez trouver les sources des scripts de cr&#233;ation &lt;a href=&quot;/exportation/script/dot/&quot;&gt;ici&lt;/a&gt;&lt;/p&gt;

</description>
      <pubDate>Wed, 07 Mar 2007 15:37:09 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:386d8c57-690c-47d3-94f6-efa2325e0b8a</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/technique-de-controleurs-entre-hibernate-et-struts.html#comments</comments>
      <category>Java</category>
      <link>http://blog.shingara.fr/technique-de-controleurs-entre-hibernate-et-struts.html</link>
    </item>
    <item>
      <title>Hibernate et les mappings</title>
      <description>&lt;p&gt;
Salut, Je fais appel au net pour une logique de conception Java et surtout une aide sur Hibernate. En effet sans syst&#232;me de mapping Hibernate j'aurais trouv&#233; la solution que je veux, mais l&#224; je veux utiliser au maximum de les possibilit&#233;s d'Hibernate. Voici ce que je d&#233;sire faire :
&lt;/p&gt;

&lt;p&gt;
J'ai des listes avec un nom. Dans chaque listes, il y a des produits. Mais pour chaque listes il peux y avoir plusieurs fois le m&#234;me produit. Voici les deux solutions que j'ai au niveau SQL pur :
&lt;/p&gt;

&lt;h2&gt;Tout en SQL&lt;/h2&gt;

&lt;p&gt;Cette solution se base sur le comptage du nombre de lien entre une liste et un produit.&lt;/p&gt;

&lt;pre&gt;
CREATE TABLE List (
  id INT PRIMARY KEY,
  name VARCHAR,
);

CREATE TABLE Product (
  id INT PRIMARY KEY,
  name VARCHAR,
);

CREATE TABLE ListToProduct (
  id int PRIMARY KEY,
  Product_id int,
  List_id int,
);
&lt;/pre&gt;

&lt;p&gt;Sur cette table pour savoir le nombre de produit A dans la liste B il faut faire en SQL pur une requ&#234;te de type &lt;code&gt;SELECT COUNT(*) FROM ListToProduct WHERE Product_id='A' AND List_id='B'&lt;/code&gt; o&#249; A et B sont les id respectif de notre produit et liste.&lt;/p&gt;

&lt;p&gt;Au niveau d'hibernate, j'ai trouv&#233; comment faire un mapping assez simple pour obtenir la liste des Produits d'un liste :&lt;/p&gt;

&lt;pre&gt;
    &amp;lt;list name=&quot;listsName&quot; table=&quot;ListToProduct&quot; &amp;gt;
	&amp;lt;key column=&quot;product_id&quot; /&amp;gt;
        &amp;lt;index column=&quot;list_name_to_product_id&quot; /&amp;gt;
        &amp;lt;many-to-many column=&quot;list_id&quot; class=&quot;List&quot; /&amp;gt;
    &amp;lt;/list&gt;
&lt;/pre&gt;

&lt;p&gt;Au niveau du type de retour dans mon POJO, j'ai un attribut du type List&amp;lt;Produit&amp;gt;. Ca marche tr&#232;s bien dans un syst&#232;me de navigation entre mes produits et listes. Mais je me suis trouv&#233; confront&#233; au probl&#232;me du comptage. Combien il y a de Produit A dans ma liste B. La seule solution est de faire :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Soit une requete SQL par ligne avec un COUNT(*)&lt;/li&gt;
&lt;li&gt;Soit un parcours de ma liste pour compter le nombre d'occurrence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Je ne pense pas qu'aucune de ces deux techniques soit tr&#232;s performante. De m&#234;me je n'ai trouv&#233; aucun syst&#232;me au sein d'hibernate pour avoir imm&#233;diatement le r&#233;sultat. Comme dans une sous-requ&#234;te avec un DISTINCT peut-&#234;tre ?&lt;/p&gt;

&lt;h2&gt;Faire le comptage directement en base de Donn&#233;e&lt;/h2&gt;

&lt;p&gt;Normalement en SQL pur et propre il est recommand&#233; de ne pas faire de calcul directement dans la Base de donn&#233;e. On ne doit rien stocker qui est potentiellement calculable. Dans notre cas, l'ajout du nombre de Produit dans la liste au niveau de la table de liaison permet de diminuer potentiellement le nombre de ligne d'enregistrement tout en augmentant le nombre de colonne. Th&#233;oriquement l'am&#233;lioration peux peux-&#234;tre interressante si toutes nos listes ont en moyenne plus de 3 produits.&lt;/p&gt;

&lt;p&gt;La nouvelle base de donn&#233;e serait donc identique &#224; la pr&#233;c&#233;dente sauf la table ListToProduct qui serait la suivante :&lt;/p&gt;

&lt;pre&gt;
CREATE TABLE ListToProduct (
  id int PRIMARY KEY,
  Product_id int,
  List_id int,
  count int,
);
&lt;/pre&gt;

&lt;p&gt;Avec cette technique, au lieu de rajouter une ligne dans la table de liaison au moment de l'ajout d'un produit existant dans une liste, le compteur est incr&#233;ment&#233;. Il ne reste donc ensuite qu'&#224; lire la valeur dans count pour savoir le nombre exacte de Produit du type A dans la liste B. Cette technique me semble assez int&#233;ressantes. Mais voil&#224;, je suis incapable de la mettre en place avec un mapping hibernate. J'ai test&#233; les components, les many-to-one. Mais rien n'y fait. Il doit vraiment y avoir un truc que je n'ai pas compris et je ne sais pas quoi. C'est aussi pour ca que je fais appel &#224; tous.&lt;/p&gt;

&lt;p&gt;
Donc si vous avez une id&#233;e sur la meilleur solution &#224; employer et aussi comment la mettre en place avec Hibernate, je suis preneur.&lt;/p&gt;

</description>
      <pubDate>Tue, 16 Jan 2007 23:36:22 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:3c244e4a-ab75-4654-a391-6da4b6f6c101</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/hibernate-et-les-mappings.html#comments</comments>
      <category>Java</category>
      <link>http://blog.shingara.fr/hibernate-et-les-mappings.html</link>
    </item>
    <item>
      <title>Diff&#233;rence entre Netbeans et Eclipse Episode 2</title>
      <description>&lt;p&gt;
Alors que j'ai encore pass&#233; une bonne soir&#233;e &#224; installer mon environnement de d&#233;veloppement et j'ai heureusement fini par y arriver. Maintenant je ne vais plus y toucher du tout et faire en sorte que ca soit stable. Je pense aussi avoir compris d'o&#249; vient le probl&#232;me. En effet, mon projet a &#233;t&#233; cr&#233;&#233; avec une version d'eclipse plugger qui s'appele &lt;a href=&quot;http://www.easyeclipse.org/site/home/&quot;&gt;easyeclipse&lt;/a&gt; version 1.0.1 bas&#233; sur &lt;a href=&quot;http://www.eclipse.org&quot;&gt;Eclipse&lt;/a&gt; 3.1. Chez moi j'ai donc voulu upgrader eclipse et passer par easyeclipse 1.2.1 qui est bas&#233; sur Eclipse 3.2. Mais voil&#224; le changement de version est pas tr&#232;s appr&#233;ci&#233; par Eclipse. En cons&#233;quence,  je pense que mes probl&#232;mes &#233;taient principalement li&#233; &#224; cette modification d'environnement.
&lt;/p&gt;

&lt;p&gt;
Ce qui m'am&#232;ne au probl&#232;me que je ressens avec Eclipse et son support SVN. En effet, une fois que tu as fait le premier commit de ton application avec une version d'Eclipse il ne faut pas changer. m&#234;me pour d'autre version comme &lt;a href=&quot;http://forge.objectweb.org/projects/lomboz&quot;&gt;Lomboz&lt;/a&gt; ou &lt;a href=&quot;http://www.myeclipseide.com/&quot;&gt;MyEclipse&lt;/a&gt;. En effet, chacun d'eux a sa propre gestion des serveurs type Tomcat et ne permet d'attacher qu'un projet de leur jus au serveur. Mais par contre comme &lt;a href=&quot;http://www.netbeans.org&quot;&gt;netbeans&lt;/a&gt; int&#233;gre de base une gestion de serveur type Tomcat, avec l'import SVN. Il est ainsi tr&#232;s facile de cr&#233;er un projet web et de lui donner les valeurs de checkout de notre SVN. Alors qu'avec Eclipse en faisant un Checkout nous ne pouvons que cr&#233;er un nouveau projet. Nous ne pouvons pas l'attacher &#224; un projet existant :(.
&lt;/p&gt;

</description>
      <pubDate>Thu, 21 Dec 2006 10:01:34 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:8653cde9-63c0-4b78-b078-4457e495bf78</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/diff%C3%A9rence-entre-netbeans-et-eclipse-episode-2.html#comments</comments>
      <category>Java</category>
      <link>http://blog.shingara.fr/diff%C3%A9rence-entre-netbeans-et-eclipse-episode-2.html</link>
    </item>
    <item>
      <title>NetBeans et Eclipse pour du J2EE</title>
      <description>&lt;p&gt;
Actuellement devant coder une application J2EE pour mon &#233;cole, j'ai pris le temps de tester un peu deux gros IDE libres existant sur le march&#233; pour d&#233;velopper du J2EE. Voici un tr&#232;s rapide comparatif que je vais faire.
&lt;/p&gt;

&lt;p&gt;
Au premier abord Eclipse est de loin le meilleur, mais a de gros probl&#232;mes de plugin. Ainsi je me retrouve &#224; ne plus pouvoir ouvrir une JSP sans faire planter eclipse, ce qui est assez g&#234;nant pour faire du J2EE. 
&lt;/p&gt;

&lt;p&gt;
En passant sous netbeans, j'y ai vu une int&#233;gration compl&#232;te de gestion de serveur Web type TOMCAT ainsi, j'ai juste &#224; d&#233;finir mon contexte et tout est fait. Mais voil&#224; j'ai trouv&#233; un probl&#232;me que je consid&#232;re majeur dans le d&#233;veloppement rapide d'application web, l'obligation de recr&#233;er compl&#232;tement le projet &#224; chaque d&#233;ploiement. Ainsi, je suis oblig&#233; de copier mes sources, les compil&#233;s et cr&#233;er un WAR pour enfin d&#233;ployer l'application. Cela prend ainsi tr&#232;s facilement 5 min &#224; faire et tout &#231;a pour une application qui ne compte encore que 2 pages. D&#233;j&#224; que je pestais contre les 5 secondes de red&#233;marrage de Tomcat, les 5 min seront h&#233;las de trop pour moi. Esp&#233;rons que cela sera impl&#233;ment&#233; dans les futurs version de netbeans et on aura un produit vraiment tr&#232;s sympa qui pourra compl&#232;tement rivaliser avec Eclipse.
&lt;/p&gt;

&lt;p&gt;
On voit tout de suite le probl&#232;me de d&#233;veloppement d'application J2EE, la compilation est tr&#232;s longue. C'est l&#224; que les langages de scripting permettent de gagner beaucoup de temps.
&lt;/p&gt;

&lt;p&gt;
En tout cas apr&#232;s une soir&#233;e de tentative de mise en place d'un projet J2EE sur mon PC, je suis bon pour recommencer vu que je n'ai toujours pas r&#233;ussi.
&lt;/p&gt;

</description>
      <pubDate>Wed, 20 Dec 2006 09:27:08 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:d8dfeb08-c7db-457e-beff-683672c45a57</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/netbeans-et-eclipse-pour-du-j2ee.html#comments</comments>
      <category>Java</category>
      <link>http://blog.shingara.fr/netbeans-et-eclipse-pour-du-j2ee.html</link>
    </item>
    <item>
      <title>setOpaque true or false ?</title>
      <description>&lt;p&gt;
La m&#233;thode &lt;a href=&quot;http://java.sun.com/j2se/1.5.0/docs/api/javax/swing/JComponent.html#setOpaque(boolean)&quot;&gt;setOpaque&lt;/a&gt; de la Classe Jcomponent a un comportement particulier. En effet, j'ai pris juste deux petites heures &#224; trouver comment mettre un JLabel avec une couleur de fond. Une fois la m&#233;tode setBackground(Color) utilis&#233;, je ne constatais aucun r&#233;sultat. J'ai donc quand m&#234;me fini par comprendre.
&lt;/p&gt;
&lt;p&gt;
En effet, la m&#233;thode setOpaque est &#224; &quot;false&quot; dans le cas d'un JLabel, il n'est &#224; true que pour les JButton. Maintenant que je le sais, je ne referais plus cette erreur.
&lt;/p&gt;

</description>
      <pubDate>Fri, 24 Feb 2006 12:26:38 +0100</pubDate>
      <guid isPermaLink="false">urn:uuid:5631d917-3ec0-4a9e-b6ec-5f03e19be5c7</guid>
      <author>cyril.mougel@gmail.com (Cyril Mougel)</author>
      <comments>http://blog.shingara.fr/setopaque-true-or-false.html#comments</comments>
      <category>Java</category>
      <link>http://blog.shingara.fr/setopaque-true-or-false.html</link>
    </item>
  </channel>
</rss>
