<?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>CADJEE Consulting &#187; JEE 6</title>
	<atom:link href="https://cadjee.fr/category/jee-6/feed/" rel="self" type="application/rss+xml" />
	<link>https://cadjee.fr</link>
	<description>Expertise Java &#38; Système d&#039;information</description>
	<lastBuildDate>Thu, 17 Dec 2015 21:37:19 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.39</generator>
	<item>
		<title>CDI : Context Dependency Injection, mise en route (Partie 1)</title>
		<link>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/</link>
		<comments>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/#comments</comments>
		<pubDate>Mon, 30 Mar 2015 09:33:20 +0000</pubDate>
		<dc:creator><![CDATA[Ismael CADJEE]]></dc:creator>
				<category><![CDATA[CDI]]></category>
		<category><![CDATA[Injection]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[JEE 6]]></category>

		<guid isPermaLink="false">http://cadjee.fr/?p=100</guid>
		<description><![CDATA[Avec l&#8217;arrivée de Java 6, la JDK s&#8217;équipe enfin de l&#8217;injection de dépendance. Cette notion et souplesse introduite par Spring est prête à être utilisée pleinement dans nos applications. Encore faut-il mettre en route la machine par une conf simplissime et choisir l&#8217;implémentation de la JSR 299.  Côté implémentation, WELD est l&#8217;implémentation de référence, pour la conf [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Avec l&rsquo;arrivée de Java 6, la JDK s&rsquo;équipe enfin de l&rsquo;injection de dépendance. Cette notion et souplesse introduite par Spring est prête à être utilisée pleinement dans nos applications. Encore faut-il mettre en route la machine par une conf simplissime et choisir l&rsquo;implémentation de la JSR 299.  Côté implémentation, WELD est l&rsquo;implémentation de référence, pour la conf un simple fichier bean.xml (même vide) suffira.  Allons-y.</p>
<p><span id="more-100"></span><br />
<span style="text-decoration: underline;"><strong>Commencons par le commencement: Dépendance Maven</strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;dependency&gt;
  &lt;groupId&gt;org.jboss.weld.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;weld-servlet-core&lt;/artifactId&gt;
  &lt;version&gt;2.2.8.Final&lt;/version&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
   &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
   &lt;artifactId&gt;javax.servlet-api&lt;/artifactId&gt;
   &lt;version&gt;3.0.1&lt;/version&gt;
   &lt;scope&gt;provided&lt;/scope&gt;
&lt;/dependency&gt;
&lt;dependency&gt;
  &lt;groupId&gt;javax.servlet&lt;/groupId&gt;
  &lt;artifactId&gt;jstl&lt;/artifactId&gt;
  &lt;version&gt;1.2&lt;/version&gt;
&lt;/dependency&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>Classes Java de la couche Service et Buisness</strong></span></p>
<p>Ces classes feront une simple opération d&rsquo;addition entre 2 valeurs.</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;

public interface ICalcul {
	public int addition(int a,int b);
}
 </pre>
<p>Ci dessous une implémentation de l&rsquo;interface ICalcul. L&rsquo;annotation @Default et @Any  est ici facultative car nous avons qu&rsquo;une seule implémentation possible.  Ces annotations s&rsquo;appellent un Qualifer.  La spécification de la JSR 299 propose des qualifers par défauts : @Default, @Any, @Named, @New.  Ils permettent à CDI de savoir quelle implémentation injecter. Dans le cas où rien n&rsquo;est précisé, 2 annotations sont implicitement ajoutées par CDI : @Default et @Any. Comme je vous l&rsquo;ai dit, dans notre cas nous n&rsquo;en avons qu&rsquo;une seule donc aucune ambiguïté à ce niveau. Nous reviendrons plus tard sur ces notions de Qualifier dans un autre billet.  Retenez juste qu&rsquo;une implémentation injectable aura par défaut 2 types de Qualifer et ce, même si le développeur ne le précise pas : default et any !</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;
import javax.enterprise.inject.Default;

@Default
@Any
public class CalculBuisness implements ICalcul {

	public int addition(int a,int b){
		return a+b;
	}
}
 </pre>
<p>Notons la première présence de l&rsquo;annotation @Inject sur l&rsquo;attribut de classe. Par cette simple annotation la classe CalculBuisness est automatiquement injectée grâce au qualifier @Default.  L&rsquo;avantage considérable est ici de découpler le code d&rsquo;une implémentation particulière. On aurait pu écrire aussi @Inject @Default private ICalcul calculBuisness ou @Inject @Default  @Any private ICalcul calculBuisness.</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;
import javax.inject.Inject;

public class CalculeService {

	@Inject
	private ICalcul calculBuisness;

	public int addition(String  a,String  b){
		return calculBuisness.addition(Integer.parseInt(a), Integer.parseInt(b));
	}
}
 </pre>
<p><span style="text-decoration: underline;"><strong>La servlet </strong></span></p>
<p>Même principe que précédemment on injecte par annotation la classe CalculeService. L&rsquo;injection doit se faire de bout en bout c.à.d de la Servlet jusqu&rsquo;à la dernière classe appelée ( classe buisness).</p>
<pre class="brush: java; title: ; notranslate">
package fr.cdi.servlet;

import java.io.IOException;
import javax.inject.Inject;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet(value=&quot;/addition&quot;, name=&quot;servletCDI&quot;)
public class ServletCDI extends GenericServlet{

	@Inject
	private CalculeService calculeService;

	@Override
	public void service(ServletRequest req, ServletResponse res)
			throws ServletException, IOException {

		String val1 = req.getParameter(&quot;val1&quot;);
		String val2 = req.getParameter(&quot;val2&quot;);
		int resultat = calculeService.addition(val1, val2);
		req.setAttribute(&quot;resultat&quot;, resultat);
	req.getRequestDispatcher(&quot;/WEB-INF/index.jsp&quot;).forward(req, res);
	}
}
 </pre>
<p><span style="text-decoration: underline;"><strong>Le web.xml</strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;!DOCTYPE web-app PUBLIC
 &quot;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&quot;
 &quot;http://java.sun.com/dtd/web-app_2_3.dtd&quot; &gt;

&lt;web-app&gt;

  &lt;display-name&gt;Archetype Created Web Application&lt;/display-name&gt;
    &lt;resource-env-ref&gt;
    &lt;resource-env-ref-name&gt;BeanManager&lt;/resource-env-ref-name&gt;
    &lt;resource-env-ref-type&gt;javax.enterprise.inject.spi.BeanManager&lt;/resource-env-ref-type&gt;
  &lt;/resource-env-ref&gt;
&lt;/web-app&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>Enfin le fameux fichier bean.xml</strong></span></p>
<p>Ce fichier est presque vide est doit être au même niveau que le web.xml (WEB-INF). Le bean.xml permet de préciser au serveur web ou application qu&rsquo;une injection par CDI est à prévoir. Le serveur va donc scanner le projet à le recherche des @Inject. Tous les objets annotés seront instanciés par WELD dans un conteneur dit &laquo;&nbsp;léger&nbsp;&raquo;. Le fichier bean.xml à d&rsquo;autre utilité qu&rsquo;on verra dans un autre billet. Contentons nous du strict minimum pour le moment <img src="https://cadjee.fr/wp-includes/images/smilies/simple-smile.png" alt=":-)" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<pre class="brush: java; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;beans xmlns=&quot;http://xmlns.jcp.org/xml/ns/javaee&quot;
       xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
       xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/javaee
                           http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd&quot;
       version=&quot;1.1&quot; bean-discovery-mode=&quot;all&quot;&gt;
&lt;/beans&gt;
 </pre>
<p><span style="text-decoration: underline;"><strong>la JSP </strong></span></p>
<pre class="brush: java; title: ; notranslate">
&lt;%@ taglib uri=&quot;http://java.sun.com/jstl/core&quot; prefix=&quot;c&quot;%&gt;
&lt;html&gt;
&lt;head&gt;
&lt;body&gt;
	&lt;h1&gt;Welcome CDI tuto&lt;/h1&gt;
	&lt;c:out value=&quot;${resultat}&quot;/&gt;

&lt;/body&gt;
&lt;/head&gt;
&lt;/html&gt;
 </pre>
<p>Voici le résultat simple mais efficace.</p>
<p><a href="http://cadjee.fr/wp-content/uploads/2015/03/CDI_1.png"><img class="alignnone size-full wp-image-108" src="http://cadjee.fr/wp-content/uploads/2015/03/CDI_1.png" alt="CDI_1" width="609" height="173" /></a></p>
<p>&nbsp;</p>
<p>L&rsquo;injection n&rsquo;est plus l&rsquo;affaire d&rsquo;un spécialiste Spring. Elle est belle et bien démocratisée et facile d&rsquo;utilisation avec la JEE 6. Il serait dommage de s&rsquo;en priver n&rsquo;est-ce pas?</p>
]]></content:encoded>
			<wfw:commentRss>https://cadjee.fr/cdi-context-dependency-injection-mise-en-route-partie-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
