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

<channel>
	<title>Sam High-Tech Blog</title>
	<atom:link href="http://www.net-liard.com/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.net-liard.com/blog</link>
	<description>Blog de Samuel Liard</description>
	<pubDate>Thu, 25 Jun 2009 21:14:01 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Acceleo M2T et Eclipse 3.5</title>
		<link>http://www.net-liard.com/blog/2009/06/acceleo-m2t-eclipse/</link>
		<comments>http://www.net-liard.com/blog/2009/06/acceleo-m2t-eclipse/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 21:14:01 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Modelisation]]></category>

		<category><![CDATA[Acceleo]]></category>

		<category><![CDATA[Eclipse]]></category>

		<category><![CDATA[MDA]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=421</guid>
		<description><![CDATA[Comme vous le savez Eclipse 3.5 Galileo est sorti le 24 Juin.
Une des nouveautés est l&#8217;intégration d&#8217;Acceleo M2T directement dans la version &#8220;Eclipse Modeling Tools&#8221;.
Je n&#8217;ai pas passé beaucoup de temps à l&#8217;essayer, mais on peut déjà noter plusieurs grosses améliorations. Bien sur la plus importante est le changement de langage de script. On passe [...]]]></description>
			<content:encoded><![CDATA[<p>Comme vous le savez <a href="http://www.eclipse.org/galileo/">Eclipse 3.5 Galileo</a> est sorti le 24 Juin.</p>
<p>Une des nouveautés est l&#8217;intégration d&#8217;Acceleo M2T directement dans la version &#8220;Eclipse Modeling Tools&#8221;.<br />
Je n&#8217;ai pas passé beaucoup de temps à l&#8217;essayer, mais on peut déjà noter plusieurs grosses améliorations. Bien sur la plus importante est le changement de langage de script. On passe d&#8217;un format spécifique Acceleo à du MTL standard défini par l&#8217;OMG pour les transformations Model to Text.</p>
<p>Je vais plus me focaliser sur les nouveautés au niveaux outillage.</p>
<h2>Installation facile</h2>
<p>Avant je n&#8217;avais jamais réussit à installer Acceleo sur mon Eclipse via leur update site. Il y avait toujours des problèmes avec les versions d&#8217;emf, uml2&#8230; J&#8217;ai perdu beaucoup de temps et le seul moyen de le faire fonctionner rapidement était de récupérer leur package Eclipse+Acceleo.</p>
<p>Cette fois j&#8217;ai installé un Eclipse 3.5 vierge et via l&#8217;update site de Galileo je peux installer Acceleo 0.8. Au moment de l&#8217;installation il m&#8217;a installé toutes les dépendances nécessaires (emf&#8230;) En 5 minutes ça marche. Seul petit hic, il ne tire pas les dépendances vers le plugin uml2 et l&#8217;exemple ne fonctionne pas sans. Mais si vous avez téléchargé la version &#8220;Eclipse Modeling Tools&#8221; tout fonctionne sans passer par l&#8217;update.</p>
<h2>Exécution en standAlone</h2>
<p>Même si cette fonctionnalité existe depuis la version 2.4.0 d&#8217;Acceleo, on note maintenant la disparition complète des chaines de lancement Acceleo. Pour générer notre code on peut donc utiliser au choix :</p>
<ul>
<li>Du Java</li>
<li>Une tache ant</li>
<li>Un runner Eclipse</li>
</ul>
<p>Il ne manque plus qu&#8217;un plug-in Maven 2, mais vu que l&#8217;équipe d&#8217;acceleo utilise plus ivy que Maven il faudra peut être le réaliser nous-même.</p>
<h2>Debug</h2>
<p>Je gardais le meilleur pour la fin, il est enfin possible de mettre des points d&#8217;arrêt dans nos templates. Ca marche très bien et on peut facilement naviguer dans notre model comme on le fait avec des objets en debug Java.<br />
C&#8217;était le gros manque au niveau outillage d&#8217;Acceleo, c&#8217;est maintenant très bien fait.</p>
<p>Une grosse évolution très intéressante d&#8217;Acceleo donc. Je suis même étonné qu&#8217;il n&#8217;y ait pas plus d&#8217;infos à ce propos sur leur site Web. Ils sont trop occupés à préparer <a href="http://www.acceleo.org/wiki/index.php/Eclipse_Acceleo_Day">l&#8217;Acceleo Day</a> du 10 Juillet peut être <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Journée annoncée sur la page d&#8217;acceuil d&#8217;Eclipse, la classe !</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/06/acceleoday.jpg"><img class="size-medium wp-image-424 aligncenter" title="acceleoday" src="http://www.net-liard.com/blog/wp-content/uploads/2009/06/acceleoday-300x177.jpg" alt="acceleoday" width="300" height="177" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/06/acceleo-m2t-eclipse/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Conflit de lib Apache CXF et hibernate</title>
		<link>http://www.net-liard.com/blog/2009/06/conflit-de-lib-apache-cxf-et-hibernate/</link>
		<comments>http://www.net-liard.com/blog/2009/06/conflit-de-lib-apache-cxf-et-hibernate/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 18:38:00 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[cglig]]></category>

		<category><![CDATA[CXF]]></category>

		<category><![CDATA[hibernate]]></category>

		<category><![CDATA[Maven]]></category>

		<category><![CDATA[NoClassDefFoundError]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=403</guid>
		<description><![CDATA[Je viens de perdre pas mal de temps à faire fonctionner mon projet qui utilise hibernate et apache CXF pour exposer des WebServices.
Au moment de compiler j&#8217;avais l&#8217;erreur suivante :
WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor:
at [...]]]></description>
			<content:encoded><![CDATA[<p>Je viens de perdre pas mal de temps à faire fonctionner mon projet qui utilise hibernate et apache CXF pour exposer des WebServices.</p>
<p>Au moment de compiler j&#8217;avais l&#8217;erreur suivante :<br />
<code>WARN: Nested in org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/objectweb/asm/CodeVisitor:<br />
at net.sf.cglib.core.KeyFactory$Generator.generateClass</code></p>
<p>Au début ça me paraissait être un simple NoClassDefFound, mais la classe recherchée était bien dans mon CLASSPATH.</p>
<p>A force de chercher j&#8217;ai fini par comprendre que c&#8217;etait un problème d&#8217;incompatibilité de version de lib cglib. Il faut donc exclure la librairie cglib récupérée avec hibernate pour en prendre une nommée : cglib-nodep.</p>
<p>Voici comment faire dans votre fichier maven 2 :</p>
<pre name="code" class="xml:nogutter:nocontrols">
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate</artifactId>
    <version>3.2.1.ga</version>
    <exclusions>
        <exclusion>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.1_3</version>
</dependency>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/06/conflit-de-lib-apache-cxf-et-hibernate/feed/</wfw:commentRss>
		</item>
		<item>
		<title>RMLL à Nantes</title>
		<link>http://www.net-liard.com/blog/2009/06/rmll-a-nantes/</link>
		<comments>http://www.net-liard.com/blog/2009/06/rmll-a-nantes/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 20:47:23 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Logiciel Libre]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=405</guid>
		<description><![CDATA[Mais c&#8217;est quoi au fait les RMLL ? C&#8217;est aussi la première question que je me suis posée  
Et bien ce sont les Rencontres Mondiales du Logiciel Libre et cette année elles sont organisées à Nantes du 7 au 11 juillet 2009. 5 jours bien chargés découpés en 18 thèmes différents !
Amis du grand Ouest, [...]]]></description>
			<content:encoded><![CDATA[<p>Mais c&#8217;est quoi au fait les RMLL ? C&#8217;est aussi la première question que je me suis posée <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Et bien ce sont les <em>Rencontres Mondiales du Logiciel Libre</em> et cette année elles sont organisées à <strong>Nantes du 7 au 11 juillet 2009</strong>. 5 jours bien chargés découpés en 18 thèmes différents !</p>
<p>Amis du grand Ouest, c&#8217;est trop proche pour le louper !</p>
<p>Toutes les informations sur : <a href="http://2009.rmll.info">http://2009.rmll.info</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/06/rmll-a-nantes/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Présentation de Modelio par Softeam&#8230; ou pas</title>
		<link>http://www.net-liard.com/blog/2009/05/presentation-de-modelio-par-softeam-ou-pas/</link>
		<comments>http://www.net-liard.com/blog/2009/05/presentation-de-modelio-par-softeam-ou-pas/#comments</comments>
		<pubDate>Tue, 19 May 2009 08:59:33 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Modelisation]]></category>

		<category><![CDATA[Modelio]]></category>

		<category><![CDATA[objecteering]]></category>

		<category><![CDATA[Softeam]]></category>

		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=385</guid>
		<description><![CDATA[J&#8217;ai reçu hier une invitation (enfin une publicité) pour un séminaire gratuit Softeam. Jusque là rien d&#8217;exceptionnel, Softeam en propose régulièrement. Ce qui est moins habituel c&#8217;est de recevoir ce mail via Modelio.
Regardez le mail :

Au premier coup d&#8217;oeil, je pense qu&#8217;il s&#8217;agit d&#8217;une après-midi de présentation du produit Modelio. Il faut s&#8217;inscrire sur le [...]]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai reçu hier une invitation (enfin une publicité) pour un séminaire gratuit Softeam. Jusque là rien d&#8217;exceptionnel, Softeam en propose régulièrement. Ce qui est moins habituel c&#8217;est de recevoir ce mail via Modelio.</p>
<p>Regardez le mail :</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/05/modelio-pub.png"><img class="size-medium wp-image-386 aligncenter" title="modelio-pub" src="http://www.net-liard.com/blog/wp-content/uploads/2009/05/modelio-pub-300x269.png" alt="modelio-pub" width="300" height="269" /></a></p>
<p>Au premier coup d&#8217;oeil, je pense qu&#8217;il s&#8217;agit d&#8217;une après-midi de présentation du produit Modelio. Il faut s&#8217;inscrire sur le site de softeam.. pourquoi pas.</p>
<p>Mais en arrivant sur ce site, l&#8217;image n&#8217;est plus la même. On ne parle même plus de Modelio.</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/05/formation_gratuite_juin2009.png"><img class="size-full wp-image-387 aligncenter" title="formation_gratuite_juin2009" src="http://www.net-liard.com/blog/wp-content/uploads/2009/05/formation_gratuite_juin2009.png" alt="formation_gratuite_juin2009" width="432" height="204" /></a></p>
<p>Et si on regarde la description de l&#8217;après midi c&#8217;est encore plus drole :</p>
<blockquote><p>Lors de la pause 15H30-16H, des démonstrations pratiques de l’utilisation d’un atelier comme <strong>Objecteering Scope Manager</strong>, <strong>Objecteering SOA Solution</strong>, <strong>Objecteering UML Modeler</strong>, seront organisées afin de montrer la facilité avec laquelle une telle démarche peut être mise en œuvre avec les outils modernes de modélisation. Une génération vers une application Java et BPEL sera démontrée.</p></blockquote>
<p>Et là je suis un peu perdu&#8230; Moi qui espérait justement que softeam en profite pour clarifier la position de Modelio face à Objecteering. Cette présentation ne semble pas faite pour ça. Pour ajouter à la confusion j&#8217;ai regardé les petites lignes du mail pour savoir comment ils avaient eu mon mail. On peut lire :</p>
<blockquote><p>Nous avons collecté votre adresse email parce que vous êtes client ou en contact avec le département commercial d&#8217;une des sociétés du groupe Softeam (Softeam SA, <strong>Objecteering Software SA</strong>)</p></blockquote>
<p>Donc les clients Objecteering vont recevoir des pubs modelio ?</p>
<p>Ceci mis de côté, ces séminaires sont souvent intéressants et les présentations de Philippe Desfray valent le déplacement <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>EDIT : Le 30 Avril Objecteering a communiqué sur le lien avec Modelio <a href="http://www.objecteering.fr/company_event_2009_avr_modelio.php">http://www.objecteering.fr/company_event_2009_avr_modelio.php</a></p>
<p>Les choses sont un peu plus claires</p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/05/presentation-de-modelio-par-softeam-ou-pas/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Petit lifting</title>
		<link>http://www.net-liard.com/blog/2009/05/petit-lifting/</link>
		<comments>http://www.net-liard.com/blog/2009/05/petit-lifting/#comments</comments>
		<pubDate>Sun, 17 May 2009 15:04:10 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Perso]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=381</guid>
		<description><![CDATA[Après un peu plus d&#8217;un an de fonctionnement j&#8217;ai eu envie de rafraîchir un peu le blog. Malheureusement je suis très vite limité par mes piètres talents de graphiste. Je me suis donc limité à changer de thème en apportant ma petite touche au niveau de l&#8217;image sous le titre.
Petite nouveauté, j&#8217;ai ajouté une vidéo [...]]]></description>
			<content:encoded><![CDATA[<p>Après un peu plus d&#8217;un an de fonctionnement j&#8217;ai eu envie de rafraîchir un peu le blog. Malheureusement je suis très vite limité par mes piètres talents de graphiste. Je me suis donc limité à changer de thème en apportant ma petite touche au niveau de l&#8217;image sous le titre.</p>
<p>Petite nouveauté, j&#8217;ai ajouté une vidéo en haut à droite de la page créant un buzz où que je trouve drôle. L&#8217;idée est de la partager sans créer un post totalement creux avec juste : &#8220;Regardez la&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/05/petit-lifting/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Les domaines .tel</title>
		<link>http://www.net-liard.com/blog/2009/05/domaines-tel/</link>
		<comments>http://www.net-liard.com/blog/2009/05/domaines-tel/#comments</comments>
		<pubDate>Wed, 13 May 2009 18:26:17 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Perso]]></category>

		<category><![CDATA[.tel]]></category>

		<category><![CDATA[domaine]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=307</guid>
		<description><![CDATA[La semaine dernière j&#8217;ai acheté le domaine liard.tel chez telnic.org.
L&#8217;idée est sympa, on peut retrouver toutes mes coordonnées sur une page web avec une adresse facile à retenir. Pas d&#8217;hébergement à gérer ni de html à écrire, grâce à une interface très simple à utiliser :

Pour 17 Euros par an (et non 59 Euros comme c&#8217;était [...]]]></description>
			<content:encoded><![CDATA[<p>La semaine dernière j&#8217;ai acheté le domaine <a href="http://liard.tel">liard.tel</a> chez <a href="http://telnic.org/index.html">telnic.org</a>.</p>
<p>L&#8217;idée est sympa, on peut retrouver toutes mes coordonnées sur une page web avec une adresse facile à retenir. Pas d&#8217;hébergement à gérer ni de html à écrire, grâce à une interface très simple à utiliser :</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/05/telhosting.jpg"><img class="alignnone size-full wp-image-308" title="telhosting" src="http://www.net-liard.com/blog/wp-content/uploads/2009/05/telhosting.jpg" alt="" width="500" height="415" /></a></p>
<p style="text-align: left;">Pour 17 Euros par an (et non 59 Euros comme c&#8217;était annoncé) ça reste raisonnable. Le seul problème risque d&#8217;être le spam. En une semaine j&#8217;ai déjà reçu deux appels vocaux m&#8217;annonçant que j&#8217;avais gagné 8000 Euros et qu&#8217;il fallait appeler le 08&#8230;. D&#8217;un autre côté, avant je recevais déjà des SMS du même style.</p>
<p style="text-align: left;"> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/05/domaines-tel/feed/</wfw:commentRss>
		</item>
		<item>
		<title>ActiveMQ</title>
		<link>http://www.net-liard.com/blog/2009/04/activemq/</link>
		<comments>http://www.net-liard.com/blog/2009/04/activemq/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 06:42:59 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Java]]></category>

		<category><![CDATA[ActiveMQ]]></category>

		<category><![CDATA[JMS]]></category>

		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=234</guid>
		<description><![CDATA[Pendant une petite semaine j&#8217;ai regardé de plus près le serveur de JMS ActiveMQ. Je vais vous faire partager mes premières remarques.
Le coeur
ActiveMQ est un broker de message à utiliser pour le développement d&#8217;une architecture MOM (Middleware Oriente Messages). Je l&#8217;ai choisi aussi pour sa bonne intégration avec Spring et sa bonne tenue en charge.
Son [...]]]></description>
			<content:encoded><![CDATA[<p>Pendant une petite semaine j&#8217;ai regardé de plus près le serveur de JMS ActiveMQ. Je vais vous faire partager mes premières remarques.</p>
<h1>Le coeur</h1>
<p>ActiveMQ est un broker de message à utiliser pour le développement d&#8217;une architecture MOM (Middleware Oriente Messages). Je l&#8217;ai choisi aussi pour sa bonne intégration avec Spring et sa bonne tenue en charge.</p>
<p>Son architecture est simple : (source : http://activemq.apache.org/code-overview.html)</p>
<p><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/03/activemq.png"><img class="aligncenter size-medium wp-image-235" title="activemq" src="http://www.net-liard.com/blog/wp-content/uploads/2009/03/activemq-300x205.png" alt="" width="300" height="205" /></a></p>
<p><span id="more-234"></span></p>
<p>Donc trois couches autour de la gestion des Queues et des Topics :</p>
<h2>1 - Message Store</h2>
<p>On a la possibilité de choisir comment persister (ou non) les messages.</p>
<p>Sans persistance (message en mémoire) le risque est bien sûr de perdre des messages en cas d&#8217;arrêt du processus, mais c&#8217;est aussi comme cela que l&#8217;on obtient les meilleures performances. Par contre je n&#8217;ai pas testé le cas sans consommateur de message et où on peut vite obtenir un OutOfMemory.</p>
<p>Par défaut, ActiveMQ propose une persistance sous forme de fichiers assez performante nommée simplement &#8220;AMQ Message Store&#8221;. Dans la même famille un module kaha sauvegarde les messages sur le disque dur.<br />
Attention par contre j&#8217;ai constaté des problèmes de perte de messages avec une persitence kaha lorsque j&#8217;avais 100 threads en parallèle envoyant chacun dix messages par seconde. En passant sur AMQ Message Store je n&#8217;ai pas eu de problème.</p>
<p>Il y a aussi les solutions reposant sur une base de données. Par défaut ActiveMQ lance un Derby embarqué mais il est possible d&#8217;utiliser un pont JDBC pour se connecter à une vrai base. C&#8217;est même fortement recommendé au vue des temps d&#8217;accès plus que moyens de Derby.</p>
<p>Pour finir j&#8217;ai comparé le temps de création de 10 000 Messages en fonction du système de persistance choisi. Ces chiffres sont bien sûr à prendre uniquement comme éléments de comparaison entre les solutions. J&#8217;ai fait ces mesures sur mon petit PC.<br />
<center></p>
<table border="0">
<tbody>
<tr>
<td width="100" align="center"><strong>Persistance</strong></td>
<td align="center"><strong>Temps de création</strong></td>
</tr>
<tr align="center">
<td>Mémoire</td>
<td>1.3s</td>
</tr>
<tr align="center">
<td>AMQ</td>
<td>2.6s</td>
</tr>
<tr align="center">
<td>Kaha</td>
<td>3s</td>
</tr>
<tr align="center">
<td>Base Oracle</td>
<td>61s</td>
</tr>
<tr align="center">
<td>Derby</td>
<td>527s</td>
</tr>
</tbody>
</table>
<p></center><br />
On note donc un facteur deux entre une persistance mémoire et une persistance sur le file system. Les rapports allant de 40 à 400 pour les solutions base de données sont plus discutables. En effet mon disque dur n&#8217;est pas forcément bien défragmenté et ma base Oracle est sur mon réseau derriere plusieurs fire-wall que je ne maitrise pas.</p>
<h2>2 - Connectors</h2>
<p>ActiveMQ offre différents connecteurs pour échanger des messages. De base il est possible de se connecter en tcp, mais il est aussi possible d&#8217;échanger en texte via HTTP (REST ou SOAP).</p>
<p>Je ne m&#8217;attarderai pas trop sur le sujet car je n&#8217;ai pas beaucoup testé ces fonctionnalités</p>
<h2>3 - Network Services</h2>
<p>Dans cette section on trouve les différents moyens de dialogue entre les serveurs activeMQ. Entre autres un composant Discovery permettant de retrouver d&#8217;autres serveurs sur le même réseau automatiquement.</p>
<p>Par exemple un serveur A qui n&#8217;a pas de consommateur connecté pour lire des messages pour une queue B ne pourra pas traiter ces messages. Par contre il va pouvoir trouver sur le réseau un autre serveur avec le bon consommateur et lui envoyer ses messages.</p>
<h1>Intégration avec Spring</h1>
<p>L&#8217;utilisation dans spring est simple, il faut utiliser un BrokerFactoryBean pour démarrer le serveur.</p>
<pre name="code" class="xml:nogutter:nocontrols">
<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">
<property name="config" value="classpath:activemq.xml"></property>
<property name="start" value="true"></property>
</bean>
</pre>
<p>Ensuite pour se connecter au broker on utilise une Factory activeMQ et un template JMS de Spring.</p>
<pre name="code" class="xml:nogutter:nocontrols">
<!-- pool de connection JMS -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop">
<property name="connectionFactory">
    <bean class="org.apache.activemq.ActiveMQConnectionFactory" depends-on="broker">
<property name="brokerURL">
        <value>vm:localhost</value>
      </property>
    </bean>
  </property>
</bean>
<!-- JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
    <ref local="jmsFactory" />
  </property>
</bean>
<!-- Declaration d'une queue -->
<bean id="queue1" class="org.apache.activemq.command.ActiveMQQueue">
  <constructor-arg index="0">
    <value>queue1</value>
  </constructor-arg>
</bean>
</pre>
<p> <br />
Enfin on peut déclarer nos beans producteurs et consommateurs</p>
<pre name="code" class="xml:nogutter:nocontrols">
<!-- Consomateur -->
<!-- le bean myConsumerBean doit implementer l'interface javax.jms.MessageListener -->
<bean id="consumer1" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="concurrentConsumers" value="5" ></property>
<property name="connectionFactory" ref="jmsFactory" ></property>
<property name="destination" ref="queue1" ></property>
<property name="messageListener" ref="myConsumerBean" ></property>
</bean>
<!-- Producteur -->
<bean id="AuthentificationBean" class="com.test.ProductorBean">
<property name="template" ref="jmsTemplate" ></property>
<property name="dest" ref="queue1" ></property>
</bean>
</pre>
<h1>Répartition de charge</h1>
<p>Le principal intérêt des architectures MOM est leur capacité à monter en charge en la distribuant sur plusieurs noeuds.</p>
<p><center><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/04/repartition1.png"></a><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/04/repartition1.png"><img class="alignnone size-full wp-image-255" title="repartition1" width="500" height="244" src="http://www.net-liard.com/blog/wp-content/uploads/2009/04/repartition1.png" alt="" /></a></center></p>
<p>Dans cette configuration le producteur à un rôle de loadBalancer et il suffit d&#8217;ajouter des serveurs pour absorber plus de charges. De plus l&#8217;utilisation d&#8217;un NetworkConnector permet aux serveurs de dialoguer entre eux et d&#8217;échanger des messages en cas de surcharge d&#8217;un serveur ou simplement de l&#8217;arrêt d&#8217;un des consommateurs.</p>
<p>Le point faible de cette architecture est le risque de perte de message. En effet si le serveur A tombe la chaine n&#8217;est pas cassée grâce à B et C. Mais si A avait persisté des messages non consommés avant le crash, ils resteront en attente jusqu&#8217;au redémarrage du serveur. Pire, si la base de données ou le disque dur où ils étaient stockés est mort, ces messages sont définitivement perdus.</p>
<h1>Master Slave</h1>
<p>Une solution pour éviter d&#8217;avoir des messages en attente à cause d&#8217;un arrêt de serveur est l&#8217;utilisation de la configuration Master/Slave. ActiveMQ propose 4 solutions de mise en place :</p>
<h2>1 - Pure Master Slave</h2>
<p>Une configuration simple à mettre en place, il suffit d&#8217;indiquer dans le fichier de configuration du serveur esclave l&#8217;adresse du maitre.</p>
<p>Par contre le gros problème de cette solution vient du mode de reprise sur incident. En effet si le maitre s&#8217;arrête, l&#8217;esclave reprend bien le relais. Mais après avoir relancé le noeud maitre, on doit relancer l&#8217;esclave pour revenir à un état stable. Autre gros problème un maitre ne peu avoir qu&#8217;un seul esclave.</p>
<h2>2 - Shared File System Master Slave</h2>
<p>Dans ce cas le principe est d&#8217;utiliser une persistance fichier pour les messages et de faire pointer plusieurs instances d&#8217;activeMQ sur le meme repertoire. La premiere insctance pose un lock sur les fichier et devient le Master, les autres attendent de pouvoir poser leur lock et sont donc Slave pendant ce temps.</p>
<p>On ne retrouve pas le problème de redémarrage de la première solution, car l&#8217;esclave qui a repris le lock sur les fichiers est passé maitre et au redémarrage du noeud tombé il repasse naturellement esclave.</p>
<h2>3 - JDBC Master Slave</h2>
<p>Exactement le même fonctionnement que la solution 2 mais en utilisant une base de données à la place des fichiers.</p>
<h2>4 - KahaDB Master Slave</h2>
<p>Cette solution est intéressante sur le papier car elle permet un fonctionnement Master/Slave sans avoir besoin de partager des fichiers ou une base. Mais elle n&#8217;est pas livrée dans la release de activeMQ pour le moment et je n&#8217;ai pas réussi à faire fonctionner la version nightly-build.</p>
<h1>Configuration choisie</h1>
<p>Pour l&#8217;architecture de mon application je me suis orienté vers la seconde solution de configuration Master/Slave pour construire la solution suivante :</p>
<p><center><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/04/repartition2.png"><img src="http://www.net-liard.com/blog/wp-content/uploads/2009/04/repartition2.png" alt="" title="repartition2" width="500" height="244" class="alignnone size-full wp-image-285" /></a></center></p>
<p>Dans cette configuration on garde une capacité à monter en charge par l&#8217;ajout de serveur mais on a en plus l&#8217;utilisation du mode Master/Slave pour prévenir la perte ou le blocage de message.<br />
Pour le moment je suis resté sur une persistance fichier aux vues des résultats de performance, mais il faudra les confirmer sur les machines cibles et avec un disque réseau pour le partage.</p>
<p>J&#8217;ai aussi rencontré un problème au niveau des JVM contenant un activeMQ esclave. En effet le bean de lancement du serveur bloque la JVM pendant l&#8217;attente du lock et comme dans mon cas je voulais avoir mes consommateurs dans la même JVM, ils étaient bloqués.</p>
<p>Pour pouvoir avoir dans une JVM un serveur ActiveMQ et des consommateurs connectés au master, j&#8217;ai du modifier le <a href='http://www.net-liard.com/blog/wp-content/uploads/2009/04/threadbrokerfactorybean.java'>BrokerFactoryBean</a> pour lancer dans un autre Thread le serveur. Grâce à cela le serveur hébergeant le noeud esclave travaille même lorsque le maitre n&#8217;est pas mort.</p>
<p>Pour absorber plus de charge on a deux possibilités</p>
<ul>
<li>Ajouter un autre groupe Master/Slave</li>
<li>Ajouter des slaves</li>
</ul>
<p>Si on a un problème avec ActiveMQ qui n&#8217;absorbe pas assez bien les messages il faut choisir la première solution. Par contre si c&#8217;est un problème de consommation pas assez rapide, il suffit d&#8217;ajouter des esclaves et donc de nouveaux consommateurs.</p>
<h1>Conclusion</h1>
<p>Pour rendre plus concret ce dernier exemple vous pouvez <a href='http://www.net-liard.com/blog/wp-content/uploads/2009/04/activemq.zip'> télécharger une maquette de celui ci </a>. J&#8217;ai ajouté des fichiers .launch eclipse pour configurer le port JMX. C&#8217;est très pratique pour observer avec la jconsole l&#8217;activité du serveur activeMQ.</p>
<p>Ces premiers essais avec activeMQ sont assez satisfaisants et donnent envie de l&#8217;utiliser dans nos projets. Je garde aussi un oeil sur les évolutions du mode &#8220;KahaDB Master Slave&#8221; qui devraient bientot etre livrées.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/04/activemq/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Retour de vacances</title>
		<link>http://www.net-liard.com/blog/2009/04/retour-de-vacances/</link>
		<comments>http://www.net-liard.com/blog/2009/04/retour-de-vacances/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 07:14:50 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Perso]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=250</guid>
		<description><![CDATA[Après une petite semaine de ski je découvre plusieurs news très intéressantes

Google App Engine supporte enfin le Java
Modelio sort sa version Entreprise
SFR ouvre un concours Android

Pas mal de choses à tester donc.
Pour le dernier point, j&#8217;ai déjà donné au niveau concours. En plus c&#8217;est pour SFR, je suis pas sûr que mon patron apprécirait  [...]]]></description>
			<content:encoded><![CDATA[<p>Après une petite semaine de ski je découvre plusieurs news très intéressantes</p>
<ul>
<li><a href="http://code.google.com/intl/fr-FR/appengine/">Google App</a> Engine supporte enfin le Java</li>
<li>Modelio sort sa version <a href="http://www.modeliosoft.com/en/products/modelio-enterprise-edition/125.html">Entreprise</a></li>
<li>SFR ouvre un <a href="http://www.sfrjtd.fr/">concours</a> Android</li>
</ul>
<p>Pas mal de choses à tester donc.</p>
<p>Pour le dernier point, j&#8217;ai déjà donné au niveau concours. En plus c&#8217;est pour SFR, je suis pas sûr que mon patron apprécirait <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> Et puis un coucours SFR pour une appli IPhone aurait été plus drôle !</p>
<p>Avant ces tests je vais finaliser un article sur la mise en place de <a href="http://activemq.apache.org/">activeMQ</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/04/retour-de-vacances/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Le PSM est-il toujours utile ?</title>
		<link>http://www.net-liard.com/blog/2009/03/le-psm-est-il-toujours-utile/</link>
		<comments>http://www.net-liard.com/blog/2009/03/le-psm-est-il-toujours-utile/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 22:49:05 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Modelisation]]></category>

		<category><![CDATA[Enterprise Architect]]></category>

		<category><![CDATA[MDA]]></category>

		<category><![CDATA[PIM]]></category>

		<category><![CDATA[PSM]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=214</guid>
		<description><![CDATA[Pendant plus de 4 ans nous avons travaillé sur un projet avec un outillage MDA en utilisant le mécanisme suivant pour générer du code :

Sur le papier nous respections bien les concepts MDA avec une séparation du modèle abstrait de haut niveau (le PIM) et un autre spécifique à nos contraintes techniques (le PSM).
Mais si [...]]]></description>
			<content:encoded><![CDATA[<p>Pendant plus de 4 ans nous avons travaillé sur un projet avec un outillage MDA en utilisant le mécanisme suivant pour générer du code :</p>
<p style="text-align: center;"><span style="text-decoration: underline;"><img class="alignnone size-full wp-image-217" title="psm1" src="http://www.net-liard.com/blog/wp-content/uploads/2009/03/psm1.png" alt="" width="306" height="207" /></span></p>
<p>Sur le papier nous respections bien les concepts MDA avec une séparation du modèle abstrait de haut niveau (le PIM) et un autre spécifique à nos contraintes techniques (le PSM).</p>
<p>Mais si on regarde de plus près on trouve dans notre PIM des informations liées à nos choix technologiques que l&#8217;on ajoute grâce à un profil (stéréotype finder, tagged value sql_name, etc). A quoi sert notre PSM du coup ? Comme notre modeleur offrait une solution de génération de code Java, nous pensions intéressant de l&#8217;utiliser. Nous avons donc réalisé un transformateur modèle vers modèle pour construire un PSM collant aux besoins du générateur Java. Dans les faits le PSM nous a aussi permis de pallier à certains bugs de ce générateur en modifiant à la main le PSM pour obtenir du code Java correct. Mais notre PSM est une image un pour un du code java. </p>
<p>Lorsque je montre cela à nos experts MDA, j&#8217;ai le droit systématiquement au discours : &#8220;Samuel t&#8217;as tout faux, il faut séparer les concepts. Regarde comment il faut faire&#8221;</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/03/psm2.png"><img class="alignnone size-full wp-image-219" title="psm2" src="http://www.net-liard.com/blog/wp-content/uploads/2009/03/psm2.png" alt="" width="448" height="281" /></a></p>
<p>Effectivement sur le papier c&#8217;est une bonne idée. Il faut mettre les bonnes informations au bon niveau.</p>
<p>La première question que je pose à cette personne c&#8217;est : &#8220;Dis moi, ça fait combien de temps que tu n&#8217;as pas écrit une ligne de code ?&#8221;</p>
<p>C&#8217;est bien beau de philosopher sur MDA, mais on oublie vite la finalité : mieux produire du code. Si à chaque modification de modèle il faut faire trois transformations, c&#8217;est inutilisable ! Pour moi, dix secondes et deux clicks c&#8217;est le maximum acceptable par une équipe de développement pour passer du modèle au code. Si on met plus de temps ou s&#8217;il y a plus d&#8217;étapes l&#8217;outil est inexploitable.</p>
<p>C&#8217;est dans l&#8217;optique d&#8217;avoir moins d&#8217;étapes et de simplifier notre chaine de développement que nous utilisons maintenant une transformation Modèle vers Texte.</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/03/psm3.png"><img class="alignnone size-full wp-image-221" title="psm3" src="http://www.net-liard.com/blog/wp-content/uploads/2009/03/psm3.png" alt="" width="311" height="128" /></a></p>
<p>Vous remarquerez que je n&#8217;utilise plus le mot PIM pour ne plus me faire taper sur les doigts <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Mais même si notre modèle n&#8217;est pas vraiment un PIM, il ne colle pas non plus au code et on peut s&#8217;appuyer dessus pour générer une belle documentation de haut niveau.</p>
<p>Dans ce cas il faut par contre réécrire un générateur Java. Mais le gros avantage est que ce générateur va répondre à 100% de vos exigences en terme de règle de codage et de formatage. De plus si l&#8217;outil de transformation est bien fait il offre de bonnes boites à outils (transformer une opération UML en signature de méthode Java par exemple). Si réécrire ce générateur est plus rapide et plus facile à maintenir qu&#8217;un tranformateur Modèle vers Modèle, cette méthode est plus intéressante. Et pourquoi utiliser des mécanismes complexes pour résoudre un problème simple ?</p>
<p>Concrètement nous avions presque 15 000 lignes de code J à maintenir juste pour notre transformateur Modèle vers Modèle, nous avons maintenant moins de 3 000 lignes de scripts acceleo pour générer le même code Java.</p>
<p>Donc aux vues de notre utilisation, avoir un modèle PSM n&#8217;apporte rien. Notre PSM c&#8217;est le code Java, après tout c&#8217;est un modèle comme un autre <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/03/le-psm-est-il-toujours-utile/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Premier test de Modelio</title>
		<link>http://www.net-liard.com/blog/2009/02/premier-test-de-modelio/</link>
		<comments>http://www.net-liard.com/blog/2009/02/premier-test-de-modelio/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 21:26:32 +0000</pubDate>
		<dc:creator>Samuel</dc:creator>
		
		<category><![CDATA[Modelisation]]></category>

		<category><![CDATA[MDA]]></category>

		<category><![CDATA[Modelio]]></category>

		<category><![CDATA[objecteering]]></category>

		<category><![CDATA[UML]]></category>

		<guid isPermaLink="false">http://www.net-liard.com/blog/?p=188</guid>
		<description><![CDATA[Après avoir passé quelques heures à tester Modelio je vous en fais un petit retour. 
Installation
La première bonne nouvelle est qu&#8217;il est possible d&#8217;avoir sur un même poste plusieurs versions différentes de Modelio. J&#8217;ai installé la version Free et la version Java sur mon poste sans problème. Bien-sûr un projet créé avec la version Java n&#8217;est [...]]]></description>
			<content:encoded><![CDATA[<p>Après avoir passé quelques heures à tester Modelio je vous en fais un petit retour. </p>
<h2>Installation</h2>
<p>La première bonne nouvelle est qu&#8217;il est possible d&#8217;avoir sur un même poste plusieurs versions différentes de Modelio. J&#8217;ai installé la version Free et la version Java sur mon poste sans problème. Bien-sûr un projet créé avec la version Java n&#8217;est pas utilisable avec la version free (l&#8217;inverse est possible par contre).</p>
<p>L&#8217;empreinte mémoire est assez faible (100Mo). Ca reste raisonnable. Par contre l&#8217;ouverture et la création de projet est vraiment lent et le fichier contenant le modèle est déjà gros même vide.</p>
<h2>Utilisation</h2>
<p>La première chose que je remarque c&#8217;est la disparition de la barre action gauche au niveau du modèle Explorer.</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/02/modelio1.jpg"><img class="size-full wp-image-199 aligncenter" title="modelio1" src="http://www.net-liard.com/blog/wp-content/uploads/2009/02/modelio1.jpg" alt="" width="500" height="242" /></a></p>
<p>A la place il faut utiliser les menus pop-up du click droit comme avec l&#8217;éditeur de modèle emf d&#8217;Eclipse. C&#8217;est vraiment dommage et je trouve que l&#8217;on perd beaucoup de temps pour construire un modèle.</p>
<p>Ensuite il manque toujours une aide à l&#8217;édition sur les diagrammes au niveau de la création des liens entre item (association, dépendances et autre). Je parle de cette petite flèche qui apparait en haut à droite de l&#8217;élément d&#8217;un diagramme lorsque la souris est au dessus et qui permet de créer une association ou un autre type de lien avec un autre item. RSM et EA le propose depuis pas mal de temps et je m&#8217;y suis bien habitué.</p>
<p>Attention aussi à la gestion du delete, maintenant lorsqu&#8217;on supprime un élément d&#8217;un diagramme, il est aussi supprimé sur modèle.</p>
<h2>Génération Java</h2>
<p>Une des nouveautés est l&#8217;utilisation d&#8217;annotation Java5 pour remplacer les marqueurs en commentaire.</p>
<p style="text-align: center;"><a href="http://www.net-liard.com/blog/wp-content/uploads/2009/02/modelio21.jpg"><img class="alignnone size-full wp-image-203" title="modelio21" src="http://www.net-liard.com/blog/wp-content/uploads/2009/02/modelio21.jpg" alt="" width="438" height="469" /></a></p>
<p>C&#8217;est plus lisible, mais il faut accepter d&#8217;être dépendant d&#8217;un jar medelio. L&#8217;utilisation des annotations n&#8217;est possible qu&#8217;en mode &#8220;Round Trip&#8221;, lorsque l&#8217;on passe en mode &#8220;Model Driven&#8221; on revient sur une utilisation de commentaires Java.</p>
<p>La gestion des attributs d&#8217;une classe Java ne semble pas vraiment pratique. A partir du moment où un attribut est noté privé, les méthodes get et set de celui-ci apparaissent comme par magie ! (en fonction de son mode d&#8217;accès quand même). C&#8217;est très troublant. On peut bien sûr les effacer mais à la moindre modification de l&#8217;attribut elles réapparaissent ! L&#8217;avantage est de pouvoir customizer le code java des getter et setter, ce qui était impossible avec Objecteering. Par contre maintenant le modèle est vraiment une représentation du code à l&#8217;identique. Je ne suis pas très fan de cette approche, je préfère avoir un modèle assez haut niveau (un PIM si on veut) qui peut se mapper sur mon code (le PSM du coup). </p>
<p>Par contre les produits de génération n&#8217;existent plus. On ne peut configurer qu&#8217;un seul répertoire de génération de code. Donc maintenant un projet UML = un projet Java. C&#8217;est très génant si comme moi vous représentez plusieurs couches de votre application dans un seul modèle mais que chaque couche a son propre projet java.</p>
<h2>Conclusion</h2>
<p>Mes premiers essais sont assez mitigés, les nouveautés de Modelio sont loin de compenser les fonctions retirées d&#8217;objecteering (produit de génération, barre d&#8217;action etc&#8230;).</p>
<p>Au niveau UML 2, rien à dire, le méta-modèle est bon. Modelio contrôle bien la validité du modèle. Pour moi c&#8217;est un plus. Même si des outils comme EA où on peut faire tout et n&#8217;importe quoi paressent plus simples à prendre en main, au final ils engendrent souvent des modèles inutilisables. </p>
<p>Par contre le plus grave aujourd&#8217;hui est que l&#8217;import XMI ne fonctionne pas et il n&#8217;y a même pas d&#8217;export XMI. Sans export XMI, le modèle est emprisonné dans Modelio. Pour moi il est hors de question d&#8217;utiliser un outil sans avoir une solution pour exploiter le modèle avec d&#8217;autres outils de transformation de modèle ou de génération de code (comme Acceleo par exemple). J&#8217;ai fait cette erreur avec Objecteering 6 qui n&#8217;avait pas d&#8217;export XMI, on ne m&#8217;y remprendra pas ! <img src='http://www.net-liard.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
J&#8217;attends toujours de tester la partie MDA et multi-user avec SVN de Modelio. Mais il faut attendre la version entreprise en Mars-Avril pour ça.</p>
<p>Affaire à suivre donc !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.net-liard.com/blog/2009/02/premier-test-de-modelio/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
