<?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>@Repository(&#34;djo&#34;) &#187; Spring Framework</title>
	<atom:link href="https://blog.developpez.com/djo-mos/pcategory/java/spring/spring-framework/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/djo-mos</link>
	<description></description>
	<lastBuildDate>Sun, 27 Sep 2009 00:05:37 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Inclusion dynamique de ressources Spring</title>
		<link>https://blog.developpez.com/djo-mos/p7821/java/spring/spring-framework/inclusion_dynamique_de_ressources_spring</link>
		<comments>https://blog.developpez.com/djo-mos/p7821/java/spring/spring-framework/inclusion_dynamique_de_ressources_spring#comments</comments>
		<pubDate>Thu, 02 Jul 2009 01:57:19 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une super astuce que je viens de tomber dessus sur le blog de Zenika : merci à eux de partager celà Il s&#8217;agit de controler l&#8217;inclusion de fichiers de configuration Spring via une property passé à la JVM : &#60;import resource=&#34;${env}-infrastructure.xml&#34;/&#62; puis passer l&#8217;argument : -Denv=prod ou encore -Denv=dev Par exemple, selon que l&#8217;on est en mode développement ou en mode production. J&#8217;adore ! surtout pour l&#8217;inclusion des fichiers .properties Le billet qui présente cette [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une super astuce que je viens de tomber dessus sur le blog de Zenika : merci à eux de partager celà <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Il s&rsquo;agit de controler l&rsquo;inclusion de fichiers de configuration Spring via une property passé à la JVM :</p>
<pre><code class="codecolorer text default"><span class="text">&lt;import resource=&quot;${env}-infrastructure.xml&quot;/&gt;</span></code></pre>
<p>puis passer l&rsquo;argument :</p>
<pre><code class="codecolorer text default"><span class="text">-Denv=prod</span></code></pre>
<p>ou encore</p>
<pre><code class="codecolorer text default"><span class="text">-Denv=dev</span></code></pre>
<p>Par exemple, selon que l&rsquo;on est en mode développement ou en mode production.</p>
<p>J&rsquo;adore !  surtout pour l&rsquo;inclusion des fichiers .properties <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Le <a href="http://blog.zenika.com/index.php?post/2009/07/01/Configuration-dynamique-du-déploiement-d-une-application-Spring">billet</a> qui présente cette technique.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Préparation de l&#8217;environnement : configuration de log4j</title>
		<link>https://blog.developpez.com/djo-mos/p7515/java/spring/spring-framework/osgi_configuration_log4j_logging</link>
		<comments>https://blog.developpez.com/djo-mos/p7515/java/spring/spring-framework/osgi_configuration_log4j_logging#comments</comments>
		<pubDate>Wed, 22 Apr 2009 14:17:34 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[OSGi côté serveur]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans ce second volet de la série de l&#8217;utilisation d&#8217;OSGi côté serveur, je vais présenter comment on peut configurer log4j pour qu&#8217;on puisse voir les logs générés par les différents bundles dans la console d&#8217;Eclipse. Dans un programme Java ordianire, log4j cherche un fichier log4j.properties (ou xml) dans le racine du classpath. Or, dans un conteneur OSGi, la notion de classpath est différente. On n&#8217;a plus de classpath unique par application, mais plutôt un classpath [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans ce second volet de la série de l&rsquo;utilisation d&rsquo;OSGi côté serveur, je vais présenter comment on peut configurer log4j pour qu&rsquo;on puisse voir les logs générés par les différents bundles dans la console d&rsquo;Eclipse.</p>
<p>Dans un programme Java ordianire, log4j cherche un fichier log4j.properties (ou xml) dans le racine du classpath. Or, dans un conteneur OSGi, la notion de classpath est différente. On n&rsquo;a plus de classpath unique par application, mais plutôt un classpath séparé par bundle.</p>
<p><span id="more-2"></span></p>
<p>Pour résoudre celà, on utilise la notion de fragments. Un fragment est un bundle spécial, qui à l&rsquo;exécution (à la pahse de resolution), se trouve attaché et mergé dans un autre bundle hôte. Après, il sera traités exactement comme faisant partie du bundle hôte.</p>
<p>Dans le cas précis de ce billet, on va créer un fragment avec le bundle de log4j comme hôte, et on va placer le fichier log4j.properties dans ce fragment.<br />
Ainsi, quand log4j va rechercher un fichier de configuration dans la racind du classpath (le classpath de son bundle), il trouvera et utilisera ce fichier</p>
<p>Eclipse PDE fournit un assistant pour la création d&rsquo;un fragment. Faites « New > Other > Plug-In Developement > Fragment Project » :</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677734/" title="fragment-wizard-1 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3482/3465677734_1d9710c668_o.png" width="441" height="422" alt="fragment-wizard-1" /></a></p>
<p>Saissisez un nom pour ce fragment, « ssosgi.log4j.config » dans mon cas par exemple et cochez l&rsquo;option « an OSGi framework&nbsp;&raquo; sous « Target Platform »:</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677888/" title="fragment-wizard-2 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3549/3465677888_6817123aeb_o.png" width="497" height="499" alt="fragment-wizard-2" /></a></p>
<p>Dans la page suivante, utilisez le bouton « Browse » pour sélectionnez le bundle de log4j comme Host Plig-In</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465677976/" title="fragment-wizard-3 by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3216/3465677976_ef36beac7d_o.png" width="497" height="522" alt="fragment-wizard-3" /></a></p>
<p>Et validez.</p>
<p>Dans le projet, créez un fichier log4.properties avec le contenu suivant :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">log4j.rootLogger=info, con, file <br />
log4j.appender.con=org.apache.log4j.ConsoleAppender <br />
log4j.appender.con.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.con.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n <br />
&nbsp;<br />
log4j.appender.file=org.apache.log4j.FileAppender <br />
log4j.appender.file.layout=org.apache.log4j.PatternLayout <br />
log4j.appender.file.layout.ConversionPattern=%5p [%t] (%F\:%L) - %m%n <br />
log4j.appender.file.File=/home/djo/ssosgi.log <br />
log4j.appender.file.append=false</div></div>

</pre>
</blockquote>
<p>Notez que vous pouvez personnaliser la configuration pour l&rsquo;adapter à vos besoins. Pensez notamment à changer le nom du fichier de log («/home/djo/ssosgi.log» dans mon cas).</p>
<p>Il faut ensuite ajouter ce fragment à la configuration de lancement. Allez dans la fnêtre de configuration de celle-ci (<a href="http://blog.developpez.com/djo-mos/p7098/java/osgi/osgi-cote-serveur/osgi-preparation-target-platform/">comme décrit dans le billet précédent</a>) et cochez le fragment qu&rsquo;on vient de créer dans la liste des plugins à inclure.</p>
<p>Appliquez et lancer la configuration. Vous devriez avoir un log plus détaillé dans la console d&rsquo;Eclipse :</p>
<p><a href="http://www.flickr.com/photos/23820026@N06/3465707274/" title="console-log by djo.mos, on Flickr"><img src="http://farm4.static.flickr.com/3509/3465707274_d2df4e4c19_o.png" width="446" height="384" alt="console-log" /></a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Préparation de l&#8217;environnement : la target platform</title>
		<link>https://blog.developpez.com/djo-mos/p7098/java/osgi_preparation_target_platform</link>
		<comments>https://blog.developpez.com/djo-mos/p7098/java/osgi_preparation_target_platform#comments</comments>
		<pubDate>Wed, 21 Jan 2009 17:58:17 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[OSGi côté serveur]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Ce billet est le premier d&#8217;une série (que j&#8217;espère finir pour une fois) de billets à propos de l&#8217;utilisation d&#8217;OSGi du côté serveur. L&#8217;utilisation la plus populaire d&#8217;OSGi est plus du côté client, avec Eclipse qui l&#8217;utilise comme noyeau et base de son architecture de plugins, ainsi que dans le monde de l&#8217;embarqué. Dans ce premier billet, je vais présenter l&#8217;étape de préparation de l&#8217;environnement de développement,et plus particulièrement la notation de Target Platform. 1. [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Ce billet est le premier d&rsquo;une série (que j&rsquo;espère finir pour une fois) de billets à propos de l&rsquo;utilisation d&rsquo;OSGi du côté serveur.<br />
L&rsquo;utilisation la plus populaire d&rsquo;OSGi est plus du côté client, avec Eclipse qui l&rsquo;utilise comme noyeau et base de son architecture de plugins, ainsi que dans le monde de l&rsquo;embarqué.</p>
<p>Dans ce premier billet, je vais présenter l&rsquo;étape de préparation de l&rsquo;environnement de développement,et plus particulièrement la notation de <strong><em>Target Platform</em></strong>.</p>
<p><span id="more-1"></span></p>
<h1 style="text-align: left;">1. Présentation</h1>
<p>Il s&rsquo;agit ici de définir l&rsquo;ensemble initial de plugins qui va constituer l&rsquo;environnement d&rsquo;exécution de notre serveur.</p>
<p>Il nous faut aussi configurer Eclipse pour qu&rsquo;il reconnaisse et travaille sur cet ensemble de plugins.<br />
Ca permettrait d&rsquo;une part de limiter le nombre de choix présentés dans divers endroits (lors de sélection de plugins requis et des packages importés, des plugins à inclure dans une configuration d&rsquo;exécution, etc.) mais aussi pour éviter une dépendance accidentelle à un plugin non désiré (je pense notamment aux plugins d&rsquo;Eclipse par exemple)</p>
<h1 style="text-align: left;">2. Vue d&rsquo;ensemble</h1>
<p>La target platform sera constituée de :</p>
<ul>
<li><strong>Equinox</strong> : C&rsquo;est le coeur du serveur. Il implémente les spécifications OSGi et servira comme conteneur qui charge et gère le cycle de vie des autres plugins</li>
<li><strong>Spring Dynamic Modules</strong> : C&rsquo;est une sorte de pont entre le monde OSGi (registre des services) et le monde de Spring (application context). De plus, Spring DM permet de faire tourner des applications Web Java ordinaires (Servlets, JSPs, etc.) dans un conteneur OSGi (OSGi offre un support basique pour le web à travers HttpService, mais c&rsquo;est très limité)</li>
<li><strong>Spring</strong> : Il est là car tout d&rsquo;abord il est requis par Spring DM, mais aussi pour son moteur IoC ainsi que les abstractions qu&rsquo;il offre au dessus de plusieurs technologies Java (JDBC et Remoting entre autres)</li>
<li><strong>Jetty</strong> : Comme énoncé plus tôt, le HttpService d&rsquo;OSGi est très limité parapport à la puissance dont on dispose dans une application web Java ordinaire. J&rsquo;ai donc inclus Jetty dans la configuration de base de notre serveur pour avoir toute la puissance requise sous la main</li>
<li>Quelques autre dépendances, comme des librairies de logging</li>
</ul>
<blockquote><p>Notez qu&rsquo;il est tout à fait possible (et très simple) d&rsquo;utiliser Tomcat à la place de Jetty. Ceci revient juste à remplacer les jars de Jetty par ceux de Tomcat.</p></blockquote>
<h1 style="text-align: left;">3. Récupération des fichiers nécessaires</h1>
<p>Il va nous falloir télécharger plusieurs packages pour retrouver les jars nécessaires.</p>
<ul>
<li><strong>Spring DM</strong> : récupérable à <a href="http://www.springsource.com/download/community?project=Spring%20Dynamic%20Modules">cette adresse</a> (pour cet article, j&rsquo;ai utilisé Spring DM 1.2 M2)</li>
<li><strong>Spring Framework</strong> : récupérable à <a href="http://www.springsource.com/download/community?project=Spring%20Framework">cette adresse</a> (pour cet article, j&rsquo;ai utilisé Spring Framework 2.5.6)</li>
</ul>
<p>Après avoir extrait les archives de Spring et de Spring DM, Créez quelque part sur votre disque un dossier qui servira à rassembler les jars de la target platform, par exemple &nbsp;&raquo; server-springdm-1.2.0.m2-spring-2.5.6-jetty &nbsp;&raquo; dans mon cas. </p>
<blockquote><p>Généralement, je crée la target platform en tant que projet (simple) dans mon worksapce Eclipse, histoire de pouvoir le versionner sur SVN par exemple, mais ce n&rsquo;est pas requis. </p></blockquote>
<p>Copiez les fichiers suivants depuis le dossier où vous avez extrait Spring DM vers le dossier de la target platform: </p>
<ul>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-core-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-extender-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-io-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-web-1.2.0-m2.jar</li>
<li>spring-osgi-1.2.0-m2/dist/spring-osgi-web-extender-1.2.0-m2.jar</li>
</ul>
<ul>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.net.sf.cglib-2.1.3.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.org.aopalliance-1.0.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.api-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.log4j-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/com.springsource.slf4j.org.apache.commons.logging-1.5.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty-6.1.9.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty.start.osgi-1.0.0.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty-util-6.1.9.jar</li>
<li>spring-osgi-1.2.0-m2/lib/jetty.web.extender.fragment.osgi-1.0.1.jar</li>
<li>spring-osgi-1.2.0-m2/lib/log4j.osgi-1.2.15-SNAPSHOT.jar</li>
<li>spring-osgi-1.2.0-m2/lib/org.eclipse.osgi-3.2.2.jar</li>
<li>spring-osgi-1.2.0-m2/lib/servlet-api.osgi-2.5-SNAPSHOT.jar</li>
</ul>
<ul>
<li>spring-framework-2.5.6/dist/modules/spring-aop.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-beans.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-context.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-core.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-jdbc.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-tx.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-web.jar</li>
<li>spring-framework-2.5.6/dist/modules/spring-webmvc.jar</li>
</ul>
<blockquote><p>Pour vous simplifier la tache, vous pouvez télécharger <a href="http://djo-mos.ftp-developpez.com/data/blog/tp-server-springdm-1.2.0.m2-spring-2.5.6-jetty.zip">cet archive zip (5 Mo)</a> qui contient la target platform décrite plus haut)</p></blockquote>
<h1 style="text-align: left;">4. Configuration d&rsquo;Eclipse</h1>
<p>Dans Eclipse, allez au menu Window -> Preferences et localisez le noeud &laquo;&nbsp;Plug-in Development/Target Platform&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3419/3215905144_d9bcdcc417_o.png" alt="Target Platform Preferences" title="" /></p>
<p>Cliquez sur &laquo;&nbsp;Browse&nbsp;&raquo;, localiser le dossier de la target platform et validez.</p>
<p>Il nous faut maintenant créer une configuration de lancement qui lance notre serveur.</p>
<p>Faites un clic sur le petit flêche orienté vers le bas du bouton Run et sélectionnez &laquo;&nbsp;Run configurations&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3344/3215905482_4ee8a5fa38_o.png" alt="Run config 1" title="" /></p>
<p>Sélectionnez le noeud &laquo;&nbsp;OSGi Framework&nbsp;&raquo;, puis clic droit et &laquo;&nbsp;New&nbsp;&raquo;</p>
<p><img src="http://farm4.static.flickr.com/3506/3215905370_385a0a6058_o.png" alt="Run config 2" title="" /></p>
<p>Saisissez un nom pour cette configuration, &laquo;&nbsp;serveur&nbsp;&raquo; par exemple.<br />
Par défaut, tous les plugins de la target platform sont cochés. Faites le si ce n&rsquo;est pas le cas.</p>
<p>Assurez vous aussi que &laquo;&nbsp;Default start level&nbsp;&raquo; est positionné à 4 et que &laquo;&nbsp;Default-Autostart&nbsp;&raquo; est à true</p>
<p>Il faut maintenant modifer le start level des deux extenders de Spring DM (org.springframework.osgi.extender et org.springframework.osgi.web.extender) pour les mettre à 5 </p>
<p><img src="http://farm4.static.flickr.com/3367/3215054619_3bf7a90dd7_o.png" alt="extender-config-1" title="" /></p>
<p><img src="http://farm4.static.flickr.com/3395/3215055301_1caa38eff8_o.png" alt="extender-config-2" title="" /></p>
<p>Cliquez sur &laquo;&nbsp;Apply&nbsp;&raquo; pour valider.</p>
<h1 style="text-align: left;">5. Test</h1>
<p>Cliquez sur le bouton &laquo;&nbsp;Run&nbsp;&raquo;. La console devrait afficher : </p>
<p><img src="http://farm4.static.flickr.com/3459/3215055427_7cea5df262_o.png" alt="console" title="" /></p>
<p>Et si vous tapez l&rsquo;adresse &laquo;&nbsp;http://localhost:8080/&nbsp;&raquo; dans un navigateur, vous devriez avoir :</p>
<p><img src="http://farm4.static.flickr.com/3505/3215054547_1df10575c2_o.png" alt="Browser" title="" /></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie du second Milestone de Spring Dynamic Modules 1.2.0</title>
		<link>https://blog.developpez.com/djo-mos/p6826/annonces/sortie_du_second_milestone_de_spring_dyn_0</link>
		<comments>https://blog.developpez.com/djo-mos/p6826/annonces/sortie_du_second_milestone_de_spring_dyn_0#comments</comments>
		<pubDate>Mon, 24 Nov 2008 17:40:23 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Spring Dynamic Modules permet de réconcilier le modèle de développement de Spring Framework avec celui d&#8217;OSGi, et ce via l&#8217;ajout d&#8217;un namespace osgi utilisable dans les fichiers de configuration de Spring qui permettent entre autre d&#8217;importer un service OSGi en tant que Bean Spring ainsi que d&#8217;exporter un Bean Spring en tant que service OSGi. Aujourdhui, le second milestone de Spring dynamic Modules (spring DM) est sorti, apportant comme nouveautés : Passage à Spring 2.5.6 [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Spring Dynamic Modules permet de réconcilier le modèle de développement de Spring Framework avec celui d&rsquo;OSGi, et ce via l&rsquo;ajout d&rsquo;un namespace osgi utilisable dans les fichiers de configuration de Spring qui permettent entre autre d&rsquo;importer un service OSGi en tant que Bean Spring ainsi que d&rsquo;exporter un Bean Spring en tant que service OSGi.</p>
