<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
>

<channel>
	<title>Formation java, formation UML, conseil - sewatech</title>
	<link>http://www.sewatech.fr/</link>
	<description></description>
	<language>fr</language>
	<generator>SPIP - www.spip.net</generator>





	<item>
		<title>Enrichir les logs avec LogWEx</title>
		<link>http://www.sewatech.fr/article-log4j-logwex.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-log4j-logwex.html</guid>
		<dc:date>2010-09-02T20:46:30Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>jboss</dc:subject>
		<dc:subject>j2ee web</dc:subject>
		<dc:subject>tomcat</dc:subject>

		<description>Comment afficher l'identifiant de session, le nom de l'utilisateur et bien d'autres informations dans les logs applicatifs.

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--jboss-+.html" rel="tag"&gt;jboss&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--j2ee-web-+.html" rel="tag"&gt;j2ee web&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--tomcat-+.html" rel="tag"&gt;tomcat&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p class=&quot;spip&quot;&gt;Pla&#231;ons nous dans le cadre d'une application d&#233;velopp&#233;e correctement, avec des bonnes traces envoy&#233;es dans un utilitaire correct de type Log4J, &#233;ventuellement via une fa&#231;ade comme commons-logging ou, beaucoup mieux, SLF4J. Gr&#226;ce &#224; la configuration de Log4J, il est possible de choisir les informations qui apparaissent dans les fichiers de logs en plus du message &#224; proprement parler : heure, niveau du log (erreur, alerte, info, debug, trace), le logger d'origine. Lorsqu'on est en d&#233;veloppement, on peut aussi ajouter des informations plus pr&#233;cises sur l'origine comme la m&#233;thode et la ligne de code qui a envoy&#233; le message.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il nous manque souvent une information important : quel utilisateur a &#233;t&#233; &#224; l'origine du log ? Qu'a fait ce m&#234;me utilisateur avant d'en arriver l&#224; ? Voyons comment on peut avoir ces informations dans les logs...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;Dans les logs des applications Web, on ajoute tr&#232;s souvent le nom du thread. Ceci permet de reconstituer une s&#233;quence de traces qui correspond au traitement d'une requ&#234;te HTTP. En effet, dans les serveurs d'applications Web classiques, comme Tomcat, Jetty, JBoss, Weblogic,&#8230;, un thread est affect&#233; au traitement de chaque requ&#234;te, jusqu'&#224; la production de la r&#233;ponse. Par contre, plusieurs requ&#234;tes cons&#233;cutives d'un m&#234;me utilisateur peuvent tr&#232;s bien &#234;tre trait&#233;es par des threads diff&#233;rents. L'affichage du nom du thread dans les logs est donc insuffisant pour reconstituer un historique plus important pour un utilisateur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Il existe plusieurs techniques pour obtenir un r&#233;sultat satisfaisant. La fa&#231;on la plus riche est d'utiliser des outils d&#233;di&#233; aux audits. Pour plus d'informations sur le sujet, je vous renverrais vers l'&lt;a href=&quot;http://blog.xebia.fr/2010/08/25/java-en-production-laudit/&quot; class=&quot;spip_out&quot;&gt;article de Cyrille Leclerc et David Galichet&lt;/a&gt; et aux discussions associ&#233;es. Dans mon cas, je vais m'int&#233;resser aux applications pour lesquelles un tel besoin n'a pas &#233;t&#233; pris en compte au d&#233;veloppement. En gros, on n'a que les logs. Dans ce cas, la technique qui ne n&#233;cessite aucun d&#233;veloppement passe par un croisement entre les logs applicatifs et les logs d'acc&#232;s (cf. &lt;a href=&quot;http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Access_Log_Valve&quot; class=&quot;spip_out&quot;&gt;AccessLogValve&lt;/a&gt;, pour Tomcat). Ce dernier nous donne des informations comme l'Id de session, l'utilisateur authentifi&#233;, s'il l'a &#233;t&#233; par une technique standard et le nom de thread. Tout cela est r&#233;alisable puisque le nom du thread est pr&#233;sent dans les deux fichiers, mais fastidieux.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Donc il va falloir d&#233;velopper. Au minimum, il faut faire un &lt;a href=&quot;http://download.oracle.com/javaee/5/api/javax/servlet/Filter.html&quot; class=&quot;spip_out&quot;&gt;filtre&lt;/a&gt; qui va intercepter les requ&#234;tes. Pour chaque requ&#234;te, on peut envoyer une trace de d&#233;but et une trace de fin, avec les m&#234;mes informations que pour les logs d'acc&#232;s, &#224; la diff&#233;rence que dans le cas du filtre, les traces sortiront avec les logs applicatifs. En centralisant ces traces, l'exploitation est un peu plus simple.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'id&#233;al serait d'avoir toutes les informations directement dans chaque trace applicative. Dans ce cas, des outils rudimentaires comme grec ou un tableur suffiront pour exploiter les informations. Pour arriver &#224; ce r&#233;sultat, on va &lt;a href=&quot;http://www.jtips.info/index.php?title=Log4J/MDC&quot; class=&quot;spip_out&quot;&gt;utiliser le MDC&lt;/a&gt; (Mapped Diagnostic Context) de &lt;a href=&quot;http://logging.apache.org/log4j/&quot; class=&quot;spip_out&quot;&gt;Log4J&lt;/a&gt; pour que notre filtre y stocke les informations n&#233;cessaires (identifiant de session, nom d'utilisateur,...).&lt;/p&gt; &lt;pre class=&quot;sw_code&quot;&gt; MDC.put(&quot;session.id&quot;, session.getId()) ;
&lt;/pre&gt;
&lt;p class=&quot;spip&quot;&gt;Une fois les informations pr&#233;sentes dans le MDC, il est facile de param&#233;trer la layout de Log4 pour qu'elles sortent dans les fichiers de logs : %X&lt;i class=&quot;spip&quot;&gt;session.id&lt;/i&gt;. L'avantage de cette technique, c'est qu'on n'est plus oblig&#233; de ce contenter d'information standards, on peut tr&#232;s facilement ajouter des informations pr&#233;sentes en attributs de session et les ajouter au MDC.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Ayant eu &#224; d&#233;velopper ce type de filtre pour plusieurs clients, nous avons d&#233;cider de d&#233;velopper un tel filtre sous licence Open Source, sous le nom de &lt;a href=&quot;http://logwex.sewatech.org/&quot; class=&quot;spip_out&quot;&gt;LogWEx&lt;/a&gt; (Logging Extra for Web applications). L'objectif du projet est de vous fournir un filtre g&#233;n&#233;rique qui vous fournisse les informations n&#233;cessaire uniquement par configuration, sans d&#233;veloppement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La premi&#232;re version ne fournit que l'identifiant de session, le nom de l'utilisateur et les propri&#233;t&#233;s de la requ&#234;te (hosto, port, pat,&#8230;). Les prochaines versions devraient s'enrichir rapidement pour atteindre l'objectif. Pour l'instant, LogWEx n'est utilisable qu'avec Log4J car c'est l'outil le plus utilis&#233; par nos clients, mais nous &#233;valuerons rapidement l'opportunit&#233; de supporter aussi LogBack qui est les meilleur outil de log du moment.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;J'invite donc tous ceux qui veulent enrichir leurs logs &#224; essayer &lt;a href=&quot;http://logwex.sewatech.org/&quot; class=&quot;spip_out&quot;&gt;LogWEx&lt;/a&gt; et &#224; nous faire leurs retours sur le &lt;a href=&quot;http://github.com/hasalex/logwex/issues&quot; class=&quot;spip_out&quot;&gt;bug tracker&lt;/a&gt; du projet sur GitHub.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour en savoir plus : &lt;a href=&quot;http://logwex.sewatech.org&quot; class=&quot;spip_out&quot;&gt;projet LogWEx&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>JavaSE 6 update 10, un update majeur ?</title>
		<link>http://www.sewatech.fr/article-java6update10.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-java6update10.html</guid>
		<dc:date>2008-10-21T19:37:56Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>java</dc:subject>

		<description>La derni&#232;re mise &#224; jour de JavaSE 6 &#233;tait annonc&#233;e comme aussi importante la version 6 elle-m&#234;me. M&#234;me si ce n'est qu'une &#233;volution th&#233;oriquement mineure, elle apporte des changements qui pourraient bien changer la fa&#231;on de d&#233;velopper et de d&#233;ployer des applications Java.

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--java-+.html" rel="tag"&gt;java&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p class=&quot;spip&quot;&gt;Normalement, en Java, un update a pour seul objectif de corriger des anomalies. Depuis Java 5, la notion de mise &#224; jour mineure n'existe plus ; pour preuve, le num&#233;ro de version ne comporte plus qu'un seul chiffre : JavaSE 6 ou JavaSE 7. Nous sommes bien loin de l'antique num&#233;rotation &#224; rallonges qui pr&#233;valait il y a quelques ann&#233;es avec des J2SE 1.4.2 !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cependant, il reste important pour Sun de corriger les bugs et de combler les failles de s&#233;curit&#233;. C'est le r&#244;le des updates. Normalement, une mise &#224; jour de ce type ne devrait modifier le fonctionnement de Java que sur des aspects secondaires, et uniquement en relation avec les bugs corrig&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;A l'oppos&#233; de ces modifications mineures, l'update 10 de JavaSE 6 marque un tournant important dans la philosophie de distribution de Java. Par contre, la syntaxe, les classes et interfaces n'ont pas chang&#233; ; il faudra attendre JavaSE 7 pour cela. C'est pour cela que cette mise &#224; jour est consid&#233;r&#233;e comme mineure.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Quoi de neuf ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;La grande nouveaut&#233; apport&#233;e par cette mise &#224; jour est l'abandon de la structure monolithique du runtime JavaSE.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le fichier d'installation complet du Java Runtime Environment 6 (ou JRE 6), pour Windows, fait environ 15 Mo. Cela fait d'ailleurs plusieurs versions que la taille a &#233;t&#233; stabilis&#233;e &#224; ce niveau. Le probl&#232;me devient flagrant lors des mises &#224; jour, puisque l'ensemble du JRE est t&#233;l&#233;charg&#233; et devient vraiment p&#233;nalisant dans des environnement Web, lorsque Java veut concurrencer Adobe Flash ou Microsoft Silverlight. Or c'est justement sur ce terrain que Sun s'est engag&#233; avec JavaFX.&lt;/p&gt; &lt;h2&gt;JavaFX et applet&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;JavaFX est en effet la proposition technique de Sun pour le d&#233;veloppement de Rich Internet Applications (RIA). Ce type de solution doit allier la souplesse du d&#233;ploiement d'applications Web avec une plus grande richesse graphique et une meilleure ergonomie.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;JavaFX ne fait pas partie de JavaSE 6 update 10, il ne sortira qu'en fin d'ann&#233;e. Mais on peut consid&#233;rer que cette mise &#224; jour pr&#233;pare le terrain.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Sun a d'ailleurs &#233;t&#233; parmi les pionniers dans le domaine, avec la technique des applets. Mais les contraintes en terme de gestion des &#233;volutions et les incompatibilit&#233;s entre les versions du JRE ont eu la peau de cette technique. Depuis la fin des ann&#233;es 90, je conseille &#224; mes clients de tout faire pour &#233;viter d'utiliser les applets !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les choses pourraient bien changer avec cette mise &#224; jour... Elle embarque tout simplement une mise &#224; jour du plug-in Java, le composant du JRE qui se branche sur les navigateurs pour prendre en charge l'ex&#233;cution des applets. Et cette nouvelle version arrive avec son lot de nouveaut&#233;s plut&#244;t int&#233;ressante.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;D'un point de vue technique, la r&#233;volution vient du nouveau mod&#232;le d'ex&#233;cution des applets et de son rapprochement avec la technique JNLP de WebStart. Auparavant, une applet s'ex&#233;cutait au sein du m&#234;me processus que le navigateur Web. Ceci emp&#234;chait tout cohabitation entre versions de Java. Aujourd'hui, m&#234;me si l'applet est ouverte depuis un navigateur, elle s'ex&#233;cute dans le processus autonome d'une JRE.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par d&#233;faut, un seul processus Java est d&#233;marr&#233;, pour toutes les applets, mais il est possible d'en d&#233;marrer plusieurs, ce qui ouvre de nombreuses possibilit&#233;s, comme celle de faire coexister plusieurs versions de Java. Il est aussi possible de passer des param&#232;tres diff&#233;rents, comme pour un lancement en ligne de commande, pour am&#233;liorer les performances. Dans l'exemple suivant, l'applet se lance dans une machine virtuelle autonome, avec un param&#233;trage m&#233;moire sp&#233;cifique :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&amp;lt;APPLET archive=&quot;sewapplet.jar&quot; code=&quot;Sewatech Applet&quot; width=&quot;800&quot; height=&quot;300&quot;&amp;gt;&lt;br /&gt; &amp;lt;PARAM name=&quot;java_arguments&quot; value=&quot;-Xmx256m&quot;&quot;&amp;gt; &lt;br /&gt; &amp;lt;PARAM name=&quot;separate_jvm&quot; value=&quot;true&quot;&amp;gt;&lt;br /&gt; &amp;lt;/APPLET&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Autre nouveaut&#233;, visuelle celle-ci, avec les applets draggables. Cette technique permet de transf&#233;rer une applet, qui s'ex&#233;cute dans un navigateur, vers le bureau. Un application Web devient alors une application desktop. Pour que l'applet soit draggable, il faut ajouter un &#233;l&#233;ment dans sa d&#233;claration, au niveau de la page HTML :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt;&amp;lt;APPLET archive=&quot;sewapplet.jar&quot; code=&quot;Sewatech Applet&quot; width=&quot;800&quot; height=&quot;300&quot;&amp;gt;&lt;br /&gt; &amp;lt;PARAM name=&quot;draggable&quot; value=&quot;true&quot;&amp;gt;&lt;br /&gt; &amp;lt;/APPLET&amp;gt;&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Rien que cela peut nous r&#233;concilier avec les applets.&lt;/p&gt; &lt;h2&gt;D&#233;ploiement&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;En fait, la principale &#233;volution vient du mod&#232;le d'installation du JRE. Fini le t&#233;l&#233;chargement d'un gros fichier de 15 Mo sous Windows, ou 18 &#224; 19 Mo sous Linux, desquels on n'utilise que 30 &#224; 40%.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans le mod&#232;le d'installation classique, qui est toujours utilisable, le JRE est un ensemble monolithique qu'on installe dans sa globalit&#233;, quel que soit le type d'application qu'on veut ex&#233;cuter. M&#234;me pour une application en ligne de commande, on installe les classes graphiques, et m&#234;me pour un &#233;cran simple, on doit installer les API de management ou CORBA.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans le nouveau mod&#232;le, on installe d'abord le noyau du JRE avec le &lt;i class=&quot;spip&quot;&gt;Java Kernel Installer&lt;/i&gt; ; ce fichier fait entre 5 et 7 Mo. Les modules suppl&#233;mentaires ne sont t&#233;l&#233;charg&#233;s qu'en cas de besoin. De plus, en utilisant les possibilit&#233;s de JNLP, on peut pr&#233;ciser des URL d'extensions n&#233;cessaires &#224; l'applet, qui seront automatiquement t&#233;l&#233;charg&#233;es.&lt;/p&gt; &lt;h2&gt;Et le JDK ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Du cot&#233; du JDK, il n'y a pas de changement aussi radical. Le fichier &#224; t&#233;l&#233;charger est toujours en un seul bloc de plusieurs dizaines de Mo (plus de 70 Mo, pour Windows). Cela reste pr&#233;f&#233;rable, puisque je vois mal mon &#233;diteur de code commencer &#224; t&#233;l&#233;charger des composants du JDK avec de me lancer continuer une classe.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le seul impact est donc dans la fa&#231;on de d&#233;velopper des applets et des applications WebStart.&lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;La plupart des projets ne verront pas de changement significatif avec cette nouvelle mise &#224; jour. Les applets sont, et resteront encore longtemps, marginales dans les architectures. Nous attendrons toutefois de voir comment JavaFX arrivera &#224; s'imposer face &#224; des concurrents bien plus avanc&#233;s comme Adobe Flex.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Utilisez les types abstraits</title>
		<link>http://www.sewatech.fr/article-types-abstraits.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-types-abstraits.html</guid>
		<dc:date>2007-12-20T14:32:24Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>conception objet</dc:subject>

		<description>Utilisez les types les plus abstraits possibles (interfaces, classes abstraites) dans vos conceptions et vos d&#233;veloppements ; m&#234;me quand ce n'est pas naturel.

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--conception-objet-+.html" rel="tag"&gt;conception objet&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;Les bonnes pratiques de conception imposent de concevoir toutes les classes orient&#233;es services (m&#233;tier, acc&#232;s aux donn&#233;es et services connexes) sous forme duale, une interface et une classe d'impl&#233;mentation, et d'&#233;tablir les d&#233;pendances vers les interfaces. Les classes ne sont utilis&#233;es que pour l'instanciation, de pr&#233;f&#233;rence via une factory (design pattern factory ou abstract factory).&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Types abstraits et types concrets&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Par exemple, dans une application de gestion de cours, la couche m&#233;tier est constitu&#233;e d'une interface CourseService et d'une classe CourseServiceImpl et la couche d'acc&#232;s aux donn&#233;es est constitu&#233;e d'une interface CoursDAO et d'une classe CourseDAOJdbc. Cette classe impl&#233;menente le contrat impos&#233; par l'interface avec l'API d'acc&#232;s aux bases de donn&#233;es JDBC.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_7 spip_documents spip_documents_center' &gt;
&lt;img src='http://www.sewatech.fr/local/cache-vignettes/L384xH191/courses-c34fa.jpg' width='384' height='191' alt=&quot;&quot; style='height:191px;width:384px;' class='' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;En d&#233;veloppement, cette pratique se traduit par l'utilisation la plus g&#233;n&#233;ralis&#233;e possible d'interfaces pour les d&#233;clarations (attributs, arguments de m&#233;thodes,...). Cela se traduit oar exemple par l'utilisation de classes telles que ArrayList, HashSet ou HashMap uniquement au moment du new ; les interfaces List ou Collection, Set et Map sont utilis&#233;es partout ailleurs, c'est-&#224;-dire pour les d&#233;clarations.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Exemple :&lt;/p&gt;
&lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; public class CourseDAOImpl [&lt;br /&gt; List&amp;lt;CourseData&amp;gt; findAll() {&lt;br /&gt; List&amp;lt;CourseData&amp;gt; result = new ArrayList&amp;lt;CourseData&amp;gt;();&lt;br /&gt; //...&lt;br /&gt; return result;&lt;br /&gt; }&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Les exemples de cette nature peuvent aussi &#234;tre trouv&#233;s avec des types plus techniques comme javax.sql.DataSource et toutes les interfaces JDBC donc on ne connait normalement pas les impl&#233;mentations.&lt;/p&gt; &lt;h2&gt;Pourquoi ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Dans le cadre de la conception, cette fa&#231;on de construire l'application a essentiellement deux avantages.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le premier est l'interchangeabilit&#233; des impl&#233;mentations. Ainsi la classe CourseDAOJdbc qui impl&#233;mente l'interface CourseDAO peut facilement &#234;tre remplac&#233;e par CourseDAOHibernate, qui impl&#233;mente la m&#234;me interface. Ceci est l'application concr&#232;te du principe de substitution de Liskov (j'aime trop le nom de ce principe pour ne pas le citer).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'autre avantage est la rationalisation de la gestion des d&#233;pendances : les &#233;l&#233;ments concrets d&#233;pendent d'&#233;l&#233;ments plus abstraits et les &#233;l&#233;ments instables d&#233;pendent d'&#233;l&#233;ments plus stables. [r&#233;f&#233;rence...].&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_8 spip_documents spip_documents_left' style='float:left; width:520px;' &gt;
&lt;img src='http://www.sewatech.fr/local/cache-vignettes/L520xH268/architecture-a9c0a.jpg' width='520' height='268' alt=&quot;&quot; style='height:268px;width:520px;' class='' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les interfaces ont beaucoup moins de d&#233;pendances que les classes et comme ces interfaces sont la colonne vert&#233;brale de l'architecture en couches, cela constitue une cha&#238;ne de d&#233;pendances propres et sans cycle. Les d&#233;pendances sont plus touffues au niveau des classes.&lt;/p&gt; &lt;h2&gt;M&#234;me pour les types num&#233;riques !&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;R&#233;cemment, j'ai regrett&#233; de ne pas appliquer syst&#233;matiquement cette r&#232;gle de programmation.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;En effet, lorsque je travaille avec des types num&#233;riques, j'utilise directement les types concrets : Integer, Long,... Or ces classes h&#233;rtient toutes de Number, que j'aurais pu (et d&#251; ?) utiliser plus souvent.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;span class='spip_document_9 spip_documents spip_documents_center' &gt;
&lt;img src='http://www.sewatech.fr/local/cache-vignettes/L520xH255/number-585f4.jpg' width='520' height='255' alt=&quot;&quot; style='height:255px;width:520px;' class='' /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Concr&#232;tement, c'est avec hibernate que j'ai rencontr&#233; un probl&#232;me avec le type Number et ses sous-classes.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Hibernate supporte dans son langage HQL (Hibernate Query Language) des fonctions qui renvoient un nombre entier : count, max, min,... Pour executer ces fonctions, on ex&#233;cute une query, puis on r&#233;cup&#232;re le r&#233;sultat.&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; public int count() {&lt;br /&gt; Session session = getSessionFactory().getCurrentSession();&lt;br /&gt; Query query = session.createQuery(&quot;select count(*) from Course&quot;);&lt;br /&gt; int result = ( (Integer)query.uniqueResult() ).intValue();&lt;br /&gt; return result;&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;L'exemple pr&#233;c&#233;dent fonctionne parfaitement avec Hibernate 3.1 car ces fonctions renvoient des Integer. Par contre, il ne passe pas la migration vers Hibernate 3.2 ! En effet, les fonctions ont &#233;volu&#233; et renvoient maintenant des Long.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si j'avais respect&#233; le principe enonc&#233; en introduction, je n'aurais pas du utiliser Integer car tout ce dont j'avais besoin &#233;tait la m&#233;thode intValue qui est d&#233;finie dans Number. J'aurais donc du &#233;crire le code suivant :&lt;/p&gt; &lt;div style='text-align: left;' class='spip_code' dir='ltr'&gt;&lt;code&gt; public int count() {&lt;br /&gt; Session session = getSessionFactory().getCurrentSession();&lt;br /&gt; Query query = session.createQuery(&quot;select count(*) from Course&quot;);&lt;br /&gt; int result = ( (Number) query.uniqueResult() ).intValue();&lt;br /&gt; return result;&lt;br /&gt; }&lt;/code&gt;&lt;/div&gt;
&lt;p class=&quot;spip&quot;&gt;Ce code respecte le principe d'utilisation des types abstrait et passe sans encombre la migration vers Hibernate 3.2.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le principe peut s'appliquer partout, m&#234;me l&#224; o&#249; on l'attend le moins...&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>10 ans d'UML, et apr&#232;s...</title>
		<link>http://www.sewatech.fr/article-uml.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-uml.html</guid>
		<dc:date>2007-05-19T20:55:22Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>conception objet</dc:subject>
		<dc:subject>uml</dc:subject>

		<description>UML a 10 ans, ce qui nous permet de prendre du recul par rapport &#224; tous les projets qui se sont appuy&#233;s dessus.

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--conception-objet-+.html" rel="tag"&gt;conception objet&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--uml-+.html" rel="tag"&gt;uml&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p class=&quot;spip&quot;&gt;Apr&#232;s 10 ans de pratique d'UML, on commence a avoir suffisamment de recul pour conna&#238;tre les forces et faiblesses du langage et de ses outils. Il est temps de se rem&#233;morer les projets sur lesquels UML nous a &#233;t&#233; utile et tous les probl&#232;mes rencontr&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Apr&#232;s toutes ces ann&#233;es, on peut m&#234;me aller jusqu'&#224; se demander si UML est toujours d'actualit&#233; et s'il est encore vraiment utile...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Les objectifs d'UML&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;UML [&lt;a href=&quot;http://www.sewatech.fr/#nb1-1&quot; name=&quot;nh1-1&quot; id=&quot;nh1-1&quot; class=&quot;spip_note&quot; title='[1] Unified Modeling Language' &gt;1&lt;/a&gt;] a &#233;t&#233; &#233;labor&#233; au milieu des ann&#233;es 90, sur la base des principales m&#233;thodes objet de l'&#233;poque, OMT, Boosch, OOSE et quelques autres. Son objectif &#233;tait d'unifier les techniques de mod&#233;lisation entre les diff&#233;rentes m&#233;thodes.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le premier quiproquo a &#233;t&#233; de penser que UML &#233;tait un rempla&#231;ant de Merise. Or les ambitions d'UML sont bien en de&#231;&#224; puisque limit&#233;es &#224; la mod&#233;lisation, sans aborder la d&#233;marche.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Revenons &#224; ces termes de m&#233;thode, mod&#233;lisation et d&#233;marche. La mod&#233;lisation, c'est juste du dessin ! On sch&#233;matise ce qu'on a en t&#234;te, soit pour repr&#233;senter une r&#233;alit&#233;, soit pour illustrer une conception. La d&#233;marche pr&#233;cise l'encha&#238;nement des t&#226;ches qui permettent de mener &#224; bien le projet. LA m&#233;thode est l'assemblage d'une d&#233;marche et d'une technique de mod&#233;lisation.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le second quiproquo a &#233;t&#233; de penser que RUP [&lt;a href=&quot;http://www.sewatech.fr/#nb1-2&quot; name=&quot;nh1-2&quot; id=&quot;nh1-2&quot; class=&quot;spip_note&quot; title='[2] Rational Unified Process' &gt;2&lt;/a&gt;] est la seule d&#233;marche adapt&#233;e &#224; UML. Certes les auteurs d'UML et de RUP sont les m&#234;mes [&lt;a href=&quot;http://www.sewatech.fr/#nb1-3&quot; name=&quot;nh1-3&quot; id=&quot;nh1-3&quot; class=&quot;spip_note&quot; title='[3] Rumbaugh, Jacobson et Boosch, alias les amigos de Rational' &gt;3&lt;/a&gt;], mais cela ne suffit pas...&lt;/p&gt; &lt;h2&gt;RUP est trop lourd&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;RUP d&#233;cline toutes les possibilit&#233; d'UML dans une succession de disciplines d'ing&#233;nierie (Mod&#233;lisation du m&#233;tier, Expression des besoins, Analyse et conception, R&#233;alisation), agr&#233;ment&#233;e des disciplines de support n&#233;cessaires &#224; l'organisation du projet (planification, gestion du changement,...). Il est vrai que tout ceci s'encha&#238;ne bien et r&#233;pond bien aux exigences habituelles de suivi qualit&#233;, gr&#226;ce &#224; tous les livrables interm&#233;diaires. Il est vrai aussi qu'en d&#233;cryptant le vocabulaire sp&#233;cifique &#224; RUP et UML, on peut se rendre compte que le passage de Merise &#224; RUP ressemble plus &#224; une adaptation de la d&#233;marche &#224; la logique objet qu'&#224; la r&#233;volution annonc&#233;es un temps. Par contre, RUP est souvent pr&#233;sent&#233; comme un standard alors que ce n'est qu'un produit commercial, propri&#233;t&#233; de Rational (IBM aujourd'hui). De ce point de vue, on doit le comparer &#224; des concurrents comme &lt;a href=&quot;http://fr.wikipedia.org/wiki/2TUP&quot; class=&quot;spip_out&quot;&gt;2TUP&lt;/a&gt; [&lt;a href=&quot;http://www.sewatech.fr/#nb1-4&quot; name=&quot;nh1-4&quot; id=&quot;nh1-4&quot; class=&quot;spip_note&quot; title='[4] 2 tracks Unified Process' &gt;4&lt;/a&gt;] de Valtech ou &#224; &lt;a href=&quot;http://www.enterpriseunifiedprocess.com/&quot; class=&quot;spip_out&quot;&gt;EUP&lt;/a&gt; [&lt;a href=&quot;http://www.sewatech.fr/#nb1-5&quot; name=&quot;nh1-5&quot; id=&quot;nh1-5&quot; class=&quot;spip_note&quot; title='[5] Enterprise Unified Process' &gt;5&lt;/a&gt;] de Ambysoft, beaucoup moins connus, mais relativement proches.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Que reproche-t-on &#224; RUP ? Pas d'&#234;tre propri&#233;taire, c'est le jeux de l'industrie informatique. Peut-&#234;tre d'&#234;tre trop d&#233;taill&#233;... C'est vrai qu'en essayant d'&#234;tre exhaustif, RUP propose pl&#233;thore d'options qui laissent une trop grande libert&#233; au projet. Certes cela permet de s'adapter &#224; de nombreux contextes, mais impose de recourir &#224; un consultant exp&#233;riment&#233;. RUP n'est donc pas un produit livr&#233; cl&#233; en main.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Ce qu'on reproche plus souvent &#224; RUP, c'est sa lourdeur. En effet, toutes les &#233;tapes et tous les livrables propos&#233;s peuvent donner l'impression qu'on passe plus de temps sur des t&#226;ches non directement productives. Rational a bien essay&#233; de corriger le d&#233;faut en &#233;ditant des notes et livres blancs nous expliquant que RUP pouvait &#234;tre agile et s'adapter aux petits projets. Tout ceci n'a gu&#232;re convaincu face &#224; des m&#233;thodes comme l'extreme programming.&lt;/p&gt; &lt;h2&gt;UML dans les m&#233;thodes agiles&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;La plus connue des m&#233;thodes agiles est &lt;a href=&quot;http://www.extremeprogramming.org&quot; class=&quot;spip_out&quot;&gt;XP&lt;/a&gt; [&lt;a href=&quot;http://www.sewatech.fr/#nb1-6&quot; name=&quot;nh1-6&quot; id=&quot;nh1-6&quot; class=&quot;spip_note&quot; title='[6] eXtreme Programming' &gt;6&lt;/a&gt;]. Elle d&#233;taille une s&#233;rie de principes rigoureux centr&#233;s sur la production de code de qualit&#233;. La principale diff&#233;rence avec RUP est que pour ce dernier, toute la d&#233;marche est centr&#233;e sur le mod&#232;le, alors que pour XP elle est centr&#233;e sur le code source.
La premi&#232;re surprise pour un sp&#233;cialiste UML est de constater que UML est absent de XP ! On retrouve certes des concepts similaires, comme ceux des CRC, mais sans le formalisme standard.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Vue la convergence des concepts, on peut facilement utiliser des diagrammes UML avec XP, &#224; ceci pr&#232;s qu'XP &#233;tant &lt;i class=&quot;spip&quot;&gt;extreme&lt;/i&gt;, d&#232;s qu'on s'&#233;loigne d'un principe, on sort du cadre de la m&#233;thode.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour r&#233;sumer, UML s'applique parfaitement aux m&#233;thodes agiles, il suffit de ne pas chercher &#224; utiliser la totalit&#233; des diagrammes et de rechercher avant tout l'efficacit&#233; : &lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; des cas d'utilisation pour les story boards
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; des classes et des &#233;tats
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; des communications (ou collaboration en UML1) pour les aspects dynamiques&lt;/p&gt; &lt;h2&gt;Et si MDA &#233;tait la solution ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;&lt;a href=&quot;http://www.omg.org/mda/&quot; class=&quot;spip_out&quot;&gt;MDA&lt;/a&gt; [&lt;a href=&quot;http://www.sewatech.fr/#nb1-7&quot; name=&quot;nh1-7&quot; id=&quot;nh1-7&quot; class=&quot;spip_note&quot; title='[7] Model Driven Architecture' &gt;7&lt;/a&gt;] est la suite logique de RUP, ou plut&#244;t une fa&#231;on d'outiller un processus centr&#233; sur le mod&#232;le, afin d'automatiser les transformations du mod&#232;le entre les &#233;tapes du projet.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L&#224; aussi, les principes sont s&#233;duisants, mais leur mise en &#339;uvre fastidieuse et co&#251;teuse en investissement initial. Les param&#233;trages et d&#233;veloppements des moulinettes de transformation peut prendre du temps et n&#233;cessite un bon niveau de comp&#233;tence.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;En compl&#233;ment de ces outils centr&#233;s sur le mod&#232;les, sont apparus, puis ont presque disparu, des outils visant &#224; passer le plus rapidement possible du mod&#232;le (souvent limit&#233; aux classes) au code. Les moins jeunes retrouveront le principe des antiques outils RAD qui permettaient de mapper des &#233;crans directement sur la base de donn&#233;es. Ces nouveaux outils RAD (appel&#233;s &lt;i class=&quot;spip&quot;&gt;Smart RAD&lt;/i&gt; ou &lt;i class=&quot;spip&quot;&gt;RAD architectur&#233;&lt;/i&gt;) visent le m&#234;me objectif, en respectant les principes d'architecture en couche. Les plus ambitieux de ces outils ont disparu, et le RAD architectur&#233; est rest&#233; un march&#233; de niche.&lt;/p&gt; &lt;h2&gt;Quid d'UML dans les SOA ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Tout d'abord, il faut constater qu'UML n'a jamais tenu compte des SOA [&lt;a href=&quot;http://www.sewatech.fr/#nb1-8&quot; name=&quot;nh1-8&quot; id=&quot;nh1-8&quot; class=&quot;spip_note&quot; title='[8] Service Oriented Architecture' &gt;8&lt;/a&gt;], &#233;tant largement ant&#233;rieur &#224; ces architectures, m&#234;me lorsqu'on prend en compte UML2. Cette version apporte plus &#224; l'informatique industrielle qu'&#224; la gestion.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les services d'une SOA peuvent &#234;tre mod&#233;lis&#233;s sous forme de classes, d'interfaces ou de composants et leur orchestration sous forme de diagramme d'activit&#233;. Le formalisme de ce dernier reste cependant trop pauvre, en particulier pour repr&#233;senter les diff&#233;rents niveaux de d&#233;tail, du plus synth&#233;tique au plus exhaustif, permettant de comprendre les services m&#233;tier attendus et concevoir les services &#224; impl&#233;menter.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Admettons qu'on puisse s'en sortir pour repr&#233;senter les aspects techniques d'une architecture SOA. Pour les aspects m&#233;tier, UML s'est fait suplant&#233; par des formalismes propri&#233;taires sp&#233;cifiquement orient&#233;s BPM [&lt;a href=&quot;http://www.sewatech.fr/#nb1-9&quot; name=&quot;nh1-9&quot; id=&quot;nh1-9&quot; class=&quot;spip_note&quot; title='[9] Business Process Modeling' &gt;9&lt;/a&gt;].&lt;/p&gt; &lt;h2&gt;Finalement, UML est-il r&#233;ellement utile ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Dans tout l'article, j'ai d&#233;taill&#233; les d&#233;ceptions et limites d'UML. Et pourtant je l'utilise sur presque tous mes projets... Et pas uniquement pour utiliser un formalisme standard, mais par soucis d'efficacit&#233;, et diff&#233;remment selon le format du projet.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Sur les projets avec de grosses contraintes de suivi qualit&#233;, l'utilisation orient&#233;e RUP, ou UP [&lt;a href=&quot;http://www.sewatech.fr/#nb1-10&quot; name=&quot;nh1-10&quot; id=&quot;nh1-10&quot; class=&quot;spip_note&quot; title='[10] Unified Process' &gt;10&lt;/a&gt;], s'impose ; la direction de projet a besoin d'un grand nombre de livrables visibles et lisibles pour mesurer l'avancement. Le tr&#232;s c&#233;l&#232;bre &lt;a href=&quot;http://www.ibm.com/software/awdtools/developer/rose/&quot; class=&quot;spip_out&quot;&gt;Rational Rose&lt;/a&gt; &#233;tait bien adapt&#233;. Aujourd'hui cet outil n'est plus maintenu, n'a pas &#233;volu&#233; vers UML2 et se trouve en perte de vitesse ; la concurrence a eu le temps de se d&#233;velopper avec des prix nettement inf&#233;rieurs et/ou des capacit&#233;s sup&#233;rieures. Pour les projets de type UP, on privil&#233;gie des outils adapt&#233;s aux disciplines amont (expression des besoins et analyse). Il faut donc que l'outil permette d'organiser et de d&#233;tailler efficacement les cas d'utilisation et d'articuler les diagrammes d'interaction (s&#233;quence et communication / collaboration) avec les diagrammes de classes. La plupart des outils commerciaux r&#233;pondent &#224; ces besoins ; pour ma part, j'appr&#233;cie particuli&#232;rement &lt;a href=&quot;http://www.sparxsystems.com/products/ea.html&quot; class=&quot;spip_out&quot;&gt;Sparx Enterprise Architect&lt;/a&gt;, m&#234;me si un outil comme Sybase PowerAMC, souvent d&#233;j&#224; utilis&#233; dans les entreprises, convient tout &#224; fait.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Sur les projets orient&#233;s XP ou m&#233;thode agile, UML peut sembler a priori moins important. Cependant, les cas d'utilisation pour repr&#233;senter les story boards est une bonne id&#233;e et dessiner les classes facilite leur compr&#233;hension. Ces m&#233;thodes &#233;tant centr&#233;es sur la production de code et qualit&#233;, c'est la repr&#233;sentation UML de celui-ci qui devient la priorit&#233;, et donc la capacit&#233; de l'outil &#224; faire du reverse-engineering, c'est-&#224;-dire g&#233;n&#233;rer un mod&#232;le &#224; partir du code, ou, mieux encore, &#224; faire du round-trip, soit faire des allers-retours entre code et mod&#232;le, en conservant les modifications port&#233;es de part et d'autre. Les outils les plus &#233;volu&#233;s pour ce type de projets sont ceux qui mettent &#224; jour le mod&#232;le et le code de fa&#231;on synchrone, quel que soit l'endroit o&#249; la modification est faite. Si des outils comme Rational Application Developer d'IBM supportent ces fonctionnalit&#233;s, et si Together est capable de la faire depuis plusieurs ann&#233;es, il faut reconna&#238;tre qu'aucun outil n'est totalement satisfaisant aujourd'hui.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Enfin, j'utilise souvent UML dans les missions d'audit, plus particuli&#232;rement les fonctions de reverse-engineering des outils. cela permet d'avoir rapidement une vue d'ensemble du syst&#232;me et de faire ressortir quelques &#233;l&#233;ments fondamentaux d'une conception objet : l'architecture en couches et les d&#233;pendances entre packages. Dans ce cas, ls contraintes sont tr&#232;s diff&#233;rentes : l'outil doit certes supporter correctement les diagrammes UML, mais il doit en plus &#234;tre compatible avec le langage de d&#233;veloppement. Cot&#233; java, les &#233;volutions de java 5 ont cr&#233;&#233; un foss&#233; entre les outils. Par ailleurs, l'outil de mod&#233;lisation doit &#234;tre facile &#224; installer, pour pouvoir mettre en place rapidement un poste d'audit chez le client. Ce dernier crit&#232;re met hors-jeu bon nombre d'outils, en particulier toutes les solutions IBM. Enfin, et pour des raisons similaires, la licence doit &#234;tre souple, et de pr&#233;f&#233;rence open source. Sur tous ces crit&#232;res ressortent &lt;a href=&quot;http://jude.change-vision.com/jude-web/index.html&quot; class=&quot;spip_out&quot;&gt;Jude&lt;/a&gt;, pour les projets jusqu'&#224; java 1.4, ou &lt;a href=&quot;http://bouml.free.fr/&quot; class=&quot;spip_out&quot;&gt;BoUML&lt;/a&gt;, moins ergonomique, mais qui supporte java 5.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;En conclusion, j'utilise UML pour la plupart de mes missions, je dois donc reconna&#238;tre que malgr&#233; tous ses d&#233;fauts, il est devenu quasiment indispensable. Par contre, il faut &#234;tre conscient qu'il existe une fa&#231;on diff&#233;rente d'utiliser UML pour chaque contexte. Les 10 ans d'exp&#233;rience servent &#224; reconna&#238;tre en d&#233;but de mission ce qu'on pourra en tirer...&lt;/p&gt;&lt;/div&gt;
		&lt;hr /&gt;
		&lt;div class='rss_notes'&gt;&lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-1&quot; name=&quot;nb1-1&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-1&quot;&gt;1&lt;/a&gt;] Unified Modeling Language&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-2&quot; name=&quot;nb1-2&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-2&quot;&gt;2&lt;/a&gt;] Rational Unified Process&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-3&quot; name=&quot;nb1-3&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-3&quot;&gt;3&lt;/a&gt;] Rumbaugh, Jacobson et Boosch, alias les amigos de Rational&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-4&quot; name=&quot;nb1-4&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-4&quot;&gt;4&lt;/a&gt;] 2 tracks Unified Process&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-5&quot; name=&quot;nb1-5&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-5&quot;&gt;5&lt;/a&gt;] Enterprise Unified Process&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-6&quot; name=&quot;nb1-6&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-6&quot;&gt;6&lt;/a&gt;] eXtreme Programming&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-7&quot; name=&quot;nb1-7&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-7&quot;&gt;7&lt;/a&gt;] Model Driven Architecture&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-8&quot; name=&quot;nb1-8&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-8&quot;&gt;8&lt;/a&gt;] Service Oriented Architecture&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-9&quot; name=&quot;nb1-9&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-9&quot;&gt;9&lt;/a&gt;] Business Process Modeling&lt;/p&gt; &lt;p class=&quot;spip_note&quot;&gt;[&lt;a href=&quot;http://www.sewatech.fr/#nh1-10&quot; name=&quot;nb1-10&quot; class=&quot;spip_note&quot; title=&quot;Notes 1-10&quot;&gt;10&lt;/a&gt;] Unified Process&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>Quelles solutions open source pour java</title>
		<link>http://www.sewatech.fr/article-open-source-1.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-open-source-1.html</guid>
		<dc:date>2007-03-16T16:02:09Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>java</dc:subject>
		<dc:subject>jboss</dc:subject>
		<dc:subject>tomcat</dc:subject>
		<dc:subject>eclipse</dc:subject>

		<description>

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--java-+.html" rel="tag"&gt;java&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--jboss-+.html" rel="tag"&gt;jboss&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--tomcat-+.html" rel="tag"&gt;tomcat&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--eclipse-+.html" rel="tag"&gt;eclipse&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;&lt;p class=&quot;spip&quot;&gt;Les solutions open source ont le vent en poupe depuis quelques temps. Des organismes comme la fondation Apache sont reconnues depuis des ann&#233;es pour la qualit&#233; de leurs produits et des soci&#233;t&#233;s &#233;ditrices basent leur mod&#232;le &#233;conomique sur la distribution de leurs logiciels sous licence open source. La nouveaut&#233; vient, d'une part, du fait que certains &#233;diteurs basculent du mod&#232;le traditionnel au mod&#232;le open source et, d'autre part, du fait que la plupart des soci&#233;t&#233;s utilisatrices sont pr&#234;tes &#224; faire confiance &#224; des solutions open source.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cet article ne remplace pas les catalogues, et ne recherche surtout pas l'exhaustivit&#233;. Il expose juste un avis totalement subjectif et ouvert &#224; discussion.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Architecture et framework&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Pour vos d&#233;veloppements sp&#233;cifiques, la premi&#232;re r&#232;gle est de choisir son architecture avant de s&#233;lectionner les composants et frameworks open source qui permettront de la mettre en &#339;uvre. Les outils que je citerai donc ici correspondent &#224; mes choix d'architecture habituels.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Tout d'abord, le &lt;a href=&quot;http://www.springframework.org&quot; class=&quot;spip_out&quot;&gt;framework Spring&lt;/a&gt; s'adapte &#224; la plupart des architectures, qu'on soit en Web ou en client/serveur. C'est donc devenu un incontournable qui constitue la colonne vert&#233;brale de la plupart des nouveaux projets.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Des frameworks plus sp&#233;cifiques &#224; une couche de l'architecture se greffent ensuite sur Spring.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour la couche de pr&#233;sentation Web, JSF est devenu un classique. Dans une approche classique, on utilise habituellement &lt;a href=&quot;http://myfaces.apache.org&quot; class=&quot;spip_out&quot;&gt;Apache MyFaces&lt;/a&gt;. Des composants optionnels doivent souvent &#234;tre ajout&#233;s, via &lt;a href=&quot;http://myfaces.apache.org/tomahawk/&quot; class=&quot;spip_out&quot;&gt;Apache Tomawahk&lt;/a&gt;, ou &lt;a href=&quot;http://jboss.org/projects/jbossAjax4jsf&quot; class=&quot;spip_out&quot;&gt;Ajax4Jsf&lt;/a&gt;. L'autre approche consiste &#224; rechercher directement une suite de composants riches et int&#233;gr&#233;s. &lt;a href=&quot;http://www.icefaces.org&quot; class=&quot;spip_out&quot;&gt;IceFaces&lt;/a&gt; constitue une offre tr&#232;s int&#233;ressante, en open source depuis peu.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si la complexit&#233; des m&#233;canismes JSF vous rebute, &lt;a href=&quot;http://struts.apache.org&quot; class=&quot;spip_out&quot;&gt;Apache Struts&lt;/a&gt; reste une tr&#232;s bonne alternative.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour la couche de pr&#233;sentation client riche, que l'on utilise Swing ou SWT, il est n&#233;cessaire de s'appuyer sur un framework, et dans ce domaine rien de vraiment convaincant ne s'est pr&#233;sent&#233;. Par d&#233;faut, je citerai tout de m&#234;me &lt;a href=&quot;http://www.eclipse.org/rcp/&quot; class=&quot;spip_out&quot;&gt;Eclipse RCP&lt;/a&gt;, qui fournit des services int&#233;ressants, &#224; compl&#233;ter.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour la couche d'acc&#232;s aux donn&#233;es, je privil&#233;gie &lt;a href=&quot;http://www.hibernate.org/&quot; class=&quot;spip_out&quot;&gt;Hibernate&lt;/a&gt;, qui est devenu un standard du march&#233; dans le domaine du mapping objet/relationnel. Cette solution commence &#224; &#234;tre concurrenc&#233;e par les EJB 3.&lt;/p&gt; &lt;h2&gt;Outil de d&#233;veloppement&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Il reste ensuite &#224; int&#233;grer tout cela dans un environnement de d&#233;veloppement. En la mati&#232;re, &lt;a href=&quot;http://www.eclipse.org&quot; class=&quot;spip_out&quot;&gt;Eclipse&lt;/a&gt; constitue une r&#233;f&#233;rence indiscutable. Il est vrai que ses fonctionnalit&#233;s sont d'une puissance impressionnante pour tout ce qui tourne autour de la manipulation de code java (refactoring, templates, raccourcis,...).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Par contre, je suis beaucoup plus r&#233;serv&#233; sur la qualit&#233; des assistants de d&#233;veloppement. En effet, lorsqu'on utilise Eclipse, on dispose de peu d'assistants visuels, en m&#234;me des outils aussi int&#233;ressants que &lt;a href=&quot;http://www.eclipse.org/webtools/&quot; class=&quot;spip_out&quot;&gt;WTP&lt;/a&gt; peuvent faire l'objet de critiques importantes (manque stabilit&#233; de certaines fonctions, lourdeur,...). Les solutions int&#233;gr&#233;es comme &lt;a href=&quot;http://www.myeclipseide.com/&quot; class=&quot;spip_out&quot;&gt;MyEclipse&lt;/a&gt; &#233;vitent de s'emb&#234;ter &#224; agr&#233;ger des plug-ins d'origines diverses.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;De ce point de vue, son concurrent &lt;a href=&quot;http://www.netbeans.org/&quot; class=&quot;spip_out&quot;&gt;Netbeans&lt;/a&gt; est mieux positionn&#233;, en particulier dans le domaine de JSF avec son plugin &lt;a href=&quot;http://www.netbeans.org/products/visualweb/&quot; class=&quot;spip_out&quot;&gt;Visual Web Pack&lt;/a&gt;.
Par contre, je trouve que l'outil dans son ensemble n'ai pas tr&#232;s pratique.&lt;/p&gt; &lt;h2&gt;Serveur d'application&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Pour le d&#233;ploiement des applications JavaEE (ou J2EE), mon favori reste &lt;a href=&quot;http://www.jboss.org/&quot; class=&quot;spip_out&quot;&gt;JBoss&lt;/a&gt;, m&#234;me si je n'ai aucun a priori contre &lt;a href=&quot;http://jonas.objectweb.org/&quot; class=&quot;spip_out&quot;&gt;Jonas&lt;/a&gt; ou m&#234;me &lt;a href=&quot;http://tomcat.apache.org/&quot; class=&quot;spip_out&quot;&gt;Apache Tomcat&lt;/a&gt;, dans certains cas.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&#201;videmment, dans cet environnement, on utilisera le syst&#232;me de scripts ant, de traces Log4J, de tests unitaires jUnit, le syst&#232;me d'installateur IzPack (pour les &#233;diteurs).&lt;/p&gt; &lt;h2&gt;Synth&#232;se&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Pour r&#233;sumer, voici une plateforme de d&#233;veloppement que je conseillerais volontiers :
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; Framework : Spring, JSF avec IceFaces et Hibernate
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; Outil de d&#233;veloppement : Eclipse avec MyEclipse
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; Serveur d'application : JBoss&lt;/p&gt; &lt;h2&gt;Quid de l'avenir proche ?&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;La d&#233;marche de RedHat dans le domaine du d&#233;veloppement java me semble assez prometteuse. Si on reproche souvent aux environnements Java de relever plus de l'artisanat que de l'industrie, si on arrive plus rapidement &#224; une bonne productivit&#233; de d&#233;veloppement avec les environnements .NET de Microsoft, c'est probablement &#224; cause de la diversit&#233; des solutions et des difficult&#233;s d'assembler tout cela dans un environnement coh&#233;rent.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La r&#233;ponse &#224; ces r&#233;actions est d'apporter directement un environnement complet, issu du m&#234;me fournisseur, sous la forme d'un &lt;i&gt;stack&lt;/i&gt;. C'est ce qu'une soci&#233;t&#233; comme IBM a compris depuis longtemps (on remarquera la proximit&#233; de strat&#233;gie entre les suites VisualStudio 2005 et Rapid Application Developer 6). Attention, je parle bien de strat&#233;gie et pas du cot&#233; pratiques des outils !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Avant m&#234;me son rachat par RedHat, JBoss avait commenc&#233; &#224; compl&#233;ter son offre, initialement limit&#233;e au serveur d'application, avec le portail, le workflow, les frameworks (hiberante puis seam). Depuis le rachat par RedHat, cette d&#233;marche orient&#233;e &lt;i&gt;stack&lt;/i&gt; semble s'acc&#233;l&#233;rer avec l'int&#233;gration des composants JSF (Ajax4jsf et &lt;a href=&quot;http://labs.jboss.com/portal/jbossrichfaces/&quot; class=&quot;spip_out&quot;&gt;Rich Faces&lt;/a&gt; et de l'outil de d&#233;veloppement &lt;a href=&quot;http://labs.jboss.com/portal/rhdevstudio/&quot; class=&quot;spip_out&quot;&gt;Red Hat Developer Studio&lt;/a&gt; issus du r&#233;cent partenariat avec Exadel. Tout cela semble prometteur : &#224; suivre...&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;http://java-source.net/ &lt;br/&gt;
http://solutions.journaldunet.com/0301/030113_portails.shtml &lt;br/&gt;
http://php.developpez.com/etudes/cms-gestion-contenu-web/ &lt;br/&gt;
http://fr.wikipedia.org/wiki/Portail:Logiciels_libres &lt;br/&gt;
http://portal.unesco.org/ci/fr/ev.php-URL_ID=12034&amp;URL_DO=DO_TOPIC&amp;URL_SECTION=201.html &lt;br/&gt;&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>_</title>
		<link>http://www.sewatech.fr/articles.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/articles.html</guid>
		<dc:date>2007-01-19T09:52:41Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>


		<description>

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;


		</description>


 <content:encoded>&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;En compl&#233;ment de cette rubrique, vous trouverez d'autres articles d'&lt;a href=&quot;http://www.sewatech.fr/alexis-hassler.html&quot; class=&quot;spip_out&quot;&gt;Alexis Hassler&lt;/a&gt; sur son &lt;a href=&quot;http://blog.alexis-hassler.com&quot; class=&quot;spip_out&quot;&gt;blog&lt;/a&gt;.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Les articles publi&#233;s ici sont des points de vue apport&#233;s par leur auteur sur des sujets touchant aux technologies Objet.&lt;/p&gt;&lt;/div&gt;
		&lt;div class='rss_ps'&gt;Retrouvez les articles en flux &lt;a href=&quot;http://www.sewatech.fr/rss2.php3?id_rubrique=7&quot; class=&quot;spip_out&quot;&gt;&lt;img src=&quot;http://www.sewatech.fr/sq_sewa/img/rss.gif&quot; border=0 ALIGN=&quot;absmiddle&quot; /&gt;&lt;/a&gt; ou &lt;a href=&quot;http://www.sewatech.fr/atom03.php3?id_rubrique=7&quot; class=&quot;spip_out&quot;&gt;atom &lt;img src=&quot;http://www.sewatech.fr/sq_sewa/img/atom.gif&quot; border=0 ALIGN=&quot;absmiddle&quot; /&gt;&lt;/a&gt;.&lt;/div&gt;
		</content:encoded>


		

	</item>



	<item>
		<title>Les apports de JavaSE 6</title>
		<link>http://www.sewatech.fr/article-java6.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-java6.html</guid>
		<dc:date>2007-01-12T09:47:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>java</dc:subject>

		<description>Bien que ce soit une version majeure, les &#233;volutions de JavaSE 6 sont bien moins marquantes que celle de JavaSE 5. N&#233;anmoins, l'&#233;volution continue dans le bon sens et on attend de pouvoir exploiter tout cela dans nos projets.

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--java-+.html" rel="tag"&gt;java&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;JavaSE 5 a &#233;t&#233; une &#233;volution majeure pour la plateforme java avec, pour la premi&#232;re fois des &#233;volutions visant &#224; rendre le langage plus pratique. On a aussi constat&#233; des gains importants en production avec une meilleure stabilit&#233;, des performances am&#233;lior&#233;es et, enfin, des outils de monitoring. Est-ce que JavaSE 6 continue sur la m&#234;me voie, et quelles sont les am&#233;liorations apport&#233;es ?&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;h2&gt;Java 5&lt;/h2&gt;
&lt;h3&gt;JavaSE&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Les d&#233;veloppeurs ont r&#233;ellement appr&#233;ci&#233; le travail sur les aspects pratiques, en particulier avec la boucle &quot;for each&quot; et l'autoboxing. Du point de vue de la conception objet, l'avanc&#233;e majeure a &#233;t&#233; l'introduction des generics : on sait enfin ce qu'on doit mettre et ce qu'on peut trouver dans une collection !&lt;/p&gt; &lt;h3&gt;Et JavaEE ?&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;La sp&#233;cification de JavaEE 5 est sorti environ 1 an apr&#232;s le Java SE de m&#234;me niveau. Cependant, les serveurs d'application certifi&#233;s sur cette version tardent un peu &#224; sortir.
Vu la proportion d'applications JavaEE en entreprise, on peut se demander s'il est opportun de sortir un JavaSE 6 alors que beaucoup de projets utilisent encore un JDK 1.4, en que certaines des avanc&#233;es de JavaSE 5 sont essentiellement utiles dans un environnement EE ; je pense en particulier aux annotations, qui ne sont utiles que si un framework (JavaEE ou autre) nous en propose un ensemble directement utilisable dans le code.
Les nouveaut&#233;s du cot&#233; du monitoring (jconsole, jstat,...) sont une &#233;volution fondamentale pour l'exploitation des applications JavaEE, elles ne peuvent donc &#234;tre utilis&#233;es qu'avec des serveurs d'application supportant les versions crois&#233;es (J2SE 1.4 avec JavaSE 5), comme Apache Tomcat, Jonas ou JBoss.&lt;/p&gt; &lt;h2&gt;Java 6&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Sun a abandonn&#233; l'id&#233;e de sortir des versions mineures de Java. Ainsi, apr&#232;s la version 5, vient la version 6, puis 7.
JavaSE 6 (alias Mustang) est donc une version majeure de java, mais l'&#233;volution qu'elle propose me semble bien moins importante que celle de Java 5, et, para&#238;t-il, moins que celle de la version suivante, JavaSE 7, alias Dolphin.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On attend de cette nouvelle version qu'elle progresse encore dans les aspects pratiques pour le d&#233;veloppement et pour l'exploitation.&lt;/p&gt; &lt;h3&gt;Langage de script&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Autant pr&#233;venir tout de suite : je ne suis, a priori, pas un grand fan des langages de script. Cependant, j'ai trouv&#233; quelques applications int&#233;ressantes pour BeanShell pour l'administration de JBoss.
Par contre, je n'ai pas encore pu cerner ce que cela pouvait apporter dans le cadre d'applications m&#233;tier. J'ai donc du mal &#224; m'enthousiasmer pour cette fonctionnalit&#233;.&lt;/p&gt; &lt;h3&gt;Annotations&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Les annotations s'installent progressivement, mais le retard sur le concurrent Microsoft .NET est encore tr&#232;s important, et ne se comblera que par leur utilisation intensive dans JavaEE.
J'attends donc que mon environnement de d&#233;veloppement exploite correctement ces nouvelles annotations et leur nouvelle API pour avoir un avis sur le sujet. Pour l'instant, je n'en ferais pas grand chose.&lt;/p&gt; &lt;h3&gt;JDBC&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;Ce sujet n'avait pas &#233;volu&#233; avec JavaSE 5, on attendait donc des nouveaut&#233;s pratiques, et elles arrivent.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La gestion des drivers et des connexions est am&#233;lior&#233;e,lees requ&#234;tes XML ont &#233;t&#233; ajout&#233;es et la gestion des exceptions a &#233;t&#233; revue, avec la mise en place de cat&#233;gories d'exceptions, selon la gravit&#233; (SQLTransientException et SQLNonTransientException), et la possibilit&#233; d'it&#233;rer sur une SQLException (boucle &quot;for each&quot;).&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Un driver compatible JDBC4 est fourni pour la base JavaDB, directement d&#233;riv&#233;e de Apache Derby. Cette derni&#232;re est livr&#233;e directement avec le JDK.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On notera que la gestion des drivers est surtout am&#233;lior&#233;e par une technique de chargement automatique fournie par la classe java.util.ServiceLoader. Celle-ci est utilisable dans bien d'autres domaines pour lesquels on manipule des interfaces et leurs impl&#233;mentations d&#233;finies dynamiquement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Si ces &#233;volutions me plaisent, elles seront surtout utiles dans des projets qui n'utilisent ni d'outil de mapping O/R, ni de framework de persistance, ce qui, pour moi, constitue une petite proportion.&lt;/p&gt; &lt;h3&gt;Web Service&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;L&#224; encore, c'est un domaine ou le retard sur les aspects pratiques est impressionnant. Qu'est-ce qu'il est lourd de travailler avec des outils comme SOAP, malgr&#233; l'outillage qui s'est mis en place avec Ant et les outils de d&#233;veloppement.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;De ce point de vue, des API comme JAX-WS et JAXB sont fondamentales et leur int&#233;gration &#224; JavaSE, une avanc&#233;e majeur.&lt;/p&gt; &lt;h3&gt;AWT / Swing&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;De ce cot&#233;-l&#224;, pas de r&#233;volution, mais des petites avanc&#233;es pratique, comme les classes SystemTray , Desktop et SplashScreen, qui permettent une meilleure int&#233;gration dans l'environnement de travail.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le syst&#232;me de layout a &#233;t&#233; compl&#233;t&#233; et la cr&#233;ation de look-and-feel facilit&#233;e.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'avanc&#233;e la plus importante dans le domaine des applications clientes est l'am&#233;lioration des performances apparentes.&lt;/p&gt; &lt;h3&gt;Monitoring&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;C'&#233;tait une des principales am&#233;liorations de JavaSE 5, et la version 6 continue l'effort.
En vrac, les progr&#232;s suivants ont &#233;t&#233; faits :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Dump &#224; la demande (outil jmap)&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Rattachement dynamique de jconsole (et d'autres outils) &#224; un processus java, sans options de d&#233;marrage sp&#233;cifique (attention &#224; la s&#233;curit&#233;...)&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Am&#233;liorations de la jconsole ; celle-ci est maintenant support&#233;e officiellement&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Gestion des OutOfMemoryError : diagnostic et notification&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Portage de certains outils sur Windows (jmap, jstack)&lt;/li&gt;&lt;/ul&gt;
&lt;h3&gt;Performances&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;On attend de voir avec nos propores applications, mais des gains objectifs de performances de 20 &#224; 40% sont annonc&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;C'est peut-&#234;tre la meilleure nouvelle.&lt;/p&gt; &lt;h3&gt;Autres &#233;volutions&lt;/h3&gt;
&lt;p class=&quot;spip&quot;&gt;L'API de collection continue de s'enrichir avec, en particulier, les Set et Map navigables dans les 2 sens. Vue l'historique et l'&#233;volution de l'API, on devra peut-&#234;tre mettre en place une formation sp&#233;cifique pour les collections !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;L'API d'entr&#233;es/sorties (IO) s'enrichit aussi avec une nouvelle classe java.io.Console, des progr&#232;s dans la manipulation des fichiers et en enrichissement des informations sur les adresses r&#233;seau.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le CLASSPATH supporte enfin le caract&#232;re joker '*', ce qui nous &#233;conomisera des scripts un peu r&#233;p&#233;titifs pour parcourir des r&#233;pertoires lib.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pour la liste compl&#232;te des &#233;volutions, je vous invite &#224; consulter la &lt;a href=&quot;http://java.sun.com/javase/6/webnotes/features.html&quot; class=&quot;spip_out&quot;&gt;note de livraison de JavaSE 6&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p class=&quot;spip&quot;&gt;Tout cela continue d'aller dans le bon sens : faire de java un langage toujours plus puissant, mais aussi pratique &#224; utiliser et facile &#224; apprendre.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Je pense qu'on ne profitera de la plupart de ces &#233;volutions pratiques que lorsque celle-ci seront directement int&#233;gr&#233;es dans notre environnement de projet. Pour cel&#224;, nous devrons attendre les mises &#224; niveau de plusieurs produits :&lt;/p&gt; &lt;ul class=&quot;spip&quot;&gt;&lt;li class=&quot;spip&quot;&gt; Eclipse ou un autre outil environnement de d&#233;veloppement qui arriverait &#224; se hisser &#224; son niveau ; ce sera peut-&#234;tre NetBeans si la gains de performance de JavaSE 6 sont suffisants pour le rendre plus agile.&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Serveur d'application : gr&#226;ce &#224; leur cycle de livraison plus rapide, les outils Open Source ont peut-&#234;tre une opportunit&#233; d'enfoncer le clou contre les poids lourds du march&#233; et leurs offres int&#233;gr&#233;es&lt;/li&gt;&lt;li class=&quot;spip&quot;&gt; Framework : en introduction, je notais le d&#233;calage en JavaSE et JavaEE ; il existe aussi avec les frameworks classiques comme Spring. Hors je ne me vois pas d&#233;marrer un projet sans spring.&lt;/li&gt;&lt;/ul&gt;
&lt;p class=&quot;spip&quot;&gt;Nous devrons donc ronger nos freins pour quelques temps encore.&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>



	<item>
		<title>JBoss est-il apte &#224; la production ?</title>
		<link>http://www.sewatech.fr/article-jboss.html</link>
		<guid isPermaLink="true">http://www.sewatech.fr/article-jboss.html</guid>
		<dc:date>2006-12-06T09:19:00Z</dc:date>
		<dc:format>text/html</dc:format>
		<dc:language>fr</dc:language>
		<dc:creator>Alexis Hassler</dc:creator>

<category domain="http://www.sewatech.fr/-articles-.html">articles</category>

		<dc:subject>jboss</dc:subject>
		<dc:subject>j2ee web</dc:subject>
		<dc:subject>j2ee ejb</dc:subject>

		<description>

-
&lt;a href="http://www.sewatech.fr/-articles-.html" rel="directory"&gt;articles&lt;/a&gt;

/ 
&lt;a href="http://www.sewatech.fr/+--jboss-+.html" rel="tag"&gt;jboss&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--j2ee-web-+.html" rel="tag"&gt;j2ee web&lt;/a&gt;, 
&lt;a href="http://www.sewatech.fr/+--j2ee-ejb-+.html" rel="tag"&gt;j2ee ejb&lt;/a&gt;

		</description>


 <content:encoded>&lt;div class='rss_chapo'&gt;Le question ne se pose pas pour un environnement JBoss d&#251;ment pr&#233;par&#233;, avec un s&#233;rieux travail de configuration. Il se pose par contre concr&#232;tement pour les configurations fournies par d&#233;faut.&lt;/div&gt;
		&lt;div class='rss_texte'&gt;&lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Configurations par d&#233;faut&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On peut aussi se poser la question diff&#233;remment : lorsque JBoss livre son serveur d'application, &#224; qui s'adressent-ils en priorit&#233; ?&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Historiquement, JBoss s'est avant tout impos&#233; chez les d&#233;veloppeurs, de par sa l&#233;g&#232;ret&#233;, sa souplesse d'utilisation et sa facilit&#233; d'installation : &lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; on t&#233;l&#233;charge, &lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; on d&#233;compresse le fichier, &lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; on pose le fichier &#224; d&#233;ployer dans deploy,
&lt;br /&gt;&lt;img src=&quot;http://www.sewatech.fr/local/cache-vignettes/L8xH11/puce-68c92.gif&quot; width='8' height='11' alt=&quot;-&quot; style='height:11px;width:8px;' class='' /&gt; on lance le script run.
Difficile de faire plus simple pour un serveur d'application certifi&#233; J2EE.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Le probl&#232;me, c'est que dans un nombre significatif d'entreprises, la m&#234;me proc&#233;dure a &#233;t&#233; appliqu&#233;e pour l'environnement de production. Si les performances de cette configuration par d&#233;faut peuvent &#234;tre satisfaisantes pour une application peu gourmande, c'est du cot&#233; de la s&#233;curit&#233; qu'il faut s'inqui&#232;ter.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Performances&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Du cot&#233; des param&#232;tres de performances, les choses &#233;voluent dans le bon sens au cours des versions. Ainsi, par d&#233;faut, JBoss est lanc&#233; en option Hotspot server, alors qu'en 4.0.2, il &#233;tait encore lanc&#233; en client.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Du cot&#233; de la m&#233;moire, les 128Mo maxi accord&#233;s lorsqu'on lance JBoss via le script run.sh (linux et unix) sont vraiment insuffisants. On peut demander au passage pourquoi sous windows, cette limite est plac&#233;e &#224; 512Mo alors que celle pour linux est longtemp rest&#233;e aussi basse.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans la version 4.0.5, ces diff&#233;rences ont &#233;t&#233; gomm&#233;e.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;S&#233;curit&#233;&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Parmi les aspects discutables dans la configuration par d&#233;faut, j'&#233;carte les failles telles que celle cit&#233;e sur le &lt;a href=&quot;http://jira.jboss.com/jira/browse/JBAS-1896&quot; class=&quot;spip_out&quot;&gt;site JIRA de JBoss&lt;/a&gt; pour me concentrer sur des modifications consid&#233;r&#233;es comme normales.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Tout d'abord, on constate que la console d'administration JMX est accessible sans aucune authentification. Lorsqu'on conna&#238;t les capacit&#233;s de cette console, on se rend compte que cela revient &#224; livrer les cl&#233;s du serveur d'application. &lt;br/&gt;
La jmx-console permet non seulement d'arr&#234;ter une application ou le serveur, mais aussi de d&#233;ployer des applications, sans avoir acc&#232;s au syst&#232;me de fichiers ou acc&#233;der &#224; des informations internes au serveur.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;On notera aussi l'installation du http-invoker qui permet d'acc&#233;der aux composants EJB, JMX et &#224; l'annuaire JNDI via http, sans authentification. L'acc&#232;s &#224; JNDI est &#233;videmment autoris&#233; en lecture !&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Composants inutiles&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Du cot&#233; des composants install&#233;s, cela ressemble plus &#224; une foire ambulante qu'&#224; un ensemble organis&#233; et raisonnable. Certains composants semblent l&#224; uniquement pour &#234;tre montr&#233;s.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Je pense par exemple &#224; cette base de donn&#233;e HsqlDB, que JBoss conseille depuis toujours de retirer de l'environnement de production.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Je pense aussi aux diff&#233;rents invokers. Le http-invoker ne sert g&#233;n&#233;ralement &#224; rien, de m&#234;me que le pooled-invoker. A moins qu'on remplace le jrmp-invoker par ce dernier, comme c'est conseill&#233;. Dans tous les cas, ils sont 3 pour 1 place.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Dans foire-demonstration, on peut citer aussi le HAR deployer qui sert &#224; d&#233;ployer des composants Hibernate 2 (la majorit&#233; des projets fonctionnent aujourd'hui sur Hibernate 3), le syst&#232;me de scheduler (utile, mais rarement utilis&#233;) ou la panoplie de modules JAAS cit&#233;s en exemple dans les application-policy.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Je ne les citerai pas tous, cela est mieux fait et plus d&#233;taill&#233; dans l'article &lt;a href=&quot;http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossASTuningSliming&quot; class=&quot;spip_out&quot;&gt;Tuning and Slimming JBossAS&lt;/a&gt; du wiki de JBoss.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;&lt;strong class=&quot;spip&quot;&gt;Conclusion&lt;/strong&gt;&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Cette configuration par d&#233;faut est une compilation entre les fonctionnalit&#233;s utiles en d&#233;veloppement et des fonctionnalit&#233;s de d&#233;monstration. On attendrait plus de simplicit&#233; et de rigueur dans une configuration de production. L'installation JEMS offre des possibilit&#233;s int&#233;ressantes puisque plus de profils d'utilisation sont propos&#233;s, et les outils d'administration sont s&#233;curis&#233;s par des simples cases &#224; cocher.&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;Pourquoi JBoss ne proposerait-il pas une configuration 'prod' en plus des 3 configurations d&#233;j&#224; propos&#233;e dans ses packages zip ou tar.gz ?&lt;/p&gt; &lt;p class=&quot;spip&quot;&gt;La r&#233;ponse est peut-&#234;tre dans le mod&#232;le &#233;conomique de JBoss : vendre du service. Si la configuration fournie en standard convient, les clients n'auront plus besoin ni d'accompagnement ni de formation. Finalement, je ne devrais peut-&#234;tre
pas me plaindre des choix qui sont faits...&lt;/p&gt;&lt;/div&gt;
		
		</content:encoded>


		

	</item>





</channel>

</rss>
