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

<channel>
	<title>Le Touilleur Express &#187; jboss</title>
	<atom:link href="http://www.touilleur-express.fr/tag/jboss/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.touilleur-express.fr</link>
	<description>Blog sur Java, le métier de développeur et la vie de freelance par Nicolas Martignole</description>
	<lastBuildDate>Wed, 08 Feb 2012 11:54:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Devoxx : ESB in Financial Application</title>
		<link>http://www.touilleur-express.fr/2008/12/27/devoxx-esb-in-financial-application/</link>
		<comments>http://www.touilleur-express.fr/2008/12/27/devoxx-esb-in-financial-application/#comments</comments>
		<pubDate>Fri, 26 Dec 2008 23:00:26 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[devoxx]]></category>
		<category><![CDATA[esb]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[mule]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.touilleur-express.fr/?p=635</guid>
		<description><![CDATA[Cette année j&#8217;ai eu l&#8217;occasion de présenter un sujet sous la forme d&#8217;un Quickie à Devoxx. Il s&#8217;agit d&#8217;une mini-présentation limitée à 15 minutes, à l&#8217;heure du déjeuner. Au final j&#8217;ai bien aimé cette première expérience, en anglais et devant pas mal de monde mine de rien. Voici la présentation en français.
1. ESB in Financial Application

2. Objectif de la présentation

En quinze minutes, l&#8217;idée de cette présentation est d&#8217;expliquer les besoins rencontrés dans le monde de la finance en terme d&#8217;architecture. Où en sommes-nous aujourd&#8217;hui et quels outils pouvons-nous utiliser afin ...]]></description>
			<content:encoded><![CDATA[<p>Cette année j&#8217;ai eu l&#8217;occasion de présenter un sujet sous la forme d&#8217;un Quickie à <a href="http://www.devoxx.com">Devoxx</a>. Il s&#8217;agit d&#8217;une mini-présentation limitée à 15 minutes, à l&#8217;heure du déjeuner. Au final j&#8217;ai bien aimé cette première expérience, en anglais et devant pas mal de monde mine de rien. Voici la présentation en français.</p>
<p><strong>1. ESB in Financial Application</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.001-001.png"/></p>
<p><strong>2. Objectif de la présentation</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.003-001.png"/><br />
En quinze minutes, l&#8217;idée de cette présentation est d&#8217;expliquer les besoins rencontrés dans le monde de la finance en terme d&#8217;architecture. Où en sommes-nous aujourd&#8217;hui et quels outils pouvons-nous utiliser afin de réduire les coûts et améliorer nos architectures ?</p>
<p><strong>3. Speaker&#8217;s Qualifications</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.004-001.png"/><br />
Après 5 ans 1/2 chez Reuters, j&#8217;ai débuté une nouvelle activité en tant qu&#8217;indépendant. Je travaille actuellement chez BNP-Paribas sur une mission d&#8217;architecture. Je suis membre du Paris Java User Group.</p>
<p><strong>4. ESB</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.005-001.png"/><br />
ESB. Ce mot est à la mode. A Devoxx j&#8217;ai compté 4 conférences cette année. Mule est traité 3 fois par Antoine Borg avec qui j&#8217;ai eu le plaisir de discuter la veille, bref il se passe quelque chose. A noter qu&#8217;aucune conférence ne nous parle de téléphone portable, les thèmes cette année tournent autour de l&#8217;intégration, de la sécurité ou de SOA. Voyons un peu &laquo;&nbsp;dans la vraie vie&nbsp;&raquo; où nous en sommes aujourd&#8217;hui, car moi, plutôt que de parler de SOA ou d&#8217;ESB, j&#8217;aime bien parler du terrain avant tout.</p>
<p><strong>5. A legacy application</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.006-001.png"/><br />
Ce que l&#8217;on constate c&#8217;est que les applications vieillissantes dans le monde Java des applications de gestion et de la finance, se présentent avec un socle d&#8217;architecture bien connu. Autour d&#8217;une architecture trois-tiers, nous retrouvons souvent du Struts pour la partie Web, un serveur d&#8217;application avec encore beaucoup d&#8217;EJB 2.1, et les innovations des dernières années que sont Hibernate, Spring et JMS. Et il est clair que ce type d&#8217;architecture aujourd&#8217;hui en production est encore amené à perdurer pour quelques années.<br />
Votre travail sera donc de faire vivre, d&#8217;améliorer ou de transformer ce type d&#8217;architecture.</p>
<p><strong>6. A legacy application (cont.)</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.006-004.png"/><br />
Dans la finance, une application web communique et échange des ressources avec le monde extérieur en utilisant un certain nombre de connecteurs techniques (boîtes vertes). Ce code est bien souvent du code développé au fur et à mesure des besoins. Il peut s&#8217;agir de lire un fichier, d&#8217;échanger via JMS avec une autre application, de faire appel à un web service, ou d&#8217;envoyer un email. Bref, du code massivement technique. Ce code est le socle de communication de chaque application de gestion.</p>
<p><strong>7. Connect</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.007-001.png"/><br />
Connecter.<br />
Le besoin de Connecter différents systèmes. Ce besoin entraine un travail de médiation, de transformation et d&#8217;interconnexion entre systèmes. Je veux montrer ici qu&#8217;il y a forcément un besoin de connexion, au minimum avec une base de données relationnelles, mais bien souvent avec d&#8217;autres systèmes informatiques ou techniques. C&#8217;est une composante fondamentale de nos solutions, de ce que nous sommes appelés à développer.</p>
<p><strong>8. Ecosystem</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.008-001.png"/><br />
J&#8217;ai représenté sur ce slide une application financière typique de création de rapports, utilisé sur une plateforme de Prime Brokerage. Ce que nous voyons tout d&#8217;abord, c&#8217;est que cette application a besoin d&#8217;un environnement pour fonctionner, un écosystème. Cet écosystème est composé d&#8217;un grand nombre d&#8217;applications, maintenu par d&#8217;autres équipes que la mienne.<br />
Mon application est représentée au milieu avec ses 3 services internes.</p>
<p><strong>9. Ecosystem 2</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.008-003.png"/><br />
Cette application utilise les données du marché ainsi qu&#8217;un service de tenue de Position. Aujourd&#8217;hui les échanges entre les systèmes s&#8217;effectuent avec des fichiers plats via des répertoires partagés ou via JMS. Dans le livre Enterprise Integration Pattern, une excellente présentation explique les avantages et les inconvénients de ces 2 types d&#8217;échange.</p>
<p><strong>10. Ecosystem 3</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.008-009.png"/><br />
Au delà des échanges de mon application, ce qui est encore plus intéressant c&#8217;est de constater que les autres applications échangent elles-aussi des informations entre elles. Il faut donc bien voir que nous sommes là face à un vrai réseau de communication, de médiation et d&#8217;échanges. C&#8217;est le coeur d&#8217;une architecture financière.</p>
<p><strong>11. Ecosystem 4</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.008-012.png"/><br />
Au final je dois prendre en compte que mon application cohabite, échange et transfert ses données avec un nombre assez important d&#8217;applications. Je ne rentre pas dans les détails de la partie métier, car l&#8217;idée ici n&#8217;est pas de vous donner un cours de finance des marchés, simplement d&#8217;expliquer que les systèmes sont massivement connectés en un réseau.</p>
<p><strong>12. Ecosystem 5</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.008-013.png"/><br />
&#8230; En forçant un peu le trait, je peux faire une analogie avec un réseau social comme FaceBook : mon application fait partie d&#8217;un réseau, d&#8217;autres applications m&#8217;envoient des messages, observent même les données que je produis sans que je ne le sache, il y a donc clairement un besoin important à résoudre : ce besoin de communication et d&#8217;échanges avec mes &laquo;&nbsp;amis&nbsp;&raquo;.</p>
<p><strong>13. Collaborate</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.009-001.png"/><br />
Collaborate en anglais, difficile à traduire avec le même sens en français.<br />
Collaborer c&#8217;est apprendre à se connaître : lorsque mon application échange avec d&#8217;autres systèmes financiers, au delà du problème technique à résoudre il y aura une interaction humaine. Et donc, ESB ou non, SOA ou non, ce projet d&#8217;inter-communication doit s&#8217;accompagner de la définition d&#8217;une langue pour se comprendre, d&#8217;un média pour discuter et d&#8217;un contenu pour s&#8217;entendre.<br />
Revenons un peu à notre application financière type pour parler d&#8217;un facteur très important : le temps.</p>
<p><strong>14. Timebox and Adaptive</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.010-001.png"/><br />
J&#8217;ai sélectionné ces deux photos du métro afin d&#8217;illustrer un facteur important dans les applications financières : l&#8217;importance de l&#8217;heure de la journée. Prenons le métro de Paris : le matin entre 07h00 et 09h00 il y a un métro chaque minute. A 14h il y a un métro toutes les 6 minutes. A 23h00 il y a une rame toutes les 15 minutes.<br />
Le nombre de rame de métro par heure s&#8217;adapte selon les heures d&#8217;affluence.<br />
Qu&#8217;en est-il de mon application financière ?<br />
Chaque matin celle-ci a besoin de 10 fois plus de puissance qu&#8217;en pleine journée, car la génération des rapports doit s&#8217;effectuer à la fermeture du marché boursier, dans un intervalle de temps limité. Il n&#8217;est pas possible de lancer la génération tant que le marché est ouvert. D&#8217;autre part celle-ci doit s&#8217;effectuer avant l&#8217;ouverture du marché suivant, en Asie. De fait, nous nous retrouvons avec une architecture qui doit répondre à des demandes fluctuantes selon l&#8217;heure de la journée.<br />
Mais le plus important est que notre application n&#8217;a pas le droit à une deuxième chance. Lorsqu&#8217;un bug survient, il faut que l&#8217;erreur soit corrigée avant l&#8217;ouverture du marché, et ce phénomène n&#8217;est pas contrôlable.<br />
Enfin on constate que passé les quelques heures d&#8217;activité, la plateforme est ensuite peu sollicité en cours de journée.<br />
Or le souci, c&#8217;est qu&#8217;aujourd&#8217;hui mon architecture n&#8217;est pas écologique : 16 serveurs de calcul de risk tournent en permanence, 4 serveurs d&#8217;applications sont sollicités pendant la journée mais l&#8217;utilisation des ressources est assez inégale durant la journée.<br />
Il faut donc retenir que dans la finance, l&#8217;utilisation des ressources et la quantité des échanges avec les autres systèmes varient au cours de la journée. Cependant nous savons à l&#8217;avance nos besoins, et donc idéalement notre système devrait pouvoir s&#8217;adapter et se programmer comme le réseau de transport parisien.<br />
Un site internet qui vend des ordinateurs pourrait être surpris de l&#8217;affluence de visiteur. Pas une application financière : il est possible de connaître à l&#8217;avance les besoins en énergie. Mais pourtant, il est difficile aujourd&#8217;hui de régler et d&#8217;adapter cette énergie.</p>
<p><strong>15. Crisis</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.011-003.png"/><br />
2008 marque le début d&#8217;une crise financière, qui aura un impact dès demain sur les budgets des projets dans le monde de la banque et de la finance. Nos besoins de connexions avec les autres applications financières demeurent. Je pense même qu&#8217;il y aura de nouvelles réglementations pour éviter certains dérapages de 2008. Vu la nervosité des marchés financiers, les calculs de VaR, de risque, d&#8217;appel de marge, de collatéral sur notre application de Prime Brokerage vont aussi certainement être plus intensif&#8230; Bref il va y avoir du sport en 2009.</p>
<p><strong>16. Predictions for 2009</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.012-001.png"/><br />
ll est donc facile d&#8217;imaginer ce qui nous attend : avec moins de budget, moins de liberté et plus de pressions, il va falloir trouver des solutions rapides, économiques et capables de faire réaliser des économies. Pour ma part, un calcul de risque c&#8217;est un appel de marge pour un client. Si la plate-forme sur laquelle je travaille peut traiter 50 000 calculs au lieu de 10 000 car mon architecture évolue, alors je ferai gagner de l&#8217;argent à mon client.<br />
D&#8217;autre part, vu la morosité et la crise du secteur de la finance, je pense que les solutions pragmatiques seront les gagnantes de 2009. J&#8217;ai peur que de gros projets basés sur les ESB des constructeurs souffrent du même phénomène que les constructeurs automobiles. Les gens veulent une voiture ? ils achètent une Logan et pas le dernier 4&#215;4 à la mode.<br />
Votre application a besoin d&#8217;un ESB ? Peut-être que Spring Integration, Mule ou Apache ServiceMix seront suffisants pour vos besoins, que les gros projets sur 6 mois auront plus de mal en 2009 à être validé par les DSI. Il est temps d&#8217;être pragmatique et d&#8217;arrêter de rêver sur des besoins que les grands éditeurs d&#8217;ESB nous ont peut-être inventé, comme les éditeurs de serveur d&#8217;app en 2000&#8230; Etre pragmatique, économe, écologique, réaliste.</p>
<p><strong>17. Toolbox</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.013-001.png"/><br />
En 2009 je pense que vous lirez des articles, que vous testerez, que vous entendrez parler de ces produits : Mule, Apache Service Mix, Apache Camel, Spring Integration, OpenESB project Fuji, Apache Synapse, Apache CXF, Jboss ESB&#8230; car ce sont des solutions qui répondent à un besoin : l&#8217;intégration légère en entreprise.<br />
Après la guerre des serveurs d&#8217;application il y a quelques années, je pense que la prochaine grande bataille sera sur ce front. Les éditeurs du monde open-source savent que la demande va exploser, car lorsque la crise est là comme en 2001, le monde open-source tire son épingle du jeu. En 2002 personne ne se souvient mais c&#8217;était la grande époque des articles sur Linux dans 01 informatique, le Monde informatique ect. L&#8217;administration français a alors fait un grand pas en sélectionnant des solutions comme JBoss Application Server pour traiter&#8230; nos déclarations de revenus.<br />
Economies, pragmatismes, simplifications, réductions des coûts&#8230;</p>
<p><strong>18. A New Approach</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.014-001.png"/><br />
Alors si nous  repensons à notre application de gestion du début, voici comment je la vois en 2009. Tout d&#8217;abord le Web tiers a été déporté de mon architecture. Je ne fais pas une application Web, je fais d&#8217;abord l&#8217;architecture d&#8217;une application de gestion. Le web ne me coûte pas cher, j&#8217;utilise des frameworks légers sur une recopie en lecture seule de ma base de données. Seule une petite partie du code métier est partagée avec mon espace de données principal.<br />
Ensuite on voit que j&#8217;ai cassé ce gros rectangle : je pense que des services sans états et légers sont suffisants pour effectuer les traitements de mon application. Là où auparavant j&#8217;utilisais la base de données pour stocker des données de travail, j&#8217;utilise désormais un espace mémoire en cluster afin de répliquer les données nécessaires à mes traitements de calculs. Cela demande plus de mémoire physique mais quintuple les performances de traitements. La base de données relationnelle n&#8217;intervient que via un service d&#8217;historisation qui effectue des captures de données afin de sauvegarder les données les plus sensibles, essentiellement pour un problème légal. Notez que la base est un petit carré bleu, car finalement elle ne me sert plus à grand chose.<br />
Ces services reprennent la boîte à outil dont nous avons parlé tout à l&#8217;heure. Plutôt que de chercher à faire une grosse boite qui fait tout (un ESB au sens de certains) je crée un ensemble de services qui discutent et s&#8217;échangent des données. Et plutôt que de tenter de résoudre les problèmes de communication avec les applications extérieurs, de tenter de mettre en place un gros chantier afin de mettre tout le monde sur la même plateforme, je conserve et respecte les systèmes extérieurs, je m&#8217;adapte à eux, eux ne s&#8217;adaptent pas à moi. Et là je sais que mon application pour 2009 pourra continuer à exister sans couter une fortune.<br />
Il faut donc oublier ce rêve qui serait de migrer toutes les applications de mon réseau vers un seul et même système. Ce serait un risque si l&#8217;éditeur disparaît (ce qui n&#8217;est pas exclu en ce moment). Ce serait la plus belle décision pour dégrader massivement les performances : pourquoi un système extérieure serait plus rapide que ce que mes équipes ont développé ? Ce serait un risque technique, un risque en terme de sécurité, et finalement, il faudrait attendre 6 mois avant de voir ce type de projet de gouvernance sur les rails.</p>
<p>Pour revenir à l&#8217;image du métro parisien, je rêve aussi de louer de la puissance machine plutôt que de l&#8217;acheter en utilisant par exemple Amazon EC2 et une solution comme Elastic Grid pour piloter mon parc informatique. Pour cette raison mon nouveau système est découpé en services sans état afin de faciliter une migration partielle et rapide de certains services vers ces nouvelles plate-formes de calculs et d&#8217;hébergement. La première banque qui aura déployé une plateforme de calcul de risque hostée comme un service sur internet gagnera certainement beaucoup d&#8217;argent.<br />
Economies, pragmatismes, simples, réduire les coûts, arrêter de croire au père noël, pensez sur 6 mois&#8230;</p>
<p><strong>Code code code</strong><br />
Ensuite j&#8217;ai un slide technique pour montrer un exemple d&#8217;utilisation d&#8217;Apache Camel. Lors de la conférence je n&#8217;ai pas eu assez de temps pour les présenter. Je vous ferrai un article complet sur Camel prochainement, donc revenez en janvier pour voir la suite.<br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.015-001.png"/></p>
<p><strong>Keep it simple</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.016-001.png"/><br />
Pour connecter plusieurs systèmes il est tentant de faire n&#8217;importe quoi, de faire au plus vite ou de chercher une solution chère et trop complexe pour un problème. Soyez simple et vous réussirez à développer une architecture qui fonctionne.</p>
<p><strong>Ne pas faire de l&#8217;intégration pour en faire&#8230;</strong><br />
Comme ces messieurs dans la piscine : ne cherchez pas à faire de l&#8217;ESB pour en faire, et faites attention à votre environnement. Un ESB ne remplace pas une réunion de pilotage avec l&#8217;autre équipe en face qui fait &laquo;&nbsp;l&#8217;autre&nbsp;&raquo; produit.<br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.017-001.png"/></p>
<p><strong>Don&#8217;t buy a solution</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.018-001.png"/><br />
N&#8217;achetez pas les yeux fermés une solution. Au contraire, il faut que vos équipes retroussent leurs manches, repensez à des solutions simples. Dans le monde des applications de gestion, et de la Finance, le temps est certes à l&#8217;économie, mais aussi à un pragmatisme souvent contraire à nos envies d&#8217;architectes et de consultants.</p>
<p><strong>The End</strong><br />
<img src="http://www.touilleur-express.fr/devoxx/02Devoxx2008_quickie_D8_Q_11_04_01_NMartignole.020-001.png"/><br />
En conclusion : nous avons discuté des besoins en architecture dans le monde de la finance : connecter, échanger et collaborer, inter-agir avec d&#8217;autres systèmes. Les solutions d&#8217;intégrations légères seront en 2009 un moyen de réduire les coûts en évitant d&#8217;écrire à la main du code technique sans valeur ajoutée. Je souhaite dépiler un message JMS et envoyer un email, Mule m&#8217;aide à le faire en quelques heures au lieu de perdre mon temps avec du code sans valeur. Face aux réductions de budgets, il est logique de penser que les solutions d&#8217;intégration dans la finance auront le vent en poupe en 2009. Et face à cette crise, il y aura encore plus de travail pour nous, avec encore moins de budgets, d&#8217;où la nécessité de s&#8217;outiller enfin correctement.</p>
<p>Fin de la présentation<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2008/12/27/devoxx-esb-in-financial-application/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Devoxx: quel serveur d&#039;application utilisez-vous ?</title>
		<link>http://www.touilleur-express.fr/2008/12/18/devoxx-quel-serveur-dapplication-utilisez-vous/</link>
		<comments>http://www.touilleur-express.fr/2008/12/18/devoxx-quel-serveur-dapplication-utilisez-vous/#comments</comments>
		<pubDate>Thu, 18 Dec 2008 12:01:03 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[weblogic]]></category>
		<category><![CDATA[websphere]]></category>

		<guid isPermaLink="false">http://www.touilleur-express.fr/?p=621</guid>
		<description><![CDATA[Petit sondage sur l&#8217;un des tableaux blancs installés au premier étage. Avec l&#8217;appareil photo de l&#8217;iphone mes photos étaient toutes plutôt ratées. J&#8217;ai trouvé sur flickr une image d&#8217;un des tableaux qui m&#8217;a valu une bonne discussion là-bas lorsque j&#8217;étais devant avec d&#8217;autres développeurs.
Voici le nombre de résultat par serveur d&#8217;application:

- JBoss Application Server : 136 voix
- Oracle WLS + BEA Weblogic : 75 voix
- GlassFish : 78 voix
- IBM WebSphere : 46 voix (j&#8217;adore &#171;&#160;web fear&#160;&#187;)
- Plain Tomcat, Jetty, Resin : 148 voix
- Geronimo : 5 voix
- Spring App ...]]></description>
			<content:encoded><![CDATA[<div id="attachment_622" class="wp-caption alignnone" style="width: 650px"><img class="size-full wp-image-622" title="devoxx_whiteboard_touilleur_express" src="http://www.touilleur-express.fr/wp-content/devoxx_whiteboard_touilleur_express.jpg" alt="Which application server you use?" width="640" height="432" /><p class="wp-caption-text">Which application server you use?</p></div>
<p>Petit sondage sur l&#8217;un des tableaux blancs installés au premier étage. Avec l&#8217;appareil photo de l&#8217;iphone mes photos étaient toutes plutôt ratées. J&#8217;ai trouvé sur flickr une image d&#8217;un des tableaux qui m&#8217;a valu une bonne discussion là-bas lorsque j&#8217;étais devant avec d&#8217;autres développeurs.</p>
<p>Voici le nombre de résultat par serveur d&#8217;application:</p>
<ul>
<li>- JBoss Application Server : 136 voix</li>
<li>- Oracle WLS + BEA Weblogic : 75 voix</li>
<li>- GlassFish : 78 voix</li>
<li>- IBM WebSphere : 46 voix (j&#8217;adore &laquo;&nbsp;web fear&nbsp;&raquo;)</li>
<li>- Plain Tomcat, Jetty, Resin : 148 voix</li>
<li>- Geronimo : 5 voix</li>
<li>- Spring App Server : 7 voix</li>
<li>- SAP Application Server : 2 voix</li>
<li>- JONAS : 3 voix</li>
</ul>
<p>Bref avec Spring dm Server qui arrive sur ce marché, je pense que nous allons voir l&#8217;an prochain des batailles de discussions sur &laquo;&nbsp;<em>mon mien il est meilleur que ton tiens</em>&nbsp;&raquo; comme il y a quelques années&#8230;</p>
<p>Cela promet des heures de discussions sur les blogs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2008/12/18/devoxx-quel-serveur-dapplication-utilisez-vous/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Petit compte rendu de la soirée JBoss au Paris JUG</title>
		<link>http://www.touilleur-express.fr/2008/12/03/petit-compte-rendu-de-la-soiree-jboss-au-paris-jug/</link>
		<comments>http://www.touilleur-express.fr/2008/12/03/petit-compte-rendu-de-la-soiree-jboss-au-paris-jug/#comments</comments>
		<pubDate>Wed, 03 Dec 2008 09:47:14 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[paris jug]]></category>

		<guid isPermaLink="false">http://www.touilleur-express.fr/?p=551</guid>
		<description><![CDATA[Ce soir le dieu de l&#8217;informatique, le pigeon magique du JUG, le Duke ultime golden-platinum qui refait venir l&#8217;être aimé étaient tous aux abonnés absents.
Panne de vidéo projecteur, panne de micro (c&#8217;est une contrepèterie) et donc bilan mitigé.
En première partie, Sacha Labourey le CTO de JBoss, une division de RedHat effectue une présentation sur JBoss AS 5.0. En deuxième partie, présentation de JBoss Seam par Malik Saheb. Le tout devant 200 personnes, la salle étant comble comme la fois précédente.
Sacha Labourey présente d&#8217;abord un petit historique de JBoss Application Server. ...]]></description>
			<content:encoded><![CDATA[<p>Ce soir le dieu de l&#8217;informatique, le pigeon magique du JUG, le Duke ultime golden-platinum qui refait venir l&#8217;être aimé étaient tous aux abonnés absents.<br />
Panne de vidéo projecteur, panne de micro (c&#8217;est une contrepèterie) et donc bilan mitigé.</p>
<p>En première partie, <a href="http://sacha.labourey.com/">Sacha Labourey</a> le CTO de JBoss, une division de RedHat effectue une présentation sur JBoss AS 5.0. En deuxième partie, présentation de JBoss Seam par Malik Saheb. Le tout devant 200 personnes, la salle étant comble comme la fois précédente.</p>
<p>Sacha Labourey présente d&#8217;abord un petit historique de JBoss Application Server. A ses débuts en 2000 la volonté des développeurs est de proposer un serveur d&#8217;app plus léger, avec la possibilité de recharger à chaud une application sans relancer le serveur. Pour cela l&#8217;architecture du micro-kernel basée sur JMX permet de gérer le chargement des ressources d&#8217;une application. J&#8217;en ai parlé en 2006 lors de ma formation à JBoss à Berlin. <a href="http://www.touilleur-express.fr/2005/02/16/formation-jboss-for-advanced-j2ee-developers-a-berlin/">4 articles du touilleur</a> vous donneront un petit aperçu du moteur de JBoss si vous souhaitez vous faire votre propre idée.</p>
<p>Sacha enchaîne ensuite avec une justification sur la prochaine version de JBoss, JBoss AS5. En ligne de mire, la certification EE5, une infrastructure plus souple et plus puissante pour le clustering, une offre de messaging qui ne sera plus basée sur JBoss MQ mais sur JBoss Messaging, une réécriture de la couche Web Services avec les dernières innovations de JEE 5.</p>
<p>L&#8217;un des objectifs de JBoss Application Server 5 est de s&#8217;affranchir du kernel basé sur JMX. Là où il y a quelques années, JMX était la solution pour connecter différents modules, aujourd&#8217;hui entre OSGI et l&#8217;injection de dépendances, Sacha explique que le nouveau moteur est basé sur des POJOs, accompagnés d&#8217;annotations. C&#8217;est donc un énorme travail de réécriture et de migration de code qui a entrainé le retard de la sortie de JBoss AS 5.</p>
<p><strong>Quand sort JBoss AS 5 GA ?</strong><br />
Si l&#8217;on regarde JBoss 5, cela fait 3 ans que ce chantier a été lancé. La sortie est prévue dans les semaines qui viennent, vraisemblablement avant Noël. Le temps passé à écrire cette nouvelle version permet d&#8217;offrir une version plus mature de JBoss. Il faut se souvenir qu&#8217;il y a presque 3 ans, JBoss AS était l&#8217;un des premiers serveurs à offrir le support des EJB3 en l&#8217;état. La RC2 de JBoss AS 5 a été certifiée EE5 début septembre.</p>
<p>Parmi les nombreuses nouveautés que Sacha nous présente dans ces slides, j&#8217;ai noté une nouvelle API de configuration, un nouveau moteur d&#8217;injection, une gestion des aspects, et beaucoup d&#8217;autres fonctionnalités.</p>
<p><strong>OSGI ?</strong><br />
Sacha explique qu&#8217;OSGI ne donne pas tout. Il n&#8217;y a pas de gestion de classe unique, ni de gestion des méta-données. Enfin même si OSGI permet le rechargement partiel d&#8217;une application, il n&#8217;y a pas la notion de graphe d&#8217;état :INITIALIZING, RUNNING, STAND-BY&#8230;</p>
<p>A la question &laquo;&nbsp;mais où est le marché pour ces besoins ?&nbsp;&raquo; la réponse est assez floue. Là où Spring dm Server nous promet de répondre à des soucis que nous n&#8217;avons pas encore, je pense que JBoss passe encore une étape supplémentaire vers le &laquo;&nbsp;on n&#8217;en n&#8217;a pas besoin mais c&#8217;est intéressant&nbsp;&raquo;&#8230;</p>
<p>J&#8217;ai ensuite bien aimé une partie de la présentation de Sacha, qui est un orateur très intéressant et qui a vraiment séduit le public du JUG. Il explique par des chiffres le fait suivant : les éditeurs de serveur d&#8217;application J2EE se réduisent de version en version.<br />
 &#8211; sur Java J2EE 1.2 : 18 serveurs d&#8217;application différents<br />
 &#8211; sur la version 1.3 : 22 serveurs d&#8217;app<br />
 &#8211; sur la version 1.4 : 17 serveurs d&#8217;app<br />
 &#8211; sur la version EE5: 10 serveurs d&#8217;app<br />
 &#8211; sur la future EE6 :  7 (IBM, Oracle, SUN, SAP, NEC, Kundlee et ITMakeSoft)</p>
<p>Vous notez comme moi l&#8217;absence de Spring. Va savoir pourquoi.</p>
<p>Comme Sacha l&#8217;explique, le marché des serveurs d&#8217;application est maintenant mature, d&#8217;où cette consolidation. La guerre est terminée. Quoique&#8230;</p>
<p>Il présente ensuite la démarche de RedHat. JBoss AS est, et restera open-source. La politique de licence n&#8217;a pas changée. Open-source et open-standard. La version Enterprise offre une version industrielle indispensable pour mettre en production une application. Il est utopique de penser qu&#8217;aujourd&#8217;hui un client final met en production une version sans prendre du support. Ceci non pas pour des raisons techniques, mais avant tout pour des raisons&#8230; légales. Thomson-Reuters où j&#8217;ai travaillé 5 ans 1/2 a signé un partenariat avec RedHat afin que les versions des produits basés sur JBoss comme KGR s&#8217;appuient sur le support de RedHat en cas de problèmes avec JBoss AS&#8230; afin d&#8217;assurer les clients finaux de la pérennité du socle technique.<br />
La version enterprise est supportée pendant 3,5 ou 7 ans. Les versions sont testées de manière intensive, et le support basé à Neuchatel permet à RedHat d&#8217;offrir une qualité de service indispensable aux équipes de production. J&#8217;ai eu le plaisir de discuter avec Luc Texier <a href="http://www.touilleur-express.fr/2006/06/09/atelier-jboss-on-the-road-et-jboss-seam-100-cr3/">que j&#8217;ai déjà rencontré</a> en juin 2006, à propos du support et du travail de RedHat.</p>
<p>La version Enterprise Application Platform (EAP) est strictement identique à la version open-source de JBoss, JBoss Application Server.</p>
<p>EAP offre en plus d&#8217;autres outils pour les équipes de production comme JBoss ON, outil de supervision et de monitoring. Pour les esprits grincheux, il existe aussi <a href="http://www.press.redhat.com/2008/10/22/project-jopr-jboss-operations-network-now-open-source/">JOPR</a>, outil libre et open-source qui est l&#8217;ancien JBoss ON, fruit d&#8217;un travail commun avec Hyperic.</p>
<p>Sacha Labourey présente ensuite avec différents slides l&#8217;architecture de JBoss AS 5. C&#8217;est assez technique et trop long à raconter ici. Je retiens simplement l&#8217;ajout d&#8217;un Virtual FileSystem qui permet de créer virtuellement un EAR lors des tests par exemple.</p>
<p>Les questions de l&#8217;assemblée tournent autour d&#8217;OSGI, des synergies entre les équipes de RedHat et les équipes de JBoss. Quelqu&#8217;un demande pourquoi ne pas standardiser le micro-kernel de JBoss ? Sacha répond que si la demande de la communauté est là, ils y travailleront. Il rappelle qu&#8217;Hibernate est sorti avant JPA, que Seam est disponible depuis 2006 et une partie de Seam est maintenant une JSR, la JSR WebBeans. Donc la démarche est plutôt : utilisons la technologie puis ensuite regardons comment en faire un standard.<br />
Contrairement à Spring, il dit clairement que pour lui les standards ont quelque chose de bien, ils évitent le syndrome &laquo;&nbsp;vendor-lock&nbsp;&raquo;. Je vous laisse apprécier son point de vue, que je partage en partie.</p>
<p>A une question sur &laquo;&nbsp;mais pourquoi autant de retard sur AS5 ?&nbsp;&raquo; il explique que la réorganisation du code source avec des équipes réparties dans le monde ne facilite pas ce travail. Imaginez que le noyau Linux décide de changer de la version 2.6.0.1.2.3.4.3402.beta1 à une version 3.0&#8230;.</p>
<p>Enfin Sacha donne 2 informations intéressantes :<br />
 &#8211; regardez le blog de Bob McWhister&#8217;s <a href="http://oddthesis.org/">http://oddthesis.org/</a> qui vous donne des nouvelles sur les discussions et les recherches de Bob<br />
 &#8211; mod_cluster est un connecteur http dont Sacha parle <a href="http://sacha.labourey.com/2008/11/10/tech-news-mod_cluster-and-embedded-as/">sur son blog</a>. Je reprends ici la présentation de mod_cluster</p>
<blockquote><p>
    mod_cluster is an httpd-based load balancer. Like mod_jk and mod_proxy, mod_cluster uses a communication channel to forward requests from httpd to one of a set of application server nodes. Unlike mod_jk and mod_proxy, mod_cluster leverages an additional connection between the application server nodes and httpd. The application server nodes use this connection to transmit server-side load balance factors and lifecycle events back to httpd via a custom set of HTTP methods, affectionately called the Mod-Cluster Management Protocol (MCMP). This additional feedback channel allows mod_cluster to offer a level of intelligence and granularity not found in other load balancing solutions.</p>
<p>    Within httpd, mod_cluster is implemented as a set of modules for httpd with mod_proxy enabled. Much of the logic comes from mod_proxy, e.g. mod_proxy_ajp provides all the AJP logic needed by mod_cluster.
</p></blockquote>
<p>En conclusion, présentation sympa de la part de Sacha dans des conditions inhabituelles : problème de vidéo projecteur, d&#8217;ordinateur, d&#8217;écrans au fond ne fonctionnant pas&#8230; Chapeau pour avoir animé la présentation et réussi à faire passer le message : venez voir JBoss Application Server 5.0</p>
<h2>JBoss Seam</h2>
<p>Tout d&#8217;abord parlons du fond : présentation organisée par Malik SAHEB du framework léger d&#8217;assemblage, Seam. Malik est un senior solution architect qui vient du &laquo;&nbsp;back&nbsp;&raquo;. Il nous explique qu&#8217;il va présenter JBoss Seam d&#8217;un point de vue technique, en parlant de son expérience. Comme il le dit lui-même il vient du côté obscur, il a travaillé sur le moteur transactionnel de JBoss et sur les EJBs. Le monde du Web était donc pour lui un challenge.</p>
<p>Le constat est le suivant : JSF simplifie l&#8217;écriture d&#8217;application Web. Cependant il reste encore beaucoup de XML et de code technique pour accéder aux objets métiers et aux EJB3. Seam se propose dans un premier temps de simplifier le travail du développeur en apportant un moteur d&#8217;injection basé sur les annotations Java 5. Il évite d&#8217;ajouter des composants intermédiaires entre la vue et le modèle.</p>
<p>Ensuite Seam est un framework d&#8217;assemblage, qui offre et simplifie au développeur un socle technique assez impressionnant :<br />
 &#8211; AJAX, JSF, api RichFaces et IceFaces<br />
 &#8211; EJB3<br />
 &#8211; JPA<br />
 &#8211; BPM</p>
<p>Je vous donne l&#8217;adresse de la RefCard que Malik nous a présenté : <a href="http://solutionsfit.com/blog/2008/11/24/core-seam-21-refcard-released/">Core Seam 2.1</a>. La lecture de cette carte vous donnera une présentation complète et solide sur le coeur technique de Seam.</p>
<p>D&#8217;un point de vue fonctionnalité, Seam offre différents outils simples comme la génération de PDF, l&#8217;envoi d&#8217;email, l&#8217;internationalisation, la gestion du bouton back, de l&#8217;history, de REST, l&#8217;intégration de Wicket, de Spring, bref vous l&#8217;aurez compris : c&#8217;est un bus où tout le monde se trouve embarqué afin de faciliter l&#8217;écriture d&#8217;application.</p>
<p>Seam c&#8217;est ensuite des concepts novateurs comme l&#8217;introduction de deux scopes dans le domaine des applications Webs : le scope &laquo;&nbsp;Conversation&nbsp;&raquo; et le scope &laquo;&nbsp;Business&nbsp;&raquo;. J&#8217;en ai déjà parlé sur le touilleur, je vous redonne <a href="http://www.touilleur-express.fr/2006/12/12/jboss-seam-linteret-de-la-conversation">le lien</a> afin de vous laisser lire cette partie tranquillement.</p>
<p>Seam c&#8217;est aussi un ensemble d&#8217;outils basés sur maven2 destiné à faciliter l&#8217;écriture et le démarrage d&#8217;une application. Tout comme Grails, Seam offre depuis 2 ans des outils pratiques pour créer une Entity avec ses pages CRUD, le tout en utilisant JSF+Ajax+une api comme RichFaces ou IceFaces. A noter que le support de GWT s&#8217;effectue aussi sans soucis, car Seam s&#8217;occupe de la partie serveur, là où GWT travaille sur votre poste.</p>
<p>Il y a aussi quelques fonctionnalités très bien intégrées comme la Validation (JSR-303) ou Hibernate Search, ce qui évite toujours de réinventer la roue.<br />
Enfin Seam a aussi son moteur d&#8217;injection de dépendance et d&#8217;outjection&#8230; Un concept qui vous permet de replacer dans la session, dans la conversation ou dans le scope business un objet Seam. Si vous voulez, c&#8217;est un moyen très pratique pour gérer la persistance fine, au delà de la session HTTP qui reste assez pauvre. Dommage c&#8217;était très mal expliqué&#8230;</p>
<p>&#8230; et là mon cahier de note s&#8217;arrête  &#8230;</p>
<p>Je suis sorti à la fin. Honnêtement, je vais me lâcher : présentation complètement ratée. Désolé Malik si tu lis cela, mais il y a plusieurs griefs que je vais justifier. Les gens qui lisent le touilleur savent très bien que je suis un fan de Seam, donc on est d&#8217;accord que je ne parle que de la forme et pas du fond de la présentation.</p>
<p>Sur la forme : pas de chance avec ce @#$ de vidéoprojecteur, il était impossible de lire correctement les exemples de code. Et là je parle de ma pomme, assis à côté de David qui filmait pour le JUG la session. Vraiment il faut peut-être revoir le template du Paris JUG et basculer sur un template avec un fond noir et du texte blanc, comme Devoxx. A tester au prochain JUG.</p>
<p>Ensuite Seam est un framework qui ne se démontre pas en listant ses fonctions, ce qu&#8217;il propose et s&#8217;il fait la pluie ou le beau temps. En tant que développeur j&#8217;aurai vraiment aimé avoir une présentation partant d&#8217;un cas concret, afin que pendant l&#8217;heure je puisse me faire ma propre idée de ce que je pourrai faire ensuite avec Seam. C&#8217;est un format plus adapté je pense pour faire passer le message.</p>
<p>Enfin carton rouge pour pas mal de points : je n&#8217;ai pas entendu le nom de la personne qui a initié le framework Seam. Dommage car je pense que l&#8217;assemblée aurait aimé entendre que Gavin King, monsieur Hibernate, est l&#8217;auteur de Seam. Mince c&#8217;est pas un truc que l&#8217;on oublie de dire.</p>
<p>J&#8217;aurai aimé aussi avoir une présentation de quelques minutes sur la différence entre Seam et la JSR-296, Web Beans, toujours initiée par le même Gavin King. Cela aurait mis en avant les éléments couverts par Seam, qui travaille sur un scope plus large que la spec JSR-296.</p>
<p>Bref très déçu, j&#8217;ai peur que l&#8217;assemblée présente n&#8217;ait plus/pas envie d&#8217;aller tester Seam.</p>
<p>Alors je pense qu&#8217;il faudra en remettre une couche, c&#8217;est pour cela que je suis motivé pour vous refaire une présentation sur le blog, à la mode de ce que j&#8217;ai envie de vous raconter.</p>
<p>Donc stay tuned.</p>
<p><strong>Conclusion</strong><br />
Soirée au final sympa. Au Paris JUG nous croisons toujours pas mal de monde, c&#8217;est l&#8217;occasion de faire des rencontres et de voir ou revoir de nouvelles têtes. J&#8217;ai bien discuté avec Thomas Parle de Prima Solutions, nous avons aussi parlé beaucoup avec David Dewalle.</p>
<p>Enfin il est important que les sponsors continuent à apporter au Paris JUG toute l&#8217;énergie financière nécessaire afin que le JUG continue dans de bonnes conditions. David ne pensait pas qu&#8217;en 3 mois le JUG passerait de 30 à 200 personnes chaque mois&#8230;</p>
<p>Voilà pour mon compte-rendu, pas eu envie de vider mon sac hier soir tard et de me lancer sur l&#8217;écriture d&#8217;un long billet. Donc là vous avez la version courte&#8230; à peine 2240 mots. Une paille..</p>
<p>A la semaine prochaine à Devoxx !!!</p>
<p>Des articles plus ancien sur JBoss Seam du Touilleur :<br />
 &#8211; <a href="http://www.touilleur-express.fr/2007/08/23/convertissez-vous-a-jboss-seam-mes-freres/">Convertissez vous à JBoss Seam mes frères</a><br />
 &#8211; <a href="http://www.touilleur-express.fr/2007/08/01/jboss-seam-20-beta-1-premiers-tours-de-clefs/">JBoss Seam 2.0 premiers tests</a><br />
  &#8211; <a href="http://www.touilleur-express.fr/2006/12/12/jboss-seam-linteret-de-la-conversation/">JBoss Seam : l&#8217;intérêt du scope CONVERSATION</a><br />
 &#8211; <a href="http://www.touilleur-express.fr/2006/06/10/installation-de-jboss-seam/">Installer JBoss Seam</a> (article sans doute dépassé)<br />
 &#8211; <a href="http://www.touilleur-express.fr/2006/02/07/deuxieme-reunion-du-pjbug-a-paris/">Présentation de Luc Texier</a> de JBoss au PJBUG</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2008/12/03/petit-compte-rendu-de-la-soiree-jboss-au-paris-jug/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>SpringSource et Rod Johnson</title>
		<link>http://www.touilleur-express.fr/2008/04/22/springsource-et-rod-johnson/</link>
		<comments>http://www.touilleur-express.fr/2008/04/22/springsource-et-rod-johnson/#comments</comments>
		<pubDate>Tue, 22 Apr 2008 11:54:04 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[spring]]></category>

		<guid isPermaLink="false">http://www.touilleur-express.fr/?p=172</guid>
		<description><![CDATA[Billet intéressant à lire pour les architectes JEE : Rod Johnson le créateur du framework Spring expose dans ce  billet sur son blog sa vision à plus long terme sur la faune Java et le monde de l&#8217;entreprise. Rod est à fond pour le support des modules dans JEE 6, même s&#8217;il est encore tôt pour savoir le contenu de ces profils. J&#8217;étais étonné de voir qu&#8217;en décembre Rod blogait ceci à propos de JBoss et de Tomcat:
&#171;&#160;
Also from our observations in customer accounts, I would expect that a ...]]></description>
			<content:encoded><![CDATA[<p>Billet intéressant à lire pour les architectes JEE : Rod Johnson le créateur du framework Spring expose dans <a href="http://blog.springsource.com/main/2008/04/09/the-biggest-losers-next-contestant-java-bloatware/">ce  billet sur son blog</a> sa vision à plus long terme sur la faune Java et le monde de l&#8217;entreprise. Rod est à fond pour <a href="http://blog.springsource.com/main/2007/07/03/java-ee-6-gets-it-right/">le support des modules dans JEE 6</a>, même s&#8217;il est encore tôt pour savoir le contenu de ces profils. J&#8217;étais étonné de voir qu&#8217;en décembre Rod blogait ceci à propos de JBoss et de Tomcat:<br />
<em>&laquo;&nbsp;<br />
Also from our observations in customer accounts, I would expect that a large part of the JBoss numbers are actually Tomcat. Many users who think they&#8217;re using JBoss are actually using a less efficient form of Tomcat. One example–the French Tax Office&#8217;s online taxation service–is a public reference for both JBoss and Spring.&nbsp;&raquo;</em> (<a href="http://blog.springsource.com/main/2007/12/24/is-it-a-tomcat-or-the-elephant-in-the-room/">article complet ici</a>)</p>
<p>J&#8217;ai un peu de mal avec l&#8217;affirmation ci-dessus. Tout d&#8217;abord Jboss est un sponsor de Tomcat depuis 3 ans, <a href="http://www.touilleur-express.fr/2005/02/18/jour-4-formation-jboss-for-advanced-j2ee-developers-in-berlin">Mladen Turk</a> a écrit le module APR qui permet de faire fonctionner Apache avec un serveur Tomcat, et il fait partie de l&#8217;équipe JBoss. Enfin la version JBoss Web est une version avec support JBoss qui est composée d&#8217;Apache et de Tomcat, justement utilisé par nous, gentil contribuable, lorsque nous effectuons notre déclaration d&#8217;impôts. Il serait intéressant d&#8217;avoir le retour d&#8217;une personne du ministère des finances ou de JBoss pour nous éclairer là-dessus.</p>
<p>Aujourd&#8217;hui il serait dommage de passer à côté de Spring, de la puissance de l&#8217;inversion de contrôle et de la souplesse de ce framework. Avant tout, pour moi, c&#8217;est un framework d&#8217;assemblage. Il ne m&#8217;offre pas de solution de mapping object-relationnel. En même temps, j&#8217;ai le choix d&#8217;utiliser librement Hibernate, TopLink ou autre. La première chose qui me séduit c&#8217;est que je n&#8217;enferme pas ma solution dans une architecture compliquée, sans possibilité d&#8217;évolutions. Je détache mon produit des griffes des éditeurs comme BEA ou IBM. En effet aujourd&#8217;hui, nous payons une fortune des accords OEM, qui, je le dis sans problèmes, ne me servent à rien. Même le support ne sert à rien&#8230; Il est payé par le client final qui achète la solution. Mais quelque part, j&#8217;ai un peu de mal à me dire que j&#8217;engraisse un éditeur avec une rente viagère, le temps que l&#8217;architecture J2EE basée sur les EJB 2.1 s&#8217;arrête d&#8217;exister&#8230; On en est là aujourd&#8217;hui. </p>
<p>SpringSource, l&#8217;entreprise, est devenu une entreprise qui doit maintenant monétiser Spring. Cela passe par des formations, des certifications, du support d&#8217;architecture. SpringSource va sur le même chemin que JBoss Inc., l&#8217;entreprise. Le support de JBoss est indispensable à nous, éditeurs de logiciels. En effet  sans l&#8217;existence de la societé JBoss et d&#8217;un accord entre ma societé et JBoss, nous ne pourrions pas vendre nos produits à nos clients.<br />
Tout simplement. </p>
<p>Donc en terme de &laquo;&nbsp;faut-il un SpringSource&#8230;&nbsp;&raquo; si demain nous avons des produits architecturés sur Spring, il sera obligatoire pour nous, en tant qu&#8217;éditeur, d&#8217;aller taper à la porte de SpringSource afin de mettre en place un accord.</p>
<p>La difficulté que je vois, c&#8217;est que JBoss offre plusieurs produits, SpringSource offre un framework d&#8217;intégration pour grouper plusieurs technologies. Il y a cependant des projets 100% Spring qui sont vraiment biens, à mon sens. Mais on ne peut pas imaginer que Spring va réécrire un moteur de persistence, de transactions ou de sécurité. Spring est avant tout un outil d&#8217;assemblage très fléxible. Du coup, lorsque nous envisagons le support, qu&#8217;allons-nous vraiment couvrir ? Lorsqu&#8217;un client signale un bug, comment identifier ce qui est Spring de ce qui est Hibernate ? </p>
<p>En conclusion donc, il est intéressant de suivre ce qu&#8217;il va se passer autour de Java EE 6 et de la position de SpringSource et de JBoss. Il n&#8217;y a pas de compétition entre les 2, mais même s&#8217;il y avait un embryon de compétition, c&#8217;est toujours bon pour le business&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2008/04/22/springsource-et-rod-johnson/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Astuces pour identifier la cause d&#039;une java.io.NotSerializable et tuning JBoss</title>
		<link>http://www.touilleur-express.fr/2008/01/24/astuces-pour-identifier-la-cause-dune-javaionotserializable-et-tuning-jboss/</link>
		<comments>http://www.touilleur-express.fr/2008/01/24/astuces-pour-identifier-la-cause-dune-javaionotserializable-et-tuning-jboss/#comments</comments>
		<pubDate>Thu, 24 Jan 2008 15:21:24 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[tuning]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/2008/01/24/astuces-pour-identifier-la-cause-dune-javaionotserializable-et-tuning-jboss/</guid>
		<description><![CDATA[L&#8217;exception java.io.NotSerializable se rencontre tard le soir au détour d&#8217;une petite période d&#8217;inactivité avec votre belle application J2EE&#8230; Le serveur essaye de passiver un EJB et boum, voici notre belle exception qui sort du bois. Vous pouvez aussi rencontrer notre amie alors que vous essayez d&#8217;envoyer par le réseau un objet java. Nous allons voir comment dompter la bête et aussi facilement identifier ce qui n&#8217;est pas sérialisable. Je commence par faire un rappel sur la sérialisation, et ensuite je parlerai de JBoss pour vous montrer comment configurer celui-ci pour ...]]></description>
			<content:encoded><![CDATA[<p><strong>L&#8217;exception java.io.NotSerializable se rencontre tard le soir au détour d&#8217;une petite période d&#8217;inactivité avec votre belle application J2EE&#8230; Le serveur essaye de passiver un EJB et boum, voici notre belle exception qui sort du bois. Vous pouvez aussi rencontrer notre amie alors que vous essayez d&#8217;envoyer par le réseau un objet java. Nous allons voir comment dompter la bête et aussi facilement identifier ce qui n&#8217;est pas sérialisable. Je commence par faire un rappel sur la sérialisation, et ensuite je parlerai de JBoss pour vous montrer comment configurer celui-ci pour identifier les problèmes de passivation avec les EJB.</strong></p>
<p>Rappel rapide sur la sérialisation en Java: dans le domaine de la programmation, du stockage de données et de la transmission par le réseau, la sérialisation consiste à sauver un objet Java au format binaire. Il est ensuite possible de transmettre cette objet via le réseau, ou de le sauvegarder sur le disque par exemple. Les données binaires respectent un format spécial  qui permet à Java de recréer un Objet identique avec le même état que l&#8217;original.En anglais, sérialiser un objet se dit &laquo;&nbsp;marshalling&nbsp;&raquo; et le désérialiser se dit &laquo;&nbsp;unmarshalling&nbsp;&raquo;.</p>
<p>Avant tout, certains objets en Java ne sont pas sérialisables: Socket, Thread, OutputStream ou Image par exemple. Cela peut poser un problème à votre application: que se passe-t-il si votre code contient une instance de l&#8217;une de ces classes non sérialisable ? Java vous le signale avec l&#8217;exception java.io.NotSerializable. Il existe cependant des solutions à ces problèmes.</p>
<h3>La sérialisation par défaut</h3>
<p>Pour persister un objet à l&#8217;exécution, nous devons le rendre sérialisable. Java fait appel à un design pattern appelé &laquo;&nbsp;Marker&nbsp;&raquo;. Ce design pattern consiste à créer une Interface java vide sans méthodes afin de marquer une class Java comme étant capable d&#8217;effectuer un certain traitement. J&#8217;aime bien demander en entretien d&#8217;embauche: &laquo;&nbsp;Peut-on avoir une Interface sans méthodes, sans instances ? Si oui, à quoi cela sert-il ?&nbsp;&raquo;</p>
<p>Prenons une class SoccerPlayer qui vient de mes cours sur java:</p>
<pre name="code" class="java">
import java.util.Date;
import java.io.Serializable;

/**
 * Created by IntelliJ IDEA.
 * User: nicolasmartignole
 * Date: 22 janv. 2008
 * Time: 23:07:31
 */
public class SoccerPlayer implements Serializable {
    private String name;
    private Date birthDate;
    private int number;

    public SoccerPlayer(String name, Date birthDate, int number) {
        this.name = name;
        this.birthDate = birthDate;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthDate() {
        return birthDate;
    }

    public void setBirthDate(Date birthDate) {
        this.birthDate = birthDate;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }
}</pre>
<p>En marquant notre classe avec l&#8217;interface java.io.Serializable, celle-ci est prête à être sérialisée. Nous allons écrire un peu de code pour tester en l&#8217;état la sérialisation de cette class.</p>
<pre name="code" class="java">
import java.util.Locale;
import java.text.DateFormat;
import java.io.FileOutputStream;
import java.io.File;
import java.io.ObjectOutputStream;

/**
 * This class marshalls the SoccerPlayer class to a file.
 * User: nicolasmartignole
 * Date: 22 janv. 2008
 * Time: 23:11:07
 *
 * See online Touilleur Express http://www.touilleur-express.fr
 */
public class FileSystemStorageEngine {
     private static DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE);

    /**
     * Creates a new player, performs a serialiation test.
     * @param args is cl args.
     * @throws Exception for any Exception, I don't want to deal with it in my sample.
     */
    public static void main(String[] args) throws Exception{
        SoccerPlayer player = new SoccerPlayer("Nicolas Martignole", df.parse("24/09/1975"), 10);
        FileOutputStream fos=new FileOutputStream(new File("test.ser")) ;
        ObjectOutputStream out=new ObjectOutputStream(fos);
        out.writeObject(player);

    }
}</pre>
<p>La class ObjetOutputStream est la classe qui se charge de sérialiser notre class SoccerPlayer vers le fichier. Si la class SoccerPlayer n&#8217;était pas marquée avec l&#8217;interface Serializable, Java lève une &laquo;&nbsp;java.io.NotSerializable&nbsp;&raquo; exception. La class SoccerPlayer est simple, et ses variables d&#8217;instance (une String et une Date) peuvent être sérialisées par Java sans problèmes.</p>
<h3>Désérialiser</h3>
<p>La désérialisation s&#8217;effectue en utilisant la class ObjectInputStream. Dans l&#8217;exemple ci-dessous, je relis le fichier test.ser et je vais afficher le nom du joueur dans la console.</p>
<p>Nous modifions un peu notre class afin d&#8217;appeler une méthode chargée de désérialiser notre fichier. Dans mon exemple je ne fais aucuns traitements d&#8217;erreur, et donc si le fichier n&#8217;existe pas le programme lévera une FileNotFoundException. Maisi ici le plus important c&#8217;est juste de montrer qu&#8217;il est simple de recharger un Objet Java en mémoire.</p>
<pre name="code" class="java">
    public static void main(String[] args) throws Exception{

        SoccerPlayer loaded=reloadSoccerPlayer();
        System.out.println("Soccer player name: "+loaded.getName());

    }

     private static SoccerPlayer reloadSoccerPlayer() throws IOException, ClassNotFoundException {
        FileInputStream fis=new FileInputStream(new File("test.ser")) ;
        ObjectInputStream in=new ObjectInputStream(fis);
        SoccerPlayer sp=(SoccerPlayer)in.readObject();
        return sp;
    }</pre>
<p>L&#8217;exécution de mon code sur Mac donne</p>
<pre>
/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/bin/java -Dfile.encoding=MacRoman -classpath /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/deploy.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/dt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/javaws.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/plugin.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/sa-jdi.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/charsets.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/classes.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/dt.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/jce.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/jconsole.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/jsse.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/laf.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/../Classes/ui.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/apple_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/dnsns.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/localedata.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/sunjce_provider.jar:/System/Library/Frameworks/JavaVM.framework/Versions/1.5.0/Home/lib/ext/sunpkcs11.jar:/Users/nicolasmartignole/IdeaProjects/Test2/out/production/Test2 FileSystemStorageEngine

Soccer player name: Nicolas Martignole

Process finished with exit code 0</pre>
<h3>Lorsque la class n&#8217;est pas sérialisable</h3>
<p>Nous allons parler de l&#8217;exception java.io.NotSerializable. Mais avant tout, je dois continuer à rappeler quelques mécanismes de Java.</p>
<p>Reprenons notre class SoccerPlayer et modifions-là afin qu&#8217;elle ne soit pas sérialisable. Je vais créer un objet &laquo;&nbsp;PlayerPosition&nbsp;&raquo; qui représente sur le terrain le poste du joueur. Cet objet ne sera pas sérialisable car il est dynamique. Un joueur défenseur peut jouer aillier (enfin je crois) et donc nous imaginons qu&#8217;il n&#8217;est pas possible de sérialiser cette information.<br />
Peu importe le code de la class SoccerPosition, nous avons simplement besoin d&#8217;avoir une instance de celle-ci dans la class SoccerPlayer. La class SoccerPosition n&#8217;implémente pas l&#8217;interface java.io.Serializable.</p>
<p>La class PlayerPosition est très simple:</p>
<pre name="code" class="java">
public class PlayerPosition {
    String positionName;

    public PlayerPosition(String s) {
        positionName =s;
    }

    public String getPositionName() {
        return positionName;
    }

    public void setPositionName(String positionName) {
        this.positionName = positionName;
    }
}</pre>
<p>Nous ajoutons une instance dans SoccerPlayer:</p>
<pre name="code" class="java">
public class SoccerPlayer implements Serializable {
    private String name;
    private Date birthDate;
    private int number;

    private PlayerPosition position;

    public SoccerPlayer(String name, Date birthDate, int number, PlayerPosition p) {
        this.name = name;
        this.birthDate = birthDate;
        this.number = number;
	this.position=p;
    }
</pre>
<p>Je modifie le constructeur de SoccerPlayer afin de passer une instance de PlayerPosition. Voyons maintenant lorsque l&#8217;on relance le programme pour sérialiser ce qui se passe:</p>
<pre name="code" class="java">
public class FileSystemStorageEngine {
     private static DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, Locale.FRANCE);

    /**
     * Creates a new player, performs a serialiation test.
     * @param args is cl args.
     * @throws Exception for any Exception, I don't want to deal with it in my sample.
     */
    public static void main(String[] args) throws Exception{
        SoccerPlayer player = new SoccerPlayer("Nicolas Martignole",
					df.parse("24/09/1975"),
					10,
					new PlayerPosition("Goal")
					);
        performSerialization(player);

        SoccerPlayer loaded=reloadSoccerPlayer();
        System.out.println("Soccer player name: "+loaded.getName());

    }

    private static void performSerialization(SoccerPlayer player) throws ParseException, IOException {
        FileOutputStream fos=new FileOutputStream(new File("test.ser")) ;
        ObjectOutputStream out=new ObjectOutputStream(fos);
        out.writeObject(player);
    }

    private static SoccerPlayer reloadSoccerPlayer() throws IOException, ClassNotFoundException {
        FileInputStream fis=new FileInputStream(new File("test.ser")) ;
        ObjectInputStream in=new ObjectInputStream(fis);
        SoccerPlayer sp=(SoccerPlayer)in.readObject();
        return sp;
    }
}</pre>
<p>Avant tout, notez que si vous n&#8217;instanciez pas de PlayerPosition pour la class SoccerPlayer, tout va bien se passer. C&#8217;est pour cette raison que j&#8217;ai mis à jour le constructeur de SoccerPlayer pour forcer l&#8217;affectation d&#8217;une PlayerPosition.</p>
<p>Après avoir compilé, le programme plante:</p>
<pre name="code" class="xml">
Exception in thread "main" java.io.NotSerializableException: PlayerPosition
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)
	at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1375)
	at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1347)
	at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1290)
	at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1079)
	at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)
	at FileSystemStorageEngine.performSerialization(FileSystemStorageEngine.java:34)
	at FileSystemStorageEngine.main(FileSystemStorageEngine.java:24)</pre>
<p>Ici Java identifie facilement que la class PlayerPosition ne peut pas être sérialisée. Là où souvent vous aller avoir des soucis, c&#8217;est avec un serveur d&#8217;application comme JBoss ou Weblogic. Le mécanisme de passivation permet à un serveur d&#8217;application de libérer de la mémoire en stockant sur le disque des objets sérialisés. Lorsque la passivation échoue, les objets de la session EJB de l&#8217;utilisateur ne pourront pas être restaurés. D&#8217;où cette exception.</p>
<h3>Avec un serveur J2EE et des EJB 2.1, comment retrouver quelle classe n&#8217;est pas sérialisable ?</h3>
<p>Voici l&#8217;astuce du jour (et l&#8217;objet de ce billet):</p>
<ol>
<li>Lancer le serveur d&#8217;application en mode debug sur une socket</li>
<li>Se connecter via Eclipse ou IntelliJ sur le serveur J2EE en démarrant une session de remote debug avec Java 5.</li>
<li>Charger les écrans dans l&#8217;application Web en se connectant</li>
<li>Configurer Eclipse ou IDEA IntelliJ pour que le debugeur s&#8217;active lorsque l&#8217;exception java.io.NotSerializable est levée (voir plus bas)</li>
<li>Attendre que l&#8217;EJB se passive</li>
<li> Votre IDE doit alors se réveiller et vous êtes arretés à l&#8217;endroit où la Thread du serveur d&#8217;application est entrain de faire la sérialisation. Avec l&#8217;inspecteur d&#8217;objet d&#8217;IntelliJ il est facile d&#8217;identifier quelle classe n&#8217;est pas serializable</li>
</ol>
<h3>Sur JBoss la passivation d&#8217;un Session Statefull Bean est reglé à 10 minutes, je ne vais pas attendre aussi longtemps</h3>
<p>En effet, il est facile de configurer JBoss afin de passiver tout de suite des Beans. Je vais donner l&#8217;explication pour JBoss 4.2.2.</p>
<p>Ouvrez le fichier $JBOSS_HOME/server/default/conf/standardjboss.xml avec votre éditeur de texte favori (vi). Dans ce fichier de configuration, la section //container-configuration// définit la configuration du containeur. Chaque configuration spécifie des éléments tels que l’invoquer à utiliser, la politique d’interception de jboss, le nombre d’instances de caches et les files d’attente de thread, la configuration du persistence manager et enfin la partie sécurité.<br />
Nous allons regarder plus en détail la section « container-cache-conf ». Cet élément est passé à l’implémentation de l’InstanceCache si celle-ci supporte l’interface XmlLoadable. Vous pouvez donc implémenter votre propre mécanisme  de cache si vous le désirez. Les implémentations actuelles de Joss InstanceCache dérivent de la classe abstraite « org.jboss.ejb.plugins.AbstractInstanceCache ». Cette classe implémente l’interface XmlLoadable et donc sera capable de charger notre configuration. </p>
<p>Examinons le fichier standardjboss.xml</p>
<pre name="code" class="xml">
<container-cache-conf>
      <cache-policy>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</cache-policy>
      <cache-policy-conf>
          <min-capacity>50</min-capacity>
          <max-capacity>1000000</max-capacity>
          <overager-period>300</overager-period>
          <max-bean-age>600</max-bean-age>
          <resizer-period>400</resizer-period>
          <max-cache-miss-period>60</max-cache-miss-period>
          <min-cache-miss-period>1</min-cache-miss-period>
          <cache-load-factor>0.75</cache-load-factor>
      </cache-policy-conf>
</container-cache-conf>
</pre>
<p>Deux implémentations possible de CachePolicy sont utilisées dans le fichier standardjboss.xml avec le support d’une configuration que nous allons voir dans un instant<br />
Les deux implementations sont</p>
<ul>
<li>org.jboss.ejb.plugins.LRUEnterpriseContextCachePolicy</li>
<li>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</li>
</ul>
<p>Dans JBoss 4.2, les Entity beans utilisent LRUEnterpriseContextCachePolicy. Les stateful session bean utilisent LRUStatefulContextCachePolicy.<br />
Voici ce qu’il est possible de configurer:</p>
<ul>
<li>min-capacity nombre d’éléments minimum du cache</li>
<li>max-capacity nombre maximum d’éléments du cache</li>
<li>overager-period : durée en secondes entre 2 exécutions du système de nettoyage du cache. Lorsque ce système s’active, les beans dont l’âge est supérieur à max-bean-age sont retirés du cache pour être passivé. Vous voyez donc où nous allons en venir.
<li>max-bean-age : donne le temps maximum en seconde Durant lequel un bean peut être inactive avant d’être passive.</li>
<li>resizer-period: durée en secondes entre 2 exécutions de la thread du “resizer”. Cette tâche se charge de redimensionner le cache en se basant sur les 3 proprietés suivantes. Lorsque cette tâche s’exécute, elle vérifie le temps écoulé entre 2 caches miss et si cette période est inférieure à « min-cache-miss-period » alors le cache est agrandit à la valeur « max-capacity » en utilisant le facteur « cache-load-factor ». Si la période par contre entre 2 miss caches est plus grande que la valeur de “max-cache-miss-period » alors la taille du cache est réduite en utilisant la valeur de « cache-load-factor ». Ce système permet d’avoir un cache de beans adapté à la charge du serveur avec JBoss.</li>
</ul>
<p>En plus des paramètres précedents, LRUStatefulContextCachePolicy pour les Session Stateful Bean a les éléments suivants </p>
<ul>
<li>remover-period Spécifie une période en secondes à attendre entre l’exécution de la tâche de nettoyage du cache. La tâche « remover task » se charge de passiver les EJB qui n’ont pas eu d’accès depuis « max-bean-life » secondes. Ce système différent permet de vider les EJB qui ont été passivés afin d’éviter de remplir par exemple le disque. Ce n’est pas le mécanisme de la passivation. C’est un mécanisme de nettoyage des beans sérialisés sur le disque et qui n’ont pas été réactivé depuis « max-bean-life ».</li>
<li>max-bean-life Spécifie la période maximale en seconde d’inactivité pour un bean avant que celui-ci ne soit détruit de l’espace de passivation.</li>
</ul>
<h3>Comment voir si un EJB peut être passivé et restauré facilement avec JBoss ?</h3>
<p>Nous arrivons enfin à l’explication, après avoir parlé sérialisation et JBoss. Editez la section container-cache-conf  pour le container « Standard Stateful SessionBean ».<br />
Vous pouvez limiter le nombre de beans en cache, et donc forcer la passivation pour les beans les plus anciens :<br />
Ici je déclare que les beans doivent être passivés après 30 secondes (max-bean-age), et qu’ils ont une durée de vie de 1800 secondes(max-bean-life). Cela me laisse du temps pour tester l’activation après passivation. Toutes les 25 secondes je vérifie mon cache afin de voir ce que je dois passiver (overage-period). Toutes les 120 secondes (remover-period) je regarde si je ne peux pas effacer du disque de vieux beans passivés. Je ne touche pas à ce qui est redimensionnement du cache (resizer-period).</p>
<pre name="code" class="xml">
<container-cache-conf>
        <cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
        <cache-policy-conf>
          <min-capacity>10</min-capacity>
          <max-capacity>30</max-capacity>
          <overager-period>25</overager-period>
          <max-bean-age>30</max-bean-age>
          <resizer-period>400</resizer-period>
          <max-cache-miss-period>60</max-cache-miss-period>
          <min-cache-miss-period>1</min-cache-miss-period>
          <cache-load-factor>0.75</cache-load-factor>
          <remover-period>120</remover-period>
          <max-bean-life>1800</max-bean-life>
        </cache-policy-conf>
      </container-cache-conf>
</pre>
<h3>Comment désactiver la passivation des EJB avec JBoss ?</h3>
<p>C’est possible, quoique par forcément souhaitable. JBoss fournit une implémentation de CachePolicy appelée org.jboss.ejb.plugins.NoPassivationCachePolicy.<br />
Cette police ne passivera jamais une instance. Elle est basée sur une Map en mémoire qui ne retire jamais les beans sauf si ceux-ci sont explicitement retirés </p>
<p>Pour désactiver la passivation :</p>
<pre name="code" class="xml">
    <container-configuration>
      <container-name>Standard Stateful SessionBean</container-name>
        <container-cache-conf>
          <cache-policy>org.jboss.ejb.plugins.LRUStatefulContextCachePolicy</cache-policy>
</pre>
<p>J&#8217;espère que ce petit guide vous sera utile, n&#8217;hésitez pas à me contacter si vous chercher un expert JBoss pour faire du tuning ou si vous avez besoin de conseils pour votre application.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2008/01/24/astuces-pour-identifier-la-cause-dune-javaionotserializable-et-tuning-jboss/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JBoss 4.2.2 JspFactory error</title>
		<link>http://www.touilleur-express.fr/2007/09/14/jboss-422-jspfactory-error/</link>
		<comments>http://www.touilleur-express.fr/2007/09/14/jboss-422-jspfactory-error/#comments</comments>
		<pubDate>Fri, 14 Sep 2007 20:04:35 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsp]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=19</guid>
		<description><![CDATA[Une erreur bête après avoir migré de JBoss 4.0.5 à JBoss 4.2.1 GA avec une simple page JSP:


org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 22 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.rfs.j2ee.KiWI.util.CompressFilter.doFilter(CompressFilter.java:86)
	com.rfs.wfsignon.web.SignOnFilter.doFilter(SignOnFilter.java:186)
	com.rfs.j2ee.KiWI.util.EncodingFilter.doFilter(EncodingFilter.java:38)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)



Cette erreur est toute bête: l&#8217;implémentation de la class JspFactory retournée par le classloader charge une version qui se trouve dans votre EAR ou dans votre WAR. Pour nous en effet nous avions servlet-2.3.jar à la racine de l&#8217;EAR (construit avec maven2). Bref il suffit de retirer cette archive ...]]></description>
			<content:encoded><![CDATA[<p>Une erreur bête après avoir migré de JBoss 4.0.5 à JBoss 4.2.1 GA avec une simple page JSP:<br />
<code>
<pre>
org.apache.jasper.JasperException: Unable to compile class for JSP:

An error occurred at line: 22 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory

Stacktrace:
	org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
	org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
	org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:415)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
	org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
	org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
	com.rfs.j2ee.KiWI.util.CompressFilter.doFilter(CompressFilter.java:86)
	com.rfs.wfsignon.web.SignOnFilter.doFilter(SignOnFilter.java:186)
	com.rfs.j2ee.KiWI.util.EncodingFilter.doFilter(EncodingFilter.java:38)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
</pre>
<p></code>
</p>
<p>Cette erreur est toute bête: l&#8217;implémentation de la class JspFactory retournée par le classloader charge une version qui se trouve dans votre EAR ou dans votre WAR. Pour nous en effet nous avions servlet-2.3.jar à la racine de l&#8217;EAR (construit avec maven2). Bref il suffit de retirer cette archive de l&#8217;EAR et l&#8217;application fonctionnera à nouveau. Pensez aussi à retirer un éventuel j2ee.jar qui n&#8217;a rien à faire à la racine de votre EAR.</p>
<p>Pour exclure <strong>servlet-2.3.jar</strong> et <strong>jsp-api.jar</strong> avec Maven2 lors du packaging, ajouter dans le pom.xml qui genere l&#8217;EAR une dependency en forcant le scope à la valeur &laquo;&nbsp;<b>provided</b>&laquo;&nbsp;:<br />
<code>
<pre>

    &lt;dependencies&gt;
        &lt;dependency&gt;
            &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
            &lt;artifactId&gt;servlet-api&lt;/artifactId&gt;
            &lt;version&gt;2.3&lt;/version&gt;
            &lt;scope&gt;provided&lt;/scope&gt;
        &lt;/dependency&gt;

        &lt;dependency&gt;
            &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
            &lt;artifactId&gt;jsp-api&lt;/artifactId&gt;
            &lt;version&gt;2.0&lt;/version&gt;
            &lt;scope&gt;provided&lt;/scope&gt;
        &lt;/dependency&gt;

    &lt;/dependencies&gt;
</pre>
<p></code>
</p>
<p>J&#8217;en profite pour vous donner l&#8217;adresse d&#8217;un article de présentation et de mise en route de Maven2 très bien écrit: <a href="http://jfhelie.blogspot.com/2007/06/maven2_24.html">sur le Blog de Jean-François Helie</a></p>
<p><b>English version:</b> The JspFactory that is loaded by the Jasper is not the correct one. Check that you don&#8217;t have a JspFactory impl in your EAR or WAR/WEB-INF/lib subfolder. In Tomcat 6, the JSP API classes are found in jsp-api.jar and servlet API classes are found in servlet-api.jar, with both located in the lib directory of the Tomcat 6 installation.  Any servlet.jar you find<br />
involved with this server would contain out of date classes for this<br />
server. Delete servlet-2.3.jar from your EAR.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/09/14/jboss-422-jspfactory-error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Convertissez vous à JBoss Seam mes frères</title>
		<link>http://www.touilleur-express.fr/2007/08/23/convertissez-vous-a-jboss-seam-mes-freres/</link>
		<comments>http://www.touilleur-express.fr/2007/08/23/convertissez-vous-a-jboss-seam-mes-freres/#comments</comments>
		<pubDate>Thu, 23 Aug 2007 12:24:07 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jboss seam]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=36</guid>
		<description><![CDATA[Ce matin sur The ServerSide j&#8217;ai trouvé un article de Michael Yuan sur JBoss Seam 2.0 qui reprend les nouveautés et présente le framework JBoss Seam. J&#8217;appelle à la conversion les développeurs qui ont un projet avec des EJB3 pour la partie business et JSF pour la partie Web. Vous verrez à quel point JBoss Seam vous simplifie le travail.
Voici quelques questions/réponses sur ce que l&#8217;on peut faire aujourd&#8217;hui avec JBoss Seam pour compléter l&#8217;article de Michael Yuan. J&#8217;espère vous apporter ici des nouvelles fraiches par rapport à ce que ...]]></description>
			<content:encoded><![CDATA[<p>Ce matin sur <a href="http://www.theserverside.com/tt/articles/article.tss?l=JBossSeamFramework">The ServerSide</a> j&#8217;ai trouvé un article de Michael Yuan sur JBoss Seam 2.0 qui reprend les nouveautés et présente le framework JBoss Seam. J&#8217;appelle à la conversion les développeurs qui ont un projet avec des EJB3 pour la partie business et JSF pour la partie Web. Vous verrez à quel point JBoss Seam vous simplifie le travail.</p>
<p>Voici quelques questions/réponses sur ce que l&#8217;on peut faire aujourd&#8217;hui avec JBoss Seam pour compléter l&#8217;article de Michael Yuan. J&#8217;espère vous apporter ici des nouvelles fraiches par rapport à ce que l&#8217;on trouve sur le net.</p>
<p><b>Est-ce que JBoss Seam est payant?</b><br/><br />
Non, JBoss Seam est distribué sous licence LGPL.</p>
<p><b>Est-ce que je dois absolument utiliser le serveur d&#8217;application JBoss pour profiter de Seam?</b><br/><br />
Non, JBoss Seam peut être aussi déployé dans un containeur léger de type Tomcat. Des portages sont en cours pour IBM Websphere, des utilisateurs ont aussi déployés Seam sur le serveur SUN Glassfish. Bref les développeurs de JBoss Seam ont clairement envie de fonctionner sur le plus de serveur d&#8217;applications du marché possible. Voir aussi <a href="http://weblogs.java.net/blog/bleonard/archive/2006/06/running_jboss_s.html">ce post pour Glassfish</a></p>
<p><b>Est-ce que JBoss Seam sait génerer des applications Web 2.0 avec Ajax ?</b></br><br />
La réponse est oui. A la base, Seam utilise JSF (Java Server Faces) et la communauté open-source propose des API qui sont maintenant intégrées de facto dans JBoss Seam. Il devient ainsi très simple d&#8217;ajouter des formulaires qui se mettent à jour partiellement via Ajax par exemple. D&#8217;autre part le module Seam Remoting permet au développeur d&#8217;implémenter une vraie application Web 2.0 facilement</p>
<p><b>Est-ce que Seam peut envoyer des emails ? faire des traitements la nuit ?</b></br><br />
JBoss Seam peut en effet envoyer des emails. Il est possible de génerer un fichier PDF par exemple et de l&#8217;envoyer chaque nuit. Pour l&#8217;envoi de l&#8217;email, l&#8217;api est simple et facile à utiliser. Le traitement de batch avec Seam se repose sur un moteur Asynchrone. Seam peut par exemple faire une tâche chaque heure, chaque nuit et déclencher un traitement. Tout ceci soit via l&#8217;api EJB3 d&#8217;asynchronisme, soit via l&#8217;api Quartz qui est plus puissante. En effet celle-ci permet de créer des tâches avec une date d&#8217;écheance par exemple.<br/><br />
Concernant l&#8217;envoi d&#8217;email, jBPM 3.2 qui est en cours d&#8217;intégration dans JBoss Seam 2.0 Beta 1 permet aussi d&#8217;envoyer un email lorsqu&#8217;une tâche est terminée.</p>
<p><b>Est-ce qu&#8217;il est possible de changer de langue, de locale à la volée ?</b><br/><br />
Oui en effet le support de l&#8217;internationalisation (i18n) est fortement intégré dans Seam, en partie via JSF. Par ailleurs il est possible d&#8217;ajouter un composant en 2 clics pour permettre de changer de langue et de Locale à la volée. Ce choix peut être persisté via un cookie. Il existe aussi une possibilité de changer le thème (la skin) d&#8217;une application (je pense au module Stylizer chez Reuters&#8230;) afin de changer l&#8217;aspect d&#8217;un site avec un seul clic.</p>
<p><b>Est-ce qu&#8217;Eclipse peut me permettre d&#8217;écrire des pages graphiquements ? Existe-t-il un studio ?</b><br/><br />
J&#8217;ai lu que Macromedia prépare une version de DreamWeaver qui reconnait parfaitement JSf 1.2. Cela devrait permettre de coder les pages de la vue plus rapidement. Attention cependant, avec richFaces, ajax4jsf et iceFaces de toutes les façons ces studios ne fonctionnent pas. Il vaut mieux travailler en mode &laquo;&nbsp;explode&nbsp;&raquo;. Ce mode consiste à compiler votre application, à déployer sur JBoss une arborescence explosée (EAR dans lequel on retrouve un repertoire WAR&#8230;). Cela permet alors de travailler sur les fichiers .xhtml (avec Facelets) sans devoir reconstruire tout l&#8217;EAR à chaque fois. Vous n&#8217;avez alors qu&#8217;à lancer un &laquo;&nbsp;ant restart&nbsp;&raquo; de temps en temps si vous touchez à la partie Java. C&#8217;est très pratique.</p>
<p>Par ailleurs sinon je vous conseille de dépenser un peu d&#8217;argent pour acheter IDEA IntelliJ. C&#8217;est mon quart d&#8217;heure sponsor ce soir. Mais entre Eclipse+MyEclipse vs IntelliJ, il n&#8217;y a pas photos. IntelliJ reconnait le format xhtml, les JSF <b>et surtout les annotations de JBoss Seam</b> ce qui au passage devrait convertir j&#8217;espere quelques lecteurs ici. Ajoutez-y le support de JBoss AS en natif pour controler, débuger JBoss (comme JBoss IDE mais en mieux) et voilà, vous allez craquer.</p>
<p><br/><br />
Si vous avez d&#8217;autres questions, n&#8217;hésitez pas à commenter.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/08/23/convertissez-vous-a-jboss-seam-mes-freres/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss Seam 2.0 Beta 1 premiers tours de clefs</title>
		<link>http://www.touilleur-express.fr/2007/08/01/jboss-seam-20-beta-1-premiers-tours-de-clefs/</link>
		<comments>http://www.touilleur-express.fr/2007/08/01/jboss-seam-20-beta-1-premiers-tours-de-clefs/#comments</comments>
		<pubDate>Wed, 01 Aug 2007 20:25:51 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jboss seam]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=38</guid>
		<description><![CDATA[Hier soir j&#8217;ai compilé la derniere version de JBoss Seam 2.0 Beta 1 toute fraiche tombée de CVS. La release officielle est pour bientôt mais j&#8217;avais envie (et besoin) de vérifier comment mes applications passeront en 2.0
Tout d&#8217;abord au niveau des packages, comme Gavin l&#8217;a expliqué dans un post (voir forum JBoss), il y a eu une réorganisation et un nettoyage des packages. De manière très concrete, il faut prévoir un peu de refactoring au niveau des imports mais rien de très compliqué.
Au niveau de la configuration, attention au fichier ...]]></description>
			<content:encoded><![CDATA[<p>Hier soir j&#8217;ai compilé la derniere version de JBoss Seam 2.0 Beta 1 toute fraiche tombée de CVS. La release officielle est pour bientôt mais j&#8217;avais envie (et besoin) de vérifier comment mes applications passeront en 2.0</p>
<p>Tout d&#8217;abord au niveau des packages, comme Gavin l&#8217;a expliqué dans un post (voir forum JBoss), il y a eu une réorganisation et un nettoyage des packages. De manière très concrete, il faut prévoir un peu de refactoring au niveau des imports mais rien de très compliqué.</p>
<p>Au niveau de la configuration, attention au fichier /resources/WEB-INF/components.xml qui a pas mal changé. L&#8217;intégration du système d&#8217;Identity de jBPM fait qu&#8217;il faut reprendre ce fichier, sous peine sinon de se retrouver avec ce genre d&#8217;exception:</p>
<pre>
11:20:48,973 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[localhost].[/seam-matstan]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener

java.lang.RuntimeException: error while reading /WEB-INF/components.xml
        at org.jboss.seam.init.Initialization.initComponentsFromXmlDocument(Initialization.java:136)
        at org.jboss.seam.init.Initialization.create(Initialization.java:86)
        at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:34)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3854)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4359)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:553)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
</pre>
</p>
<p>Attention aussi au niveau de la qualification de nommage des composants dans Seam. Exemple trivial: j&#8217;ai une class Session qui traine dans ma conversation. Or il faut savoir que certains composants Seam sont branchés avec une @Factory&#8230; Si vous avez un attribut &laquo;&nbsp;session&nbsp;&raquo; que vous voulez injecter comme sur cet exemple:</p>
<pre>
   @In
   MyObject session;
</pre>
<p>&#8230; cela ne marche pas car Seam enregistre aussi ce meme nom pour la session Seam, en l&#8217;occurence ici org.jboss.seam.web.session.<br />
En général il est bien de forcer les noms des composants pour éviter ce genre de problèmes.
</p>
<p>Sinon je suis à fond dans jBPM. La version 3.2.1 que Gavin intégre (il y a des commits sur CVS en ce moment) offrira quelques nouvelles fonctions:</p>
<ul>
<li>Notification par email lors de l&#8217;execution d&#8217;une tâche en spécifiant notify=&nbsp;&raquo;true&nbsp;&raquo; dans une task-node<br />
</lI</p>
<li>Gestion de modèles d&#8217;emails pour cette partie</li>
<li>Gestion des Calendriers. Cela permet par exemple de programmer une task durant les jours ouvrés d&#8217;une societé. Ou pour la finance, d&#8217;utiliser des calendriers cambistes afin d&#8217;affecter des tasks selon les dates d&#8217;ouverture de la bourse&#8230; (grand sourire)</li>
<li>Gestion des &laquo;&nbsp;due Date&nbsp;&raquo;, &laquo;&nbsp;start Date&nbsp;&raquo;, &laquo;&nbsp;end Date&nbsp;&raquo; sur les tasks. Il devient facile aussi de demander au systeme d&#8217;envoyer un email de rappel 2 jours avant l&#8217;échéance d&#8217;une task par exemple. Tout ceci grâce à jBPM.</li>
</ul>
<p>Concernant la partie JSF, je déconseille d&#8217;essayer d&#8217;installer Tomahawk. Dommage car l&#8217;un des composants d&#8217;agenda est sympa. Mais Gavin King sur les forums de JBoss a expliqué les problèmes rencontrés pour faire fonctionner cette API avec Seam 2.0</p>
<p>Coté Ajax4jsf et RichFaces, ces deux API sont très simples à utiliser et vraiment mature. Pour se faire une idée des applications Seam 2.0, il faut vraiment tester <b>seamdiscs</b>. Sur le modèle de MySpace, la démo montre quelques composants de RichFaces.<br />
Je vous laisse tester par exemple la SuggestionBox en allant sur le site d&#8217;Exadel:<br />
<a href="http://livedemo.exadel.com/richfaces-demo/richfaces/suggestionBox.jsf?c=suggestionBox">http://livedemo.exadel.com/richfaces-demo/richfaces/suggestionBox.jsf?c=suggestionBox</a>
</p>
<p>Merci aussi sinon pour les emails reçus, j&#8217;ai de plus en plus de monde qui vient sur ce blog, avec aujourd&#8217;hui plus de 400 visiteurs uniques différents. Cela commence à faire du monde, je vois que les gens viennent de partout, cela fait vraiment plaisir de lire vos commentaires et vos encouragements. Merci !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/08/01/jboss-seam-20-beta-1-premiers-tours-de-clefs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A propos d&#039;ICEFaces 1.6, JBoss Seam et mon projet de dans deux ans</title>
		<link>http://www.touilleur-express.fr/2007/07/12/a-propos-dicefaces-16-jboss-seam-et-mon-projet-de-dans-deux-ans/</link>
		<comments>http://www.touilleur-express.fr/2007/07/12/a-propos-dicefaces-16-jboss-seam-et-mon-projet-de-dans-deux-ans/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 07:27:18 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[icefaces]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=40</guid>
		<description><![CDATA[Je suis sur un nouveau projet personnel. Basé sur JBoss Seam, j&#8217;ai besoin de librairies JSF assez puissante pour gagner du temps. Ce matin j&#8217;ai vu qu&#8217;ICEsoft Technologies, Inc a annoncé la sortie officielle de la librairie JSF ICEFaces en version 1.6. Cette nouvelle version s&#8217;intégre avec JBoss Seam 1.2.1 GA. Des tutoriaux permettent d&#8217;apprendre à coder des pages rapidement. Le mieux cependant est peut-être de regarder la page de démonstration pour vous faire une idée.
Par rapport à d&#8217;autres librairies comme tomahawk qui a du mal à s&#8217;intégrer avec Seam, ...]]></description>
			<content:encoded><![CDATA[<p>Je suis sur un nouveau projet personnel. Basé sur JBoss Seam, j&#8217;ai besoin de librairies JSF assez puissante pour gagner du temps. Ce matin j&#8217;ai vu qu&#8217;ICEsoft Technologies, Inc a annoncé la sortie officielle de la librairie JSF ICEFaces en version 1.6. Cette nouvelle version s&#8217;intégre avec JBoss Seam 1.2.1 GA. Des <a href="http://www.icefaces.org/main/resources/tutorials.iface">tutoriaux</a> permettent d&#8217;apprendre à coder des pages rapidement. Le mieux cependant est peut-être de regarder <a href="http://www.icefaces.org/main/demos/">la page de démonstration</a> pour vous faire une idée.</p>
<p>Par rapport à d&#8217;autres librairies comme tomahawk qui a du mal à s&#8217;intégrer avec Seam, ICEFaces a été testé et validé avec JBoss Seam. Pour ma part <b>je cherche un composant jsf d&#8217;agenda</b> qui tienne la route. J&#8217;aimerai bien tester <a href="http://myfaces.apache.org/tomahawk/schedule.html">MyFaces Schedule</a> mais pour mettre en place tomahawk dans JBoss il faut désactiver l&#8217;implémentation jsf par défaut. Je n&#8217;ai pas encore testé, car je regarde une autre alternative utilisant Google Agenda. L&#8217;idée est de récuperer l&#8217;agenda via du HTML, ce que j&#8217;ai réussi à faire hier soir sans trop d&#8217;effort. Google met aussi à disposition une API Java pour poster des évenements vers un agenda Google. Bref j&#8217;ai tout, sauf qu&#8217;au niveau de l&#8217;ergonomie l&#8217;agenda qui s&#8217;affiche en mode HTML est moins sympa à utiliser que la vraie version de Google Agenda&#8230; Donc me voilà revenu au point de départ.</p>
<p>Sinon JBoss Seam est vraiment puissant&#8230; mais chut, tant pis pour ceux qui se réveilleront trop tard&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/07/12/a-propos-dicefaces-16-jboss-seam-et-mon-projet-de-dans-deux-ans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JBoss Seam 1.2.1 GA et l&#039;encoding, allez la France</title>
		<link>http://www.touilleur-express.fr/2007/06/24/jboss-seam-121-ga-et-lencoding-allez-la-france/</link>
		<comments>http://www.touilleur-express.fr/2007/06/24/jboss-seam-121-ga-et-lencoding-allez-la-france/#comments</comments>
		<pubDate>Sun, 24 Jun 2007 16:40:05 +0000</pubDate>
		<dc:creator>Nicolas Martignole</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[jboss]]></category>
		<category><![CDATA[jboss seam]]></category>

		<guid isPermaLink="false">http://www.touillleur-express.fr/?p=42</guid>
		<description><![CDATA[J&#8217;ai trouvé un léger problème lorsque vous utiliser JBoss Seam et des pages en français. C&#8217;est un souci connu avec Tomcat, le connecteur qui est utilisé sur JBoss pour la partie Web. En effet l&#8217;encodage des URI est effectué en ISO-8859-1 par défaut, ce qui pose certains soucis lorsque vous voulez faire de l&#8217;UTF-8.
Si vous ne sauver pas les fichiers en UTF-8 dans Eclipse ou Intellij vous aller rencontrer par ailleurs un autre problème lors du chargement de la page car les caractères ne sont pas chargés avec le bon ...]]></description>
			<content:encoded><![CDATA[<p>J&#8217;ai trouvé un léger problème lorsque vous utiliser JBoss Seam et des pages en français. C&#8217;est un souci connu avec Tomcat, le connecteur qui est utilisé sur JBoss pour la partie Web. En effet l&#8217;encodage des URI est effectué en ISO-8859-1 par défaut, ce qui pose certains soucis lorsque vous voulez faire de l&#8217;UTF-8.<br />
Si vous ne sauver pas les fichiers en UTF-8 dans Eclipse ou Intellij vous aller rencontrer par ailleurs un autre problème lors du chargement de la page car les caractères ne sont pas chargés avec le bon encoding.</p>
<pre>
Invalid byte 2 of 3-byte UTF-8 sequence.
</pre>
<p>Pour éviter cela il suffit de configurer le connecteur Tomcat embarqué dans JBoss en éditant le fichier jboss-4.2.0.GA\server\default\deploy\jboss-web.deployer\server.xml.<br />
Ouvrir server.xml fichier et ajouter un tag useBodyEncodingForURI et un tag URIEncoding comme sur cet exemple:</p>
<pre>
    &lt;Connector port="8080" address="${jboss.bind.address}"
         maxThreads="250" maxHttpHeaderSize="8192"
         emptySessionPath="true" protocol="HTTP/1.1"
         enableLookups="false" redirectPort="8443" acceptCount="100"
         <b>useBodyEncodingForURI="false" URIEncoding="UTF-8" </b>
         maxKeepAliveRequests="50"/&gt;
</pre>
<p>Relancer le serveur et tester en éditant une page avec des caractres iso (accents, le signe EURO par exemple)</p>
<p><a href="http://tomcat.apache.org/tomcat-5.0-doc/config/http.html">Voir la doc de tomcat pour plus de details</a>
</p>
<p><b>Update dimanche soir</b> je précise que pour être complétement tranquille le mieux est de sauver vos fichiers xhtml en UTF-8 et de spécifier l&#8217;encoding dans l&#8217;entête de la page :</p>
<pre>
    &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.touilleur-express.fr/2007/06/24/jboss-seam-121-ga-et-lencoding-allez-la-france/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

