<?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>X-plode - Blog de Mike François &#187; Java EE</title>
	<atom:link href="https://blog.developpez.com/x-plode/pcategory/java/java-ee/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/x-plode</link>
	<description></description>
	<lastBuildDate>Tue, 22 Oct 2013 09:39:47 +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>JSF 2.0 avec NetBeans 6.8 et Glassfish v3</title>
		<link>https://blog.developpez.com/x-plode/p7968/articles-dvp/jsf_2_0_avec_netbeans_6_8_et_glassfish_v</link>
		<comments>https://blog.developpez.com/x-plode/p7968/articles-dvp/jsf_2_0_avec_netbeans_6_8_et_glassfish_v#comments</comments>
		<pubDate>Thu, 20 Aug 2009 00:25:26 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Articles DVP]]></category>
		<category><![CDATA[Java EE]]></category>
		<category><![CDATA[Netbeans]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Bonjour à toutes et à tous, J&#8217;ai réalisé la traduction d&#8217;un article anglais de David Salter, auteur du livre Seam 2.x Web Development, qui nous explique l&#8217;utilisation de JSF 2 avec Facelets et les Beans. Lire l&#8217;article Bonne lecture à toutes et à tous. Et n&#8217;hésitez pas à venir réagir sur le forum.]]></description>
				<content:encoded><![CDATA[<p>Bonjour à toutes et à tous,</p>
<p>J&rsquo;ai réalisé la traduction d&rsquo;un article anglais de David Salter, auteur du livre Seam 2.x Web Development, qui nous explique l&rsquo;utilisation de JSF 2 avec Facelets et les Beans.</p>
<p><a href="http://x-plode.developpez.com/articles/jsf2.0/">Lire l&rsquo;article</a></p>
<p>Bonne lecture à toutes et à tous.</p>
<p>Et n&rsquo;hésitez pas à venir réagir sur le <a href="http://www.developpez.net/forums/d794839/java/edi-outils-java/netbeans/jsf-2-0-netbeans-6-8-glassfish-v3/">forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF 2.0 : Le brouillon final livré</title>
		<link>https://blog.developpez.com/x-plode/p7608/java/java-ee/jsf_2_0_le_brouillon_final_enfin_livre</link>
		<comments>https://blog.developpez.com/x-plode/p7608/java/java-ee/jsf_2_0_le_brouillon_final_enfin_livre#comments</comments>
		<pubDate>Sun, 17 May 2009 18:29:44 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une bonne nouvelle pour tous ceux qui comme moi attendaient désespérément pouvoir lire le brouillon final de JSF 2.0 et d&#8217;en connaître ainsi toutes les nouveautés dans les moindres détails. C&#8217;est chose faite, et déjà la communauté Java réalise des webinars pour présenter les nouveautés. Actuellement, le vote final est en cours jusqu&#8217;au 26 Mai. Une chose certaine, c&#8217;est que Java EE fait le plein de nouveautés et nous apporte ainsi un lot considérable d&#8217;annotations [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une bonne nouvelle pour tous ceux qui comme moi attendaient désespérément pouvoir lire le brouillon final de JSF 2.0 et d&rsquo;en connaître ainsi toutes les nouveautés dans les moindres détails.</p>
<p>C&rsquo;est chose faite, et déjà la communauté Java réalise des webinars pour présenter les nouveautés.<br />
Actuellement, le vote final est en cours jusqu&rsquo;au 26 Mai.</p>
<p>Une chose certaine, c&rsquo;est que Java EE fait le plein de nouveautés et nous apporte ainsi un lot considérable d&rsquo;annotations et de notions qui permettront même aux non-érudits dans la technologie de pouvoir faire leurs armes en toute simplicité.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet 3.0 et la sécurité</title>
		<link>https://blog.developpez.com/x-plode/p7583/java/java-ee/servlet_3_0_et_la_securite</link>
		<comments>https://blog.developpez.com/x-plode/p7583/java/java-ee/servlet_3_0_et_la_securite#comments</comments>
		<pubDate>Sat, 09 May 2009 14:09:38 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je viens vous présenter par un article très court, les nouvelles annotations ou l&#8217;adaptation de ces dernières aux Servlets 3.0. En 2.5, les seules déclarations admises étaient @DeclareRoles et @RunAs. D’un autre côté, @DenyAll, @PermitAll, @RolesAllowed sont seulement supportés par les EJBs. Dans la spécification des Servlet 3.0, on devrait voir apparaitre @DenyAll, @PermitAll, @RolesAllowed. @TransportProtected, une nouvelle annotation qui va indiquer si le transport est confidentiel ou non @DenyAll sera possible au niveau du [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je viens vous présenter par un article très court, les nouvelles annotations ou l&rsquo;adaptation de ces dernières aux Servlets 3.0.</p>
<p>En 2.5, les seules déclarations admises étaient @DeclareRoles et @RunAs.<br />
D’un autre côté, @DenyAll, @PermitAll, @RolesAllowed sont seulement supportés par les EJBs.<br />
Dans la spécification des Servlet 3.0, on devrait voir apparaitre @DenyAll, @PermitAll, @RolesAllowed. </p>
<p>@TransportProtected, une nouvelle annotation qui va indiquer si le transport est confidentiel ou non</p>
<p>@DenyAll sera possible au niveau du TYPE.</p>
<p>Les ressources sont peu nombreuses, mais j’ai réussi à obtenir quelques informations de ces annotations.</p>
<p>@DenyAll, @PermitAll, @RolesAllowed, @TransportProtected pourront être appliqué sur  :</p>
<p>la classe Servlet, sur l’une ses méthodes :<br />
<img src="http://x-plode.ftp-developpez.com/Images/Servlet%203.0%20Securite/Servlet3.0Securite1.png" alt="" title="" /></p>
<p><span id="more-6"></span></p>
<p>Bon allez, je vais vous exposer les quelques mises en situation de ces nouvelles notions.</p>
<p>Au niveau du Type :</p>
<p><img src="http://x-plode.ftp-developpez.com/Images/Servlet%203.0%20Securite/Servlet3.0Securite2.png" alt="" title="" /></p>
<p>Au niveau des méthodes :</p>
<p><img src="http://x-plode.ftp-developpez.com/Images/Servlet%203.0%20Securite/Servlet3.0Securite3.png" alt="" title="" /></p>
<p>Tout le monde peut accéder à la méthode GET<br />
Seuls les profils possédant le rôle d’x-plode peuvent accéder à la méthode POST<br />
Et personne ne peut avoir accès à la méthode TRACE</p>
<p>Tout aussi simplement, il nous suffit de rajouter @TransportProtected :</p>
<p><img src="http://x-plode.ftp-developpez.com/Images/Servlet%203.0%20Securite/Servlet3.0Securite4.png" alt="" title="" /></p>
<p>Voilà, rien que 4 lignes supplémentaires, et nous pouvons dire que notre servlet requière le HTTPS, mais que la méthode Get est restreinte aux utilisateurs ayant le rôle de x-plode et qu’elle n’accepte pas de transport HTTPS.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Servlet 3.0, le brouillon final disponible</title>
		<link>https://blog.developpez.com/x-plode/p7582/java/java-ee/servlet_3_0_le_brouillon_final_disponibl_1</link>
		<comments>https://blog.developpez.com/x-plode/p7582/java/java-ee/servlet_3_0_le_brouillon_final_disponibl_1#comments</comments>
		<pubDate>Sat, 09 May 2009 09:17:56 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Le très attendu brouillon final de la Servlet 3.0 est disponible sur le site officiel. Il est à noter que la version sera implémentée dans GlassFish v3 EA.]]></description>
				<content:encoded><![CDATA[<p>Le très attendu brouillon final de la Servlet 3.0 est disponible sur le site officiel.<br />
Il est à noter que la version sera implémentée dans GlassFish v3 EA.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet 3.0 part 2</title>
		<link>https://blog.developpez.com/x-plode/p7577/java/java-ee/servlet_3_0_part_2</link>
		<comments>https://blog.developpez.com/x-plode/p7577/java/java-ee/servlet_3_0_part_2#comments</comments>
		<pubDate>Thu, 07 May 2009 21:03:50 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Encore une nouveauté (et pas des moindres), les Servlets 3.0 intégreront aussi un panel d&#8217;annotations supplémentaires concernant cette fois-ci la sécurité. Ce qui inclut un prochain article que je rédigerais sur : @DeclareRoles @RunAs @DenyAll @PermitAll @RolesAllowed @TransportProtected À l&#8217;heure actuelle, le brouillon final n&#8217;est pas sorti. Une fois, publier et l&#8217;avoir étudié, je vous ferais un résumé de toutes ces nouveautés qui pourraient laisser quelques surprises.]]></description>
				<content:encoded><![CDATA[<p>Encore une nouveauté (et pas des moindres), les Servlets 3.0 intégreront aussi un panel d&rsquo;annotations supplémentaires concernant cette fois-ci la sécurité.<br />
Ce qui inclut un prochain article que je rédigerais sur :<br />
@DeclareRoles<br />
@RunAs<br />
@DenyAll<br />
@PermitAll<br />
@RolesAllowed<br />
@TransportProtected</p>
<p>À l&rsquo;heure actuelle, le brouillon final n&rsquo;est pas sorti.</p>
<p>Une fois, publier et l&rsquo;avoir étudié, je vous ferais un résumé de toutes ces nouveautés qui pourraient laisser quelques surprises.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servlet 3.0</title>
		<link>https://blog.developpez.com/x-plode/p7562/java/java-ee/servlet_3_0</link>
		<comments>https://blog.developpez.com/x-plode/p7562/java/java-ee/servlet_3_0#comments</comments>
		<pubDate>Fri, 01 May 2009 13:03:07 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Une nouveauté qui sera présenté à la JavaOne et dont le brouillon final sera livré d’ici la fin de la semaine. Des nouveautés qui permettront de facilité le développement. L’interaction avec le fichier de configuration sera moindre avec l’apparition d’annotations : @WebServlet @WebServletContextListener @ServletFilter @InitParam Pour les annotations, je vais vous donner une série d’exemple de code qui vous permettra de comprendre mieux ce que les annotations pourraient apporter et pourquoi, les servlet 3.0 sont [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Une nouveauté qui sera présenté à la JavaOne et dont le brouillon final sera livré d’ici la fin de la semaine.</p>
<p>Des nouveautés qui permettront de facilité le développement.</p>
<p>L’interaction avec le fichier de configuration sera moindre avec l’apparition d’annotations :<br />
@WebServlet<br />
@WebServletContextListener<br />
@ServletFilter<br />
@InitParam</p>
<p><span id="more-3"></span></p>
<p>Pour les annotations, je vais vous donner une série d’exemple de code qui vous permettra de comprendre mieux ce que les annotations pourraient apporter et pourquoi, les servlet 3.0 sont une série de nouveautés majeur tel que l’on connu les EJB 3.0.</p>
<p>Pour @WebServlet, il suffit de faire :</p>
<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">&nbsp;package com.developpez.x-plode.newfeatures <br />
&nbsp;<br />
import javax.servlet.annotation.InitParam; <br />
import javax.servlet.annotation.WebServlet; <br />
&nbsp;<br />
@WebServlet( <br />
&nbsp; &nbsp; name = &quot;SimpleServlet&quot;, &nbsp;<br />
&nbsp; &nbsp; urlPatterns = {&quot;/simple&quot;}, &nbsp;<br />
&nbsp; &nbsp; initParams = { <br />
&nbsp; &nbsp; &nbsp; &nbsp; @InitParam(name = &quot;param1&quot;, value = &quot;value1&quot;), <br />
&nbsp; &nbsp; &nbsp; &nbsp; @InitParam(name = &quot;param2&quot;, value = &quot;value2&quot;)} <br />
) <br />
public class SimpleServlet { <br />
&nbsp;<br />
}</div></div>
<p>Ceci reviendrait à faire :</p>
<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;servlet&gt; <br />
&nbsp; &nbsp; &lt;servlet-name&gt;SimpleServlet&lt;/servlet-name&gt; <br />
&nbsp; &nbsp; &lt;servlet-class&gt;com.developpez.x-plode.newfeatures.SimpleServlet&lt;/servlet-class&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-name&gt;param1&lt;/param-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-value&gt;value1&lt;/param-value&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;/init-param&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-name&gt;param2&lt;/param-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;param-value&gt;value2&lt;/param-value&gt; <br />
&nbsp; &nbsp; &lt;/init-param&gt; <br />
&nbsp;<br />
&lt;/servlet&gt; <br />
&nbsp;<br />
&lt;servlet-mapping&gt; <br />
&nbsp; &nbsp; &lt;url-pattern&gt;/simple&lt;/url-pattern&gt; <br />
&nbsp; &nbsp; &lt;servlet-name&gt;SimpleServlet&lt;/servlet-name&gt; <br />
&lt;/servlet-mapping&gt;</div></div>
<p>Un exemple pour @WebServletContextListener :</p>
<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">package com.developpez.x-plode.newfeatures; <br />
&nbsp;<br />
import javax.servlet.ServletContextEvent; <br />
import javax.servlet.annotation.WebServletContextListener; <br />
&nbsp;<br />
@WebServletContextListener() <br />
public class SimpleServletContextListener { <br />
&nbsp;<br />
&nbsp; &nbsp; public void contextInitialized(ServletContextEvent event){ <br />
&nbsp; &nbsp; } <br />
&nbsp; <br />
&nbsp; &nbsp; public void contextDestroyed(ServletContextEvent event){ <br />
&nbsp; &nbsp; } <br />
}</div></div>
<p>Ceci reviendrait à faire dans le web.xml :</p>
<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;web-app&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;listener&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;listener-class&gt; com.developpez.x-plode.newfeatures.SimpleServletContextListener <br />
&nbsp; &nbsp; &lt;/listener-class&gt; <br />
&nbsp; &nbsp; &lt;/listener&gt; <br />
&nbsp;<br />
&lt;/web-app&gt;</div></div>
<p>Enfin @ServletFilter,</p>
<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">package com.developpez.x-plode.newfeatures; <br />
&nbsp;<br />
import javax.servlet.annotation.InitParam; <br />
import javax.servlet.annotation.ServletFilter; <br />
&nbsp;<br />
@ServletFilter( <br />
&nbsp; &nbsp; filterName = &quot;SimpleFilter&quot;, <br />
&nbsp; &nbsp; urlPatterns = &quot;/simple&quot;, <br />
&nbsp; &nbsp; initParams = &nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; {@InitParam(name = &quot;param1&quot;, value = &quot;value1&quot;), <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;@InitParam(name = &quot;param2&quot;, value = &quot;value2&quot;)} <br />
) <br />
public class SimpleFilter { <br />
&nbsp;<br />
}</div></div>
<p>Le web.xml,</p>
<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">&lt;filter&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;filter-name&gt;SimpleFilter&lt;/filter-name&gt; <br />
&nbsp; &nbsp; &lt;filter-class&gt; com.developpez.x-plode.newfeatures.SimpleFilter&lt;/filter-class&gt; <br />
&nbsp; <br />
&nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;param-name&gt;param1&lt;/param-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;param-value&gt;value1&lt;/param-value&gt; <br />
&nbsp; &nbsp; &lt;/init-param&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;init-param&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;param-name&gt;param2&lt;/param-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;param-value&gt;value2&lt;/param-value&gt; <br />
&nbsp; &nbsp; &lt;/init-param&gt; <br />
&nbsp; <br />
&lt;/filter&gt; <br />
&nbsp;<br />
&lt;filter-mapping&gt; <br />
&nbsp; &nbsp; &lt;filter-name&gt;SimpleFilter&lt;/filter-name&gt; <br />
&nbsp; &nbsp; &lt;url-pattern&gt;/simple&lt;/url-pattern&gt; <br />
&lt;filter-mapping&gt;</div></div>
<p><strong>L’intégration des frameworks</strong></p>
<p>Le web.xml tel que nous le connaissons à l’heure actuelle :</p>
<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;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt; <br />
&lt;web-app version=&quot;2.5&quot; &nbsp;<br />
&nbsp; &nbsp; xmlns=&quot;http://java.sun.com/xml/ns/javaee&quot; &nbsp;<br />
&nbsp; &nbsp; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; &nbsp;<br />
&nbsp; &nbsp; xsi:schemaLocation=&quot;http://java.sun.com/xml/ns/javaee &nbsp;<br />
&nbsp; &nbsp; http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;servlet&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br />
&nbsp; &nbsp; &lt;/servlet&gt; <br />
&nbsp;<br />
&nbsp; &nbsp; &lt;servlet-mapping&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;servlet-name&gt;Faces Servlet&lt;/servlet-name&gt; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;url-pattern&gt;/faces/*&lt;/url-pattern&gt; <br />
&nbsp; &nbsp; &lt;/servlet-mapping&gt; <br />
&nbsp;<br />
&lt;/web-app&gt;</div></div>
<p>Le problème, ici, est qu’il n’est pas modulable. Tous la configuration à propos d’une application est inclus dans un fichier unique le web.xml. Le problème qui apparaît est que si nous souhaitons utilisé un ou plusieurs frameworks, il n’y a aucun moyen pour charger la Servlet Container pour l’usage d’un framework spécifique. La seule option que nous pourrions faire, serait d&rsquo;éditer le descripteur de déploiement.</p>
<p>Pour ce faire, les Servlets 3.0 apportent une nouveauté les web fragments.</p>
<p>Web fragments, web fragments, &#8230; Qu’est ce que c’est encore ?</p>
<p>Ok, démonstration d’une déclaration d’un web fragment</p>
<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;web-fragment&gt; <br />
&nbsp; &lt;servlet&gt; <br />
&nbsp; &nbsp; &lt;servlet-name&gt;myservlet&lt;/servlet-name&gt; <br />
&nbsp; &nbsp; &lt;servlet-class&gt;samples.MyServlet&lt;/servlet-class&gt; <br />
&nbsp; &lt;/servlet&gt; <br />
&nbsp; &lt;listener&gt; <br />
&nbsp; &nbsp; &lt;listener-class&gt;samples.MyListener&lt;/listener-class&gt; <br />
&nbsp; &lt;/listener&gt; <br />
&lt;/web-fragment&gt;</div></div>
<p>En fait, un web fragment, peut être considéré comme un web.xml à part entière.</p>
<p>Durant le démarrage de l’application, il est de la responsabilité du Container de scanner les informations trouvées dans le fichier /META-INF/web-fragment.xml.<br />
Enfin, la nouvelle API autorise la déclaration d’une servlet, de classes filtres ou de l’url de mappings de ces dernières.<br />
Par l’exemple :</p>
<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">@ServletContextListener <br />
public class MyListener { <br />
&nbsp; &nbsp; public void contextInitialized (ServletContextEvent sce) { <br />
&nbsp; &nbsp; &nbsp; &nbsp;ServletContext sc = sce.getServletContext(); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp;//Declaration d’une servlet et du mappage de servlet <br />
&nbsp; &nbsp; &nbsp; &nbsp;sc.addServlet(&quot;myServlet&quot;, &quot;Sample servlet&quot;, &quot;samples.MyServlet&quot;, null, -1); <br />
&nbsp; &nbsp; &nbsp; &nbsp;sc.addServletMapping(&quot;myServlet&quot;, new String[] {&quot;/urlpattern/*&quot;}); <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp;//Declaration du filtre et du mappage du filtre <br />
&nbsp; &nbsp; &nbsp; &nbsp;sc.addFilter(&quot;myFilter&quot;, &quot;Sample Filter&quot;, &nbsp;&quot; samples.MyFilter&quot;, null); <br />
&nbsp; &nbsp; &nbsp; &nbsp;sc.addFilterMapping(&quot;myFilter&quot;, new String[] {&quot;/urlpattern/*&quot;}, &quot;myServlet&quot;,DispatcherType.REQUEST, false); <br />
&nbsp; &nbsp; } <br />
}</div></div>
<p><strong>Les requêtes asynchrones</strong></p>
<p>Voici un petit schéma explicatif :</p>
<p><img src="http://x-plode.ftp-developpez.com/Images/Servlet%203.jpeg" alt="" title="Schéma des requêtes asynchrones :" /></p>
<p>Et par le code ?</p>
<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">package com.developpez.x-plode.newfeatures; <br />
&nbsp;<br />
import java.io.IOException; <br />
&nbsp;<br />
import javax.servlet.AsyncEvent; <br />
import javax.servlet.AsyncListener; <br />
import javax.servlet.ServletRequest; <br />
&nbsp;<br />
public class SimpleAsyncListener implements AsyncListener{ <br />
&nbsp;<br />
&nbsp; &nbsp; public void onComplete(AsyncEvent event) throws IOException { <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; public void onTimeout(AsyncEvent event) throws IOException { <br />
&nbsp; &nbsp; } <br />
}</div></div>
<p>On ajoute ainsi  le listener à la requête de l’objet :</p>
<p><code class="codecolorer text default"><span class="text">request.addAsyncListener(new SimpleAsyncListener());</span></code></p>
<p>La même chose peut être fait par les annotations Web Servlet et la Servlet Filtre par les attributs asyncSupported et asyncTimout.</p>
<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">package com.developpez.x-plode.newfeatures; <br />
&nbsp;<br />
import javax.servlet.annotation.InitParam; <br />
import javax.servlet.annotation.WebServlet; <br />
&nbsp;<br />
@WebServlet( <br />
&nbsp; &nbsp; name = &quot;SimpleServlet&quot;, &nbsp;<br />
&nbsp; &nbsp; urlPatterns = {&quot;/simple&quot;}, &nbsp;<br />
&nbsp; &nbsp; initParams = { <br />
&nbsp; &nbsp; &nbsp; &nbsp; @InitParam(name = &quot;param1&quot;, value = &quot;value1&quot;), <br />
&nbsp; &nbsp; &nbsp; &nbsp; @InitParam(name = &quot;param2&quot;, value = &quot;value2&quot;)}, <br />
&nbsp; &nbsp; asyncSupported = true, <br />
&nbsp; &nbsp; asyncTimeout = 3000 <br />
) <br />
public class SimpleServlet { <br />
&nbsp;<br />
}</div></div>
<p>Je tiens à remercier Rajiv Mordani ( responsable de la spec JSR 315 ), pour les informations qu’il m’a transmise afin de pouvoir réaliser cet article.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Java EE 6 : les Web Beans et leurs scopes</title>
		<link>https://blog.developpez.com/x-plode/p7523/java/java-ee/java_ee_6_les_scopes_des_web_beans</link>
		<comments>https://blog.developpez.com/x-plode/p7523/java/java-ee/java_ee_6_les_scopes_des_web_beans#comments</comments>
		<pubDate>Thu, 23 Apr 2009 07:14:29 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[À l’heure où l’interaction fastidieuse des couches applicatives touche à l’heure fin, je viens faire la présentation en détail des spécificités de ce nouveau bean. Dans ce second article à propos des JWB, je vais vous exposer en détail : Les scopes des Web Beans Prérequis : Avant de commencer le sujet, je vais définir les termes nécessaires. Les scopes sont mappés à un objet context et gérés par le manager Web Bean. Qu’est ce qu’un [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>À l’heure où l’interaction fastidieuse des couches applicatives touche à l’heure fin, je viens faire la présentation en détail des spécificités de ce nouveau bean.</p>
<p>Dans ce second article à propos des JWB, je vais vous exposer en détail :</p>
<p><strong><em>Les scopes des Web Beans</em></strong></p>
<p><em>Prérequis</em> :</p>
<p>Avant de commencer le sujet, je vais définir les termes nécessaires.</p>
<p>Les scopes sont mappés à un objet context et gérés par le manager Web Bean.</p>
<p><em>Qu’est ce qu’un objet context ?</em><br />
<span id="more-2"></span><br />
Un objet context détermine le cycle de vie et la visibilité des instances de tous les JWB qui possède le même scope.</p>
<p><em>Que gère le manager Web Bean ?</em></p>
<p>Il gère :</p>
<p>&#8211; La création, la destruction et gère la portée d’un context des Web Beans particulier<br />
&#8211; La résolution de portée par type API, type d’annotation binding quand ils sont injectés<br />
&#8211; La résolution de portée par type API et annotation<br />
&#8211; Resolution de portée par nom ( utilisé dans une expression EL )<br />
&#8211; Rappel de cycle de vie et l’injection automatique des autres instances Web Beans<br />
&#8211; Interception de méthode, les interceptions de callback, et les decorations<br />
&#8211; Les notifications d’évènements</p>
<p><strong>Les scopes des JWB</strong></p>
<p>Bon, rentrons dans le vif du sujet :</p>
<p>Par défaut, les JWB ont 4 scopes :<br />
@RequestScoped<br />
@ApplicationScoped<br />
@SessionScoped<br />
@ConversationScoped</p>
<p>Et 1 pseudo scope :<br />
@Dependent</p>
<p><strong>@RequestScoped</strong> :</p>
<p>Le request scope possède un context éphémère, qui est actif seulement pour une action donnée.</p>
<p>De : javax.webbeans.RequestScoped.</p>
<p>Il peut y avoir trois cas:</p>
<p>L&rsquo;appel à une Servlet :<br />
La requete du scope est actif pendant toute la durée de vie de la méthode service() d’une Servlet dans une application web.<br />
Le context de la requête est détruit à la fin de la requête de la servlet, après le retour de valeur de la méthode service().</p>
<p>L&rsquo;appel à un service web JEE :<br />
La requete du scope est actif durant l’invocation d’un service web JEE.<br />
Le context de la requete est detruite apres la complete invocation du service web.</p>
<p>L&rsquo;appel à un EJB :<br />
La requete du scope  est actif durant n&rsquo;importe quelle invocation d’une méthode distante d’un EJB, au cours de tout appel à une méthode EJB timeout et au cours d’un message délivré par n’importe quel EJB Message Driven Bean.<br />
Bien entendu, le context requête est détruit à la fin de toutes ces opérations.</p>
<p><strong>@ApplicationScoped</strong> :</p>
<p>L’application scope est identique à celui du scope request à cela prêt qu’il diffère dans la fin du context sur le scope.</p>
<p>De : javax.webbeans.ApplicationScoped</p>
<p>La requete du scope est actif pendant toute la dureté de vie de la méthode service() d’une Servlet dans une application web.</p>
<p>La requete du scope est actif durant l’invocation d’un service web JEE.<br />
Le context de la requete est détruit après la complète invocation du service web.</p>
<p>La requete du scope est actif durant n&rsquo;importe quelle invocation d’une méthode distante d’un EJB, au cours de tout appel à une méthode EJB timeout et au cours d’un message délivré par n’importe quel EJB Message Driven Bean.</p>
<p><strong>@SessionScoped</strong> :</p>
<p>De : javax.webbeans.SessionScoped</p>
<p>Le scope Request est actif pendant toute la duree de vie de la méthode service() d’une Servlet dans une application web.</p>
<p>Le context est partage entre toutes les servlets qui se produisent dans la même session de la servlet HTTP.<br />
Sa destruction est détruite quand le HTTPSession n’est plus valide ou a terminé.</p>
<p><strong>@ConversationScoped</strong> :</p>
<p>De : javax.webbeans.ConversationScoped</p>
<p>Chaque JSF possède un scope conversation par défaut. Cependant, nous avons deux cas :</p>
<p>Une requête JSF Faces, auquel cas, nous avons un context actif depuis le commencement jusqu’à se que la réponse soit complétée.</p>
<p>Une requête JSF non Faces, qui a un context actif que durant le rendu de la réponse.</p>
<p>Cette association est gérée par le Web Bean Manager.</p>
<p>Pour information, cette association est effectuée à la restauration de la vue et ne change pas durant la requête.</p>
<p>Une conversation peut avoir deux états.<br />
&#8211; Soit transient.<br />
&#8211; Soit long-running.<br />
Par défaut, c’est une conversation transient.<br />
Mais nous pouvons détermine la conversation long-running en appelant sa méthode Conversation.begin() et en la terminant par Conversation.end(). </p>
<p>Jusque-là, tout est normal. Cependant, je suis sûr qu’une question subsiste dans votre subconscient :</p>
<p>Comment le Web Bean Manager peut gérer les différentes conversations si on en détermine plus d’une,<br />
tout en sachant qu’une conversation est associée à une requête JSF ?</p>
<p>Le principe est simple : un identifiant unique est déterminé (un String).</p>
<p>Tout autant, nous pouvons définir nos propres scopes.<br />
Pour définir un type scope, nous devons :</p>
<p>&#8211; Définir une meta-annotation : @ScopeType<br />
&#8211; Avoir défini @Target({TYPE,METHOD})<br />
&#8211; Et ajouter @Retention(RUNTIME)</p>
<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">@ScopeType <br />
@Target({TYPE, METHOD}) <br />
@Retention(RUNTIME) <br />
public @interface XplodeDVPScoped {}</div></div>
<p>Comme je l’ai dit précédemment, un scope est lien à un objet context. Pour cette raison nous devrons définir le scope via notre manager.</p>
<p>Jusque-là tout va bien. Mais comment faire appel au manager ?</p>
<p>Le manager est une interface:</p>
<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">public interface Manager { <br />
&nbsp; &nbsp; public Manager addContext(Context context); <br />
&nbsp; &nbsp; ... &nbsp; &nbsp; <br />
}</div></div>
<p>Et nous lui faisons appel par:</p>
<p><code class="codecolorer text default"><span class="text">manager.addContext(new MethodContext());</span></code></p>
<p>Bon ok. Jusqu’ici, la notion est&#8230; Abstraite.</p>
<p>Le Web Bean Manager fait tout le temps appel à Manager.getInstance() durant l’instance ou une résolution de nom d’Expression Language.</p>
<p>Ainsi, pour remplir sont rôle, il fait appel à Manager.getContext() pour retrouver les objets context actif associé au scope du JWB.</p>
<p>( Pour information : <code class="codecolorer text default"><span class="text">public Context getContext(Class&lt;? extends Annotation&gt; scopeType);</span></code> )</p>
<p>Au final, comment déclarer notre scope :</p>
<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">//Par un scope défini par défaut <br />
@RequestScoped <br />
public class ProductList implements DataModel { ... } <br />
&nbsp;<br />
//Par notre scope défini précédemment <br />
@XplodeDVPScoped <br />
public class Order { <br />
&nbsp; &nbsp; ... <br />
}</div></div>
<p><strong>Le pseudo-scope : @Dependent</strong></p>
<p>De : @javax.context.Dependent</p>
<p>Le scope @Dependent est dit pseudo-scope car il diffère de comportement comparé aux autres scopes.</p>
<p>&#8211; Aucune instance du bean injecté n’est partage avec les autres points d’injection<br />
&#8211; Chaque instance du bean est limité au cycle de vie du bean, servlet ou EJB qui a été injecté.<br />
&#8211; Chaque instance du bean qui est utilisé pour évaluer une expression UEL existe uniquement pendant la durée de l’évaluation<br />
&#8211; Chaque instance du bean qui recoit une methode producer, un champ producer, une methode dsposal ou l’appel d’une méthode observer dure   uniquement pendant la durée de l’invocation.</p>
<p>Mes prochains articles sur les Web Beans porteront sur : les types de binding, les types de déploiement, les Names Web Bean, les stéréotypes&#8230;</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java EE 6 : Introduction aux Web Beans</title>
		<link>https://blog.developpez.com/x-plode/p7487/java/java-ee/java_ee_6_introduction_aux_web_beans</link>
		<comments>https://blog.developpez.com/x-plode/p7487/java/java-ee/java_ee_6_introduction_aux_web_beans#comments</comments>
		<pubDate>Tue, 14 Apr 2009 16:11:03 +0000</pubDate>
		<dc:creator><![CDATA[X-plode]]></dc:creator>
				<category><![CDATA[Java EE]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Java EE 6 Une nouveauté annoncée ( et pas des moindres) dans Java EE 6 : les Web Beans. Les Web Beans De nos jours, les EJBs 3.0 ont apporté une nouvelle notion de simplicité et d’évolution dans la programmation des modèles EJB. Dès lors, peut-on imaginer JEE sans ses EJBs ? Malgré les évolutions, les EJBs 3.0 ne résolvent pas le problème d’interopérabilité entre la couche de présentation et la couche de persistance des [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Java EE 6 </strong></p>
<p>Une nouveauté annoncée ( et pas des moindres) dans Java EE 6 : l<strong>es Web Beans</strong>.</p>
<p><strong>Les Web Beans</strong></p>
<p>De nos jours, les EJBs 3.0 ont apporté une nouvelle notion de simplicité et d’évolution dans la programmation des modèles EJB. <br />
Dès lors, peut-on imaginer JEE sans ses EJBs ?</p>
<p>Malgré les évolutions, les EJBs 3.0 ne résolvent pas le problème d’interopérabilité <br />
entre la couche de présentation et la couche de persistance des données.</p>
<p>C&rsquo;est pourquoi Sun s’est orienté sur des frameworks <br />
qui connaissent un succès grandissant ( ça rappel &#8230; Hibernate ).<br />
Ainsi, google guice et JBoss Seam ont été, une source d’inspiration importante <br />
amenant Sun a créé un nouveau bean nommé : <strong>Java Web Beans</strong>.</p>
<p><span id="more-1"></span><br />
<strong>Les Java Web Beans kesako ?</strong></p>
<p>
Un java Web Bean peut être une classe Java, un EJB session ou une classe bean singleton, <br />
une méthode producer ou une queue ou un topic JMS. </p>
<p>Les autres attributs d’un Java Web Bean sont soit:</p>
<p>Déclare explicitement dans l’implémentation de la classe,<br />
Déclare explicitement dans web-beans.xml<br />
Ou par défaut dans le Web Bean manager.</p>
<p>Attention, si le Web Bean est un EJB session, il aura une vue locale.</p>
<p>
<strong>Au final, à quoi sert un Java Web Bean?</strong></p>
<p>
Les Web Beans représentent l&rsquo;unification de deux composants JEE : les EJB 3 et Les Managed Beans de JSF.<br />
Le but des JWB :</p>
<p>Proposer un modèle de programmation à état ou contextuel compatible avec les EJBs et les managed beans.<br />
Proposer un modèle extensible.<br />
Pouvoir bénéficier de lookups (JNDI), de DI (Injection de Dépendances) et de résolution via EL.<br />
Un modèle conversationnel pour le web.<br />
Bénéficier d&rsquo;interceptors (sous partie d&rsquo;AOP)<br />
proposer un modèle événementiel.<br />
Permettre leur intégration avec JSF, JPA et les Servlets.<br />
permettre leur intégration avec la notion de profiles du futur Java EE 6</p>
<p>
<strong>Techniquement, qu&rsquo;est-ce qu’un Java Web Bean ?</strong></p>
<p>
Un <strong>Java Web Bean</strong> :</p>
<p>C’est une classe concrète, ou annotée @Decorator<br />
C’est une classe avec un constructeur sans argument, ou bien,<br />
C’est une classe avec un constructeur annoté @Initializer</p>
<p>Mais attention, un Java Web Bean ne peut pas être :</p>
<p>Un type paramétré<br />
Une classe interne non static<br />
Une classe annotée avec les annotations @Entity ou les annotations des EJBs<br />
Une classe qui implémente :<br />
Javax.servlet.Servlet<br />
Javax.servlet.Filter<br />
Javax.servlet.ServletContextListener<br />
Javax.servlet.HttpSessionListener<br />
Javax.servlet.ServletRequestListener<br />
Javax.ejb.EnterpriseBean<br />
Une classe qui hérite de javax.faces.component.UIComponent<br />
Un EJB déclare dans ejb-jar.xml<br />
Une entité JPA déclare dans orm.xml</p>
<p>Une classe qui respecte ceci est un simple Web Bean. <br />
Les éléments additionnels peuvent être définis dans un document XML, le web-beans.xml.</p>
<p>
<strong>Que peut nous apporter techniquement un Java Web Bean ?</strong></p>
<p>
Rien ne vaut des exemples pour comprendre l’une des choses les plus innovantes.</p>
<p>Voici un simple Java Web Bean :</p>
<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">public class Hello { &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;public String hello(String name){ &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;return &quot;Hello &quot;+name; &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;} &nbsp;&lt;br /&gt;<br />
}</div></div>
<p>Ici, on peut voir qu’un JWB bénéficie d&rsquo;une DI (Injection de Dépendances) et <br />
à son membre hello automatiquement injecté par le conteneur, grâce à l&rsquo;annotation @Current.</p>
<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">public class Printer { &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;@Current Hello hello; &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;public void print(String name){ &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
System.out.println(hello.hello(&quot;World&quot;)); &nbsp;&lt;br /&gt;<br />
&nbsp;&lt;br /&gt;<br />
&nbsp;} &nbsp;&lt;br /&gt;<br />
}</div></div>
<p>
<strong>Un autre exemple ?</strong></p>
<p>Une fois défini, un WebBean peut être nommé pour pouvoir y accéder depuis l&rsquo;EL par exemple:</p>
<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">@Named(&quot;products&quot;) &nbsp;&lt;br /&gt;<br />
public class ProductList implements DataModel { ... }</div></div>
<p><em>Notez l&rsquo;annotation @Named pour spécifier le nom.</em></p>
<p><code class="codecolorer text default"><span class="text">&lt;h:outputText value=&quot;#{products.total}&quot;/&gt;</span></code></p>
<p>Si le web beans est déclaré dans le web-bean.xml, on peut spécifier le Web Bean name ainsi :</p>
<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;myapp:ProductList&gt; &lt;br /&gt;<br />
&nbsp; &nbsp; &lt;Named&gt;products&lt;/Named&gt; &lt;br /&gt;<br />
&lt;/myapp:ProductList&gt;</div></div>
<p>Voici une brève présentation des web beans qui apparaîtront dans JEE 6. </p>
<p>Les prochains articles seront dédiés à chaque spéci&#64257;cité des Web Beans et les autres nouveautés de JEE 6. </p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