<p>Aujourdhui, le second milestone de Spring dynamic Modules (spring DM) est sorti, apportant comme nouveautés :</p>
<p><span id="more-175"></span></p>
<ul>
<li>Passage à Spring 2.5.6</li>
<li>Mise à jour des dépendances ves les modules Spring pour refléter les nouveaux noms de ceux-ci</li>
<li>Support des services compendium via le namespace compendium</li>
<li>etc.</li>
</ul>
<p>Les liens qu&rsquo;il vous faut :</p>
<p>=> <a href="http://www.springsource.com/download/community?project=Spring%20Dynamic%20Modules">Télécharger</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m2/reference/html/">Documentation</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m2/reference/html/faq.html">FAQ</a><br />
=> <a href="http://static.springframework.org/osgi/docs/1.2.0-m2/changelog.txt">Changelog</a></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sortie de Spring Framework 2.5.6</title>
		<link>https://blog.developpez.com/djo-mos/p6728/annonces/sortie_de_spring_framework_2_5_6</link>
		<comments>https://blog.developpez.com/djo-mos/p6728/annonces/sortie_de_spring_framework_2_5_6#comments</comments>
		<pubDate>Wed, 05 Nov 2008 09:13:13 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Annonces]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[La première version de maintenance de Spring Framework après la décision de ne plus les fournir librement après les premiers 3 mois puis le revirement de la situation est maintenant disponible avec la publication de la 2.5.6 qui apporte principalement : Près de 100 bugs résolus Passage à des versions plus récentes pour des libs externes (EclipseLink, AspectJ, etc.) Entêtes OSGi révisées Les liens importants : => Annonce => Documentation => Changelog => Télécharger (ça [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>La première version de maintenance de Spring Framework après <a href="http://blog.developpez.com/djo-mos?title=changement_strategie_maintenance_spring">la décision de ne plus les fournir librement après les premiers 3 mois</a> puis <a href="http://blog.developpez.com/djo-mos?title=changement_strategi_maintenance_spring_b">le revirement de la situation</a> est maintenant disponible avec la publication de la 2.5.6 qui apporte principalement :</p>
<ul>
<li>Près de <a href="http://jira.springframework.org/browse/SPR/fixforversion/10968">100 bugs résolus</a></li>
<li>Passage à des versions plus récentes pour des libs externes (EclipseLink, AspectJ, etc.)</li>
<li>Entêtes OSGi révisées</li>
</ul>
<p>Les liens importants :</p>
<p><span id="more-174"></span></p>
<p>=> <a href="http://www.springsource.org/node/813">Annonce</a><br />
=> <a href="http://static.springframework.org/spring/docs/2.5.x/reference/index.html">Documentation</a><br />
=> <a href="http://static.springframework.org/spring/docs/2.5.x/changelog.txt">Changelog</a><br />
=> <a href="http://www.springsource.com/download/community?project=Spring%20Framework">Télécharger</a> (ça c&rsquo;est pour la version <em>community</em> (ou gratuite), et le lien que je donne vous fait sauter un formulaire à remplir (ou a ignorer) proposé par le lien original que <a href="http://www.springsource.com/download?project=Spring%20Framework">voici</a>)</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Changement de politique de maintenance de Spring Framework bis</title>
		<link>https://blog.developpez.com/djo-mos/p6531/java/spring/changement_strategi_maintenance_spring_b</link>
		<comments>https://blog.developpez.com/djo-mos/p6531/java/spring/changement_strategi_maintenance_spring_b#comments</comments>
		<pubDate>Tue, 07 Oct 2008 23:34:23 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Spring]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[C&#8217;est officiel : Rod Jonhson vient de poster un billet sur le blog officiel de SpringSource pour dire qu&#8217;il ont effectué une sorte de refactoring sur leur nouvelle politique de maintenance annoncée il y&#8217;a peu et qui a causé, pour rester en un doux euhémisme, de violentes réactions de la communauté (genre 250 commentaires jusque là sur The Server Side). Je suis encore en train de lire (et relire) l&#8217;annonce, mais une chose est sûre [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>C&rsquo;est officiel : Rod Jonhson vient de poster un billet sur le blog officiel de SpringSource pour dire qu&rsquo;il ont effectué une sorte de refactoring sur <a href="http://blog.developpez.com/djo-mos?title=changement_strategie_maintenance_spring">leur nouvelle politique de maintenance annoncée il y&rsquo;a peu</a> et qui a causé, pour rester en un doux euhémisme, de violentes réactions de la communauté (genre 250 commentaires jusque là sur The Server Side).</p>
<p>Je suis encore en train de lire (et relire) l&rsquo;annonce, mais une chose est sûre : SpringSource est revenu sur sa décision de changer la politique de maintenance de Spring Framework, en quotant Rod Jonhson :</p>
<p><span id="more-30"></span></p>
<blockquote><p><em>We are amending our maintenance policy in the light of community feedback. We will make regular binary releases from the Spring trunk available to the community, with no 3 month window. For each version of Spring, community releases will be available while it remains the trunk or until the next version is stable.</em></p></blockquote>
<p>Ou en clair, l&rsquo;infameuse limite des trois mois n&rsquo;est plus, et des versions officielles de Spring Framework resteront toujours fournies <strong>jusqu&rsquo;à ce</strong> qu&rsquo;une nouvelle version majeure soit stabilisée et publiée.</p>
<p>Bon, pour le reste, il a aussi assuré que la licence de Spring Framework ne changerait pas ainsi qu&rsquo;ils mettront en place un ajustement de la fourchette de prix pour les petites boites de développement.</p>
<p>Moi je trouve ça courageux de pouvoir revenir sur une telle décision mais c&rsquo;est surtout bénéfique à SpringSource avant tout (peut on dire du même pour Guice ? :D) car ce qui s&rsquo;était passé ces derniers mois allait (quoi que quelques dégâts sont déjà faits) laisser des séquelles sur la user-base de Spring Framework.</p>
<p>De plus, je suis fier de voir comment une communauté peut se dresser de la sorte pour exprimer ce qu&rsquo;elle pense et aller même à changer le sort des choses. Kudos !</p>
<p>P.S. : <a href="http://blog.springsource.com/2008/10/07/a-question-of-balance-tuning-the-maintenance-policy/">L&rsquo;annonce officielle</a> en Anglais.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Changement de la stratégie de maintenance de Spring Framework</title>
		<link>https://blog.developpez.com/djo-mos/p6413/java/spring/spring-framework/changement_strategie_maintenance_spring</link>
		<comments>https://blog.developpez.com/djo-mos/p6413/java/spring/spring-framework/changement_strategie_maintenance_spring#comments</comments>
		<pubDate>Sat, 20 Sep 2008 02:54:59 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[SpringSource, anciennement Interface21, la boite derrière le très populaire Spring Framework vient d&#8217;annoncer (en fait, ça date de 2 jours, mais bon &#8230;) une nouvelle stratégie de maintenance de leur produit phare (Spring Framework) : En gros, et à partir de Septembre 2008 (nous y somme déjà), les versions de maintenance ne seront disponibles publiquement que pendant les 3 premier mois suivant la sortie du produit. Après cela, les mises à jour qui suivent ne [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>SpringSource, anciennement Interface21, la boite derrière le très populaire Spring Framework vient d&rsquo;annoncer (en fait, ça date de 2 jours, mais bon &#8230;) une nouvelle stratégie de maintenance de leur produit phare (Spring Framework) : En gros, et à partir de Septembre 2008 (nous y somme déjà), les versions de maintenance ne seront disponibles publiquement que pendant les 3 premier mois suivant la sortie du produit. Après cela, les mises à jour qui suivent ne seront disponibles que pour les client payants de SpringSource et ce pendant 3 ans &#8230;</p>
<p><span id="more-173"></span></p>
<p>La paperasse officielle (ou plutôt les octets officiels <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /> ) à propos de ceci :</p>
<p>=> <a href="http://www.springsource.com/node/558">L&rsquo;annonce</a><br />
=> <a href="http://www.springsource.com/products/enterprise/maintenancepolicy">La nouvelle politique de maintenance</a></p>
<p>Bon, la nouvelle politique dit que les bug fixes et compagnie commités après ces fameux trois premiers mois seront inclus dans la version majeure suivante de Spring &#8230;</p>
<p>Ceci a bien évidemment suscité une vive polémique (voire même un mouvement de panique) dans la communauté, comme en témoigne <a href="http://www.theserverside.com/news/thread.tss?thread_id=50727">la discussion suivante</a> sur The Server Side &#8230;<br />
Entre autre, on se posait la question judicieuse de ce que veut dire au juste version majeure &#8230;</p>
<p><a href="http://www.springsource.com/management">Marc Brewar, le Vice Président Sénior de SpringSource</a> <a href="http://www.theserverside.com/news/thread.tss?thread_id=50727#268886">est ensuite intervenu</a> pour expliquer qu&rsquo;une version est considérée majeure quand l&rsquo;un des deux premiers chiffres de la version change (Spring utilise un schéma de versionnage à 3 chiffres). Donc, pour Spring 3.0, Spring 3.1 ou Spring 4.0 sont considérés comme versions majeures. Ouf ! Ca semble un peu moins sombre tout d&rsquo;un coup &#8230;</p>
<p>Rod Jhonson <a href="http://www.theserverside.com/news/thread.tss?thread_id=50727#269378">est lui aussi intervenu</a> dans la discussion où il présenté les choses autrement (il sait bien présenter lui <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_biggrin.gif" alt=":D" class="wp-smiley" /> ) : En gros, ce changement de politique internvient car avec la multiplication du nombre de versions de Spring utilisés en production augmente, SpringSource ne peut pas continuer à les supporter tous (principalement les back-port de correctifs et fonctionnalités d&rsquo;une version plus récente à une autre plus ancienne). Or, pour des ceux utilisant Spring et qui ne veulent pas passer toujours à la dernière version de ce dernier (ce qui est normalement le cas avec les entreprises commerciales uniquement), ils peuvent continuer à disposer des correctifs sur ces anciennes version de Spring moyennant un abonnement dans leur programme payant.</p>
<p><strong>Avis personnel</strong> : Vu comme ça, c&rsquo;est pas si mauvais que ça pour la communauté Opensource utilisant Spring. Seul hic &#8230; et comme toute entreprise commerciale désirant faire des revenues (c&rsquo;est leur droit naturellement), je crains que des patchs/nouvelles fonctionnalités ne soient retenues jusqu&rsquo;à l&rsquo;écoulement de ces 3 premiers mois &#8230;<br />
Ou moins &laquo;&nbsp;théorie du complot&nbsp;&raquo;, disons qu&rsquo;un bug majeur/brêche de sécurité soit découvert après les 3 premiers mois (ce qui n&rsquo;est pas du tout invraisemblable : un brêche majeure de sécurité dans Spring MVC a été découverte plusieurs mois après sa sortie), et que la version majeure suivante n&rsquo;est pas prévue avant encore 6 mois (toujours pas si invraisemblable)&#8230; doit on vivre avec ça durant ces 6 mois ?</p>
<p>Bien que je suis profondément deçu par cette décision de SpringSource, je peux parfaitement comprendre leurs motivations : ils ont des employés à payer, ne l&rsquo;oublions pas, et c&rsquo;est leur droit de vouloir gagner de l&rsquo;argent. Ce n&rsquo;est pas moi qui travaille dans une société commerciale qui développe et vend des applications qui vais m&rsquo;en offusquer.<br />
Ce qui m&rsquo;offusque c&rsquo;est plutôt :</p>
<ul>
<li>SpringSource communique très mal la dessus &#8230; l&rsquo;annonce et le texte du changement de politique sont très brefs, vagues, sujet à plusieurs interprétations, surchargés de choses inutiles, etc. Il sauraient pu mieux communiquer cette action au lieu de la clarifier ensuite sur des forums &#8230;</li>
<li>Mais surtout les changements de politique en cours de route. Ca sape la confiance de la communauté dans le produit. Spring Framework a reçu un coup dûr avec cette dernière action, surtout dans le monde des entreprises : C&rsquo;est devenu un framework à risque, rien n&rsquo;empêcherait la licence de Spring Framework (Apache 2) de changer dans le futur par exemple &#8230;</li>
</ul>
<p>Conclusion du jour : vais commencer à étudier Guice, on ne sait jamais <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_wink.gif" alt=";)" class="wp-smiley" /></p>
<p>=> <strong>Exprimez</strong> vous dans <a href="http://www.developpez.net/forums/d617346/java/general-java/spring/changement-politique-maintenance-spring-framework/">cette <strong>discussion</strong></a> sur le <strong>forum</strong> !</p>
<p><strong>Edit</strong>: Apparamment, les bugfixes et autres seront toujours commités dans le trunk public de Spring, même après le délai des 3 premiers mois (Source : <a href="http://daniel.gredler.net/2008/09/19/springsource-killing-the-golden-goose/">commentaire de Marc Brewar sur ce blog</a>). Seulement, SpringSource ne publierait plus des releases officiels que pour ses abonnés. Mais il reste possible de récupérer la dernière version du trunk et la recompiler à la main.<br />
Seul hic, et avec la communauté Java (sur-zélé :p), ceci va causer une avalanche de versions exotiques de Spring venant d&rsquo;une multitude de sources sur le net &#8230; bonjour les dégâts &#8230; ça va chauffer pour le repository de maven</p>
<p>P.S.: Drôle de coïncidence, Peter Mularien vient de publier <a href="http://www.mularien.com/blog/2008/09/19/how-open-source-is-spring-an-analytical-investigation/">une étude sur la transparence de Spring Framework</a> &#8230;<br />
P.S. 2 : Alexis MP vient de publier <a href="http://blogs.sun.com/alexismp/entry/mod%C3%A8les_open_source_spring">un billet</a> sur ce thème.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gestion des sessions expirées dans JSF (rebelote)</title>
		<link>https://blog.developpez.com/djo-mos/p6037/java/gestion_des_sessions_expirees_dans_jsf_r</link>
		<comments>https://blog.developpez.com/djo-mos/p6037/java/gestion_des_sessions_expirees_dans_jsf_r#comments</comments>
		<pubDate>Tue, 08 Jul 2008 18:51:07 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[J&#8217;avais précédemment traité ce thème dans un autre billet, mais je dois avouer que la méthode que j&#8217;y avais présenté n&#8217;étatit pas vraiment solide ou fiable. Donc, suite à quelques recherches et expérimentations, j&#8217;ai pu mettre en place un autre filtre beaucoup plus solide qui permet d&#8217;intercepter les erreurs de sessions expirées dans JSF (qui sont plus qu&#8217;abondants avec ce dernier ) pour afficher une page personnalisée au lieu de la mooche page d&#8217;erreur par [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>J&rsquo;avais précédemment traité ce thème dans un <a href="http://blog.developpez.com/djo-mos?title=comment_gerer_le_timeout_de_la_session_d#more5018">autre billet</a>, mais je dois avouer que la méthode que j&rsquo;y avais présenté n&rsquo;étatit pas vraiment solide ou fiable.</p>
<p>Donc, suite à quelques recherches et expérimentations, j&rsquo;ai pu mettre en place un autre filtre beaucoup plus solide qui permet d&rsquo;intercepter les erreurs de sessions expirées dans JSF (qui sont plus qu&rsquo;abondants avec ce dernier <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /> ) pour afficher une page personnalisée au lieu de la mooche page d&rsquo;erreur par défaut du serveur utilisé.</p>
<p><span id="more-21"></span></p>
<p>En gros, voici une version simplifiée du filtre :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">import java.io.IOException; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
import javax.servlet.Filter; <br />
&nbsp;<br />
import javax.servlet.FilterChain; <br />
&nbsp;<br />
import javax.servlet.FilterConfig; <br />
&nbsp;<br />
import javax.servlet.ServletException; <br />
&nbsp;<br />
import javax.servlet.ServletRequest; <br />
&nbsp;<br />
import javax.servlet.ServletResponse; <br />
&nbsp;<br />
import javax.servlet.http.HttpServletRequest; <br />
&nbsp;<br />
import javax.servlet.http.HttpServletResponse; <br />
&nbsp;<br />
&nbsp;<br />
&nbsp;<br />
import org.slf4j.Logger; <br />
&nbsp;<br />
import org.slf4j.LoggerFactory; <br />
&nbsp;<br />
public class TimeoutFilter implements Filter { <br />
&nbsp; private static final Logger log = LoggerFactory <br />
&nbsp; &nbsp; &nbsp; .getLogger(&quot;webapp.timeoutFilter&quot;); <br />
&nbsp;<br />
&nbsp; private static final String TIMOUT_PAGE = &quot;timeout.html&quot;; <br />
&nbsp; private static final String LOGIN_PAGE = &quot;login.faces&quot;; &nbsp;<br />
&nbsp;<br />
&nbsp; public void init(FilterConfig filterConfig) throws ServletException { <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public void doFilter(ServletRequest request, ServletResponse response, <br />
&nbsp; &nbsp; &nbsp; FilterChain filterChain) throws IOException, ServletException { <br />
&nbsp; &nbsp; if ((request instanceof HttpServletRequest) <br />
&nbsp; &nbsp; &nbsp; &nbsp; &amp;&amp; (response instanceof HttpServletResponse)) { <br />
&nbsp; &nbsp; &nbsp; HttpServletRequest hRequest = (HttpServletRequest) request; <br />
&nbsp; &nbsp; &nbsp; HttpServletResponse hResponse = (HttpServletResponse) response; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; if (checkResource(hRequest)) { <br />
&nbsp; &nbsp; &nbsp; &nbsp; String requestPath = hRequest.getRequestURI(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; if (checkSession(hRequest)) { <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; String timeoutUrl = hRequest.getContextPath() + &quot;/&quot; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; + TIMOUT_PAGE; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; log.info(&quot;Session is invalid! redirecting to timeoutpage : {}&quot;, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TIMOUT_PAGE); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; hResponse.sendRedirect(timeoutUrl); <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return; <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp;<br />
&nbsp; &nbsp; } <br />
&nbsp; &nbsp; filterChain.doFilter(request, response); <br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; private boolean checkResource(HttpServletRequest request) { <br />
&nbsp; &nbsp; String requestPath = request.getRequestURI(); <br />
&nbsp; &nbsp; log.debug(&quot;reqPath={}&quot;, requestPath); <br />
&nbsp; &nbsp; return !(requestPath.contains(TIMOUT_PAGE) || &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; requestPath.contains(LOGIN_PAGE) || &nbsp;<br />
&nbsp; &nbsp; &nbsp; requestPath.equals(hRequest.getContextPath() + &quot;/&quot;)); <br />
&nbsp;<br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; private boolean checkSession(HttpServletRequest request) { <br />
&nbsp; &nbsp; return request.getRequestedSessionId() != null <br />
&nbsp; &nbsp; &nbsp; &nbsp; &amp;&amp; !request.isRequestedSessionIdValid(); <br />
&nbsp;<br />
&nbsp; } <br />
&nbsp;<br />
&nbsp; public void destroy() { <br />
&nbsp; } <br />
&nbsp;<br />
}</div></div>

</pre>
</blockquote>
<p>Quelques notes:</p>
<ul>
<li>J&rsquo;utilise SLF4J pour le logging</li>
<li>Je commence par vérifier s&rsquo;il s&rsquo;agit bien d&rsquo;une requête HTTP</li>
<li>Si c&rsquo;est le cas, je vérifies si la ressource demandée (request.getRequestURI()) est une ressource protégée via la méthode checkResource(). En fait, c&rsquo;est à vous de décider quelle ressource protéger. Dans cet exemple, je suppose que toute page exceptée celle du timeout, du login et la racine est protégée.</li>
<li>Je vérifies ensuite l&rsquo;état de la session en contrôlant que l&rsquo;identifiant (jsessionid) est non null, et qu&rsquo;il est valide</li>
<li>Si c&rsquo;est pas bon, alors je redérige vers la page de timeout (via request.sendRedirect)</li>
</ul>
<p>Toutefois, cette implémentation n&rsquo;est pas encore parfaite, car il peut arriver des cas où la session est valide sans que l&rsquo;utilisateur ne soit authentifié.</p>
<p>Pour résoudre ceci, j&rsquo;ajoute un autre test (après le premier) qui récupère un bean session (un managed bean JSF en fait, mais managé par Spring) pour vérifier qu&rsquo;il n&rsquo;est pas null et qu&rsquo;un champ particulier est renseigné :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">if (hRequest.getSession(false) != null) { <br />
&nbsp;<br />
&nbsp; final WebApplicationContext ac = WebApplicationContextUtils <br />
&nbsp;<br />
&nbsp; &nbsp; .getWebApplicationContext(hRequest.getSession(false).getServletContext()); <br />
&nbsp;<br />
&nbsp; if (ac == null) { <br />
&nbsp;<br />
&nbsp; &nbsp; //redériger vers la page du timeout ... <br />
&nbsp;<br />
&nbsp; } else { <br />
&nbsp;<br />
&nbsp; &nbsp; LoginCtrl loginCtrl = (LoginCtrl) ac.getBean(&quot;loginCtrl&quot;); <br />
&nbsp;<br />
&nbsp; &nbsp; if (loginCtrl == null || !loginCtrl.isLoggedIn()) { <br />
&nbsp;<br />
&nbsp; &nbsp; if (!(requestPath.contains(LOGIN_PAGE) || requestPath <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; .equals(hRequest.getContextPath() + &quot;/&quot;))) { <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; //redériger vers la page du timeout ... &nbsp; &nbsp; &nbsp; &nbsp;<br />
&nbsp;<br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; } <br />
}</div></div>

</pre>
</blockquote>
<p>Il faut juste bien vérifer de passer false à getSession : ça m&rsquo;a fait perdre quelques millions de neuronnes pour comprendre ce qui se passait car j&rsquo;avais ajouté cette innoncente instruction :</p>
<blockquote><pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">log.debug(hRequest.getSession(true);</div></div>

</pre>
</blockquote>
<p>erf &#8230;</p>
<p>Après, il est possible de peaufiner encore la chose, en ajoutant par exemple un test qui emêche un utilisateur déjà connecté de se reconnecter, i.e. d&rsquo;accèder à la page de login, chose indispensable quand on bosse avec Spring par exemple, où une manipulation pareille ne recharche pas les beans en scope session &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Prototype d&#8217;Application Client/Serveur avec Eclipse RCP et S2AP</title>
		<link>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a</link>
		<comments>https://blog.developpez.com/djo-mos/p6018/eclipse/prototype_d_application_client_serveur_a#comments</comments>
		<pubDate>Sat, 05 Jul 2008 00:54:24 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[OSGi]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[SpringSource DM Server/S2AP]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Juste pour signaler que j&#8217;ai enfin réussi à mettre en place un prototype d&#8217;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP. Le serveur et le client sont architecturés comme suit: Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit: un bundle définissant un PAO un bundle définissant l&#8217;interface d&#8217;un DAO un bundle définissant une implémentation [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Juste pour signaler que j&rsquo;ai enfin réussi à mettre en place un prototype d&rsquo;une application client/serveur full-OSGi où le server est un par tournant dans S2AP et le client est une application Eclipse RCP.</p>
<p>Le serveur et le client sont architecturés comme suit:</p>
<p><span id="more-159"></span></p>
<ul>
<li>Le serveur est un ensemble de bundles OSGi tournant sur S2AP (beta 8) composé comme suit:
<ul>
<li>un bundle définissant un PAO</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO</li>
<li>un bundle définissant une implémentation du DAO utilisant Spring JDBC, MySQL et Apache DBCP</li>
<li>un bundle exposant ce DAO pour accès distant via Hessian/Spring</li>
</ul>
</li>
<li>Le client est une application à base d&rsquo;Eclipse RCP (3.4) qui est constitué de :
<ul>
<li>un bundle définissant un PAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle définissant l&rsquo;interface d&rsquo;un DAO (exactement le même que celui deployé dans le serveur)</li>
<li>un bundle qui importe le DAO distant (toujours via Hessian/Spring) et l&rsquo;expose en tant que Service OSGi (via Spring DM)</li>
<li>un plug-in qui définit l&rsquo;aplication RCP</li>
<li>un plug-in qui ddéfinit une perspective et une vue affichant la liste des PAOs récupérés par le DAO distant tournant sur le serveur.</li>
</ul>
</li>
</ul>
<p>Ca m&rsquo;a pris 2 jours (plus précisément 2 demi-journées et 1 nuit blanche), et même si le résultat est juste un proof-of-concept, sa mise en place etait vraiment douleureuse.</p>
<p>Je compte donc faire partager cette expérience en montrant, captures, explications et sources à l&rsquo;appui, comment réaliser celà, enfin, si ça intéresse quelqu&rsquo;un <img src="https://blog.developpez.com/djo-mos/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></p>
<p>Par contre, j&rsquo;hésite encore sur le format : soit une série de billets dans ce blog, ou encore un article en bonne et due forme. Toutefois, ça risque de prendre du temps quand même &#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Intégration Spring 2.5 et JSF 1.2</title>
		<link>https://blog.developpez.com/djo-mos/p4571/java/integration_spring_2_5_et_jsf_1_2</link>
		<comments>https://blog.developpez.com/djo-mos/p4571/java/integration_spring_2_5_et_jsf_1_2#comments</comments>
		<pubDate>Fri, 23 Nov 2007 10:57:46 +0000</pubDate>
		<dc:creator><![CDATA[djo.mos]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JSF]]></category>
		<category><![CDATA[Spring]]></category>
		<category><![CDATA[Spring Framework]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour. Spring 2.5 offre enfin une nouvelle méthode d&#8217;intégration avec JSF compatible avec la version 1.2 (qui ne repose pas sur le VariableResolver, déprécié depuis JSF 1.2). Donc, avant, dans le fichiers faces-config.xml on faisait: &#60;application&#62; &#160; &#60;variable-resolver&#62; &#160; &#160; org.springframework.web.jsf.DelegatingVariableResolver &#160; &#60;/variable-resolver&#62; &#60;/application&#62; Mais maintenant, on utilise le nouveau FacesELResolver de Spring 2.5 de cette façon: &#60;application&#62; &#160; &#60;el-resolver&#62; &#160; &#160; org.springframework.web.jsf.el.SpringBeanFacesELResolver &#160; &#60;/el-resolver&#62; &#60;/application&#62; Dommage que ce ne soit pas bien documenté dans [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Bonjour.<br />
  Spring 2.5 offre enfin une nouvelle méthode d&rsquo;intégration avec JSF compatible avec la version 1.2 (qui ne repose pas sur le VariableResolver, déprécié depuis JSF 1.2).<br />
  Donc, avant, dans le fichiers faces-config.xml on faisait:</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;application&gt; <br />
&nbsp; &lt;variable-resolver&gt; <br />
&nbsp; &nbsp; org.springframework.web.jsf.DelegatingVariableResolver <br />
&nbsp; &lt;/variable-resolver&gt; <br />
&lt;/application&gt;</div></div>

</pre>
<p>Mais maintenant, on utilise le nouveau FacesELResolver de Spring 2.5 de cette façon:</p>
<pre>

<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&lt;application&gt; <br />
&nbsp; &lt;el-resolver&gt; <br />
&nbsp; &nbsp; org.springframework.web.jsf.el.SpringBeanFacesELResolver <br />
&nbsp; &lt;/el-resolver&gt; <br />
&lt;/application&gt;</div></div>

</pre>
<p>Dommage que ce ne soit pas <ins>bien</ins> documenté dans Spring 2.5, et pire encore, qu&rsquo;il y est une confusion sur le nom du resolver: <del>sur le net</del>.<ins>La seule mention à son égard est dans la page 27 du manuel de Spring 2.5, et</ins> il est nommé DelegatingFacesELResolver tandis qu&rsquo;en réalité, il est nommé SpringBeanFacesELResolver.</p>
<p>En espérant que vous trouverez ceci utile.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
