<?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>Hikage &#187; Tips</title>
	<atom:link href="https://blog.developpez.com/hikage/pcategory/java/tips/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/hikage</link>
	<description></description>
	<lastBuildDate>Mon, 23 May 2011 10:00:39 +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>Tips : Envoyer un email &#8211; Version 1</title>
		<link>https://blog.developpez.com/hikage/p6882/java/tips_envoyer_un_email_simple</link>
		<comments>https://blog.developpez.com/hikage/p6882/java/tips_envoyer_un_email_simple#comments</comments>
		<pubDate>Mon, 08 Dec 2008 06:00:00 +0000</pubDate>
		<dc:creator><![CDATA[Hikage]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring Framework]]></category>
		<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Dans des projets d&#8217;entreprises, nous sommes très rapidement confrontés à la nécessité d&#8217;envoyer un email. Que ce soit pour notifier une commande, pour envoyer un mot de passe lors de la création d&#8217;un utilisateur ou encore pour envoyer une alerte lorsqu&#8217;un problème de traitement survient. En Java, l&#8217;envoi d&#8217;email passe par l&#8217;API JavaMail. Celle-ci est très puissante, mais n&#8217;est pas des plus simple à utiliser. Mais si par chance, vous travaillez déjà avec Spring Framework [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Dans des projets d&rsquo;entreprises, nous sommes très rapidement confrontés à la nécessité d&rsquo;envoyer un email.<br />
Que ce soit pour notifier une commande, pour envoyer un mot de passe lors de la création d&rsquo;un utilisateur ou encore pour envoyer une alerte lorsqu&rsquo;un problème de traitement survient.</p>
<p>En Java, l&rsquo;envoi d&rsquo;email passe par l&rsquo;API JavaMail. Celle-ci est très puissante, mais n&rsquo;est pas des plus simple à utiliser.<br />
Mais si par chance, vous travaillez déjà avec Spring Framework dans votre projet, vous pourrez facilement envoyer des emails sans connaitre JavaMail.</p>
<p><span id="more-17"></span></p>
<p>Pour mon exemple, je vais créer un service qui aura la responsabilité d&rsquo;envoyer un email lorsqu&rsquo;une erreur surviendra.<br />
Pour cela, nous allons tout d&rsquo;abord définir le contrat du service</p>
<p><img src="http://blog.developpez.com/media/1-interface_04.png" width="558" height="276" alt="Interface du service d'email" /></p>
<p>Une fois cela fait, nous allons créer une implémentation, utilisant les classes d&rsquo;aides de Spring :</p>
<p><img src="http://blog.developpez.com/media/2-implementation.png" width="740" height="397" alt="Implémentation du service d'email" /></p>
<p>Vous pouvez voir qu&rsquo;une instance de MailSender est injectée ( Point 1 ). Cette interface fait partie du framework Spring et est est le point d&rsquo;entrée de l&rsquo;API Spring pour l&rsquo;envoie de courrier électronique. Cette interface possède deux méthodes permettant d&rsquo;envoyer un ou plusieurs messages:</p>
<p><img src="http://blog.developpez.com/media/3.mailsenderapi.png" width="621" height="476" alt="Spring MailSender " /></p>
<p>Ces messages devant être du type SimpleMailMessage, il est donc nécessaire de créer une instance de ce type ( Point 2 ).<br />
Il ne nous reste plus qu&rsquo;a remplir les informations de l&rsquo;email : adresse de destination, adresse d&rsquo;origine, le sujet et le texte ( Point 3 ).</p>
<p>La dernière étape consiste à utiliser le MailSender pour envoyer le message ( Point 4 ).</p>
<p>Il ne nous reste plus qu&rsquo;à fournir l&rsquo;implémentation du MailSender à notre service pour que le tout fonctionne.<br />
Cet étape étant purement de la configuration Spring :</p>
<p><img src="http://blog.developpez.com/media/4.configuration.png" width="609" height="227" alt="Configuration pour le service d'email" /></p>
<p>L&rsquo;implémentation utilisée est de type JavaMailSenderImpl, et donc nous retrouvons bien l&rsquo;API de base JavaMail sans avoir à connaître son utilisation directe.</p>
<p>Cela dit, cette première version n&rsquo;est pas complète. En effet, si le texte et le sujet des emails envoyés sont clairement des données dynamiques, l&rsquo;origine et la destination pourraient être externalisée dans le fichier de configuration XML.</p>
<p>De plus l&rsquo;utilisation de SimpleMailMessage ne permet pas l&rsquo;utilisation du format HTML ni même les fichiers attachés.<br />
Une version plus évoluée du service vous sera présenté dans un prochain billet.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Certification SCDJWS : Réussite !</title>
		<link>https://blog.developpez.com/hikage/p5826/java/tips/certification_scdjws_reussite</link>
		<comments>https://blog.developpez.com/hikage/p5826/java/tips/certification_scdjws_reussite#comments</comments>
		<pubDate>Wed, 04 Jun 2008 08:59:15 +0000</pubDate>
		<dc:creator><![CDATA[Hikage]]></dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Il y a quelque temps, j&#8217;avais commencé à étudier pour la certification WS de Sun, SCDJWS. Bien que celle-ci est basée sur des outils un peu désuet, les bases des WS restent les même à l&#8217;heure actuelle: WSDL, SOAP, SAAJ, etc&#8230; Bref, quand je dis quelques temps, il faut comprendre il y a presque qu&#8217;un an .. depuis lors, j&#8217;ai eu pas mal de choses sur le cotés qui m&#8217;ont empécher de finir d&#8217;étudier et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Il y a quelque temps, j&rsquo;avais commencé à étudier pour la certification WS de Sun, SCDJWS.<br />
Bien que celle-ci est basée sur des outils un peu désuet, les bases des WS restent les même à l&rsquo;heure actuelle: WSDL, SOAP, SAAJ, etc&#8230;</p>
<p><span id="more-56"></span></p>
<p>Bref, quand je dis quelques temps, il faut comprendre il y a presque qu&rsquo;un an .. depuis lors, j&rsquo;ai eu pas mal de choses sur le cotés qui m&rsquo;ont empécher de finir d&rsquo;étudier et de passer la certification. Mais il y a quelques semaines, j&rsquo;ai voulu vérifier la validité de mon voucher pour l&rsquo;examen, et il arrivait à terme sous peu.</p>
<p>Et au lieu de laisser le bon expirer dans le tiroir, j&rsquo;ai fixé une date pour l&rsquo;examen, et j&rsquo;ai tenter d&rsquo;étudier quand j&rsquo;en avais le temps histoire de ne pas arriver devant l&rsquo;examen sans avoir revu un peu la matière.</p>
<p>Cet examen à eu lieu hier, et je dois dire que je ne me sentais pas prêt du tout, vu le peu de temps que j&rsquo;ai eu au final.<br />
J&rsquo;ai finalement réussi cet examen, avec un score de 85%.</p>
<p>Pour ceux qui seraient intéressés, je me suis basé sur ces références :</p>
<p><a href="http://www.amazon.fr/J2Ee-Web-Services-Richard-Monson-Haefel/dp/0321146182/ref=sr_11_1?ie=UTF8&amp;qid=1212566128&amp;sr=11-1">J2EE WebServices</a><br />
<a href="http://java.sun.com/blueprints/guidelines/designing_webservices/">BluePrints</a><br />
<a href="http://www.xyzws.com/scdjws.do?cat=scdjws">XYZWS ( avec Mock Exam gratuit )</a></p>
<p>Bonne chance à ceux qui tenteront cette certification !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Spring et Groovy : GroovyObjectCustomizer</title>
		<link>https://blog.developpez.com/hikage/p5256/java/tips/spring_et_groovy_groovyobjectcustomizer</link>
		<comments>https://blog.developpez.com/hikage/p5256/java/tips/spring_et_groovy_groovyobjectcustomizer#comments</comments>
		<pubDate>Mon, 10 Mar 2008 18:26:15 +0000</pubDate>
		<dc:creator><![CDATA[Hikage]]></dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je suis en train de jouer avec le support Groovy de Spring, via le schéma Lang, et je suis confronté à un problème avec les GroovyObjectCustomizer. Si vous avez déjà joué avec cela, j&#8217;aimerai votre avis ! En effet j&#8217;ai ceci, basé sur l&#8217;exemple dans la doc : Un Customizer : public class MyCustom implements GroovyObjectCustomizer { public void customize(GroovyObject groovyObject) { System.out.println("Customization"); DelegatingMetaClass meta = new DelegatingMetaClass(groovyObject.getMetaClass()){ public Object invokeMethod(Object o, String s, Object [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je suis en train de jouer avec le support Groovy de Spring, via le schéma Lang, et je suis confronté à un problème avec les GroovyObjectCustomizer.</p>
<p>Si vous avez déjà joué avec cela, j&rsquo;aimerai votre avis !<br />
<span id="more-55"></span></p>
<p>En effet j&rsquo;ai ceci, basé sur l&rsquo;exemple dans la doc  :</p>
<p>Un Customizer :</p>
<blockquote>
<pre>
public class MyCustom implements GroovyObjectCustomizer {
    public void customize(GroovyObject groovyObject) {
        System.out.println("Customization");
        DelegatingMetaClass meta = new DelegatingMetaClass(groovyObject.getMetaClass()){
            public Object invokeMethod(Object o, String s, Object o1) {

                System.out.println("Invoke Method 1");
                return super.invokeMethod(o, s, o1);    
            }

            public Object invokeMethod(Object o, String s, Object[] objects) {
                System.out.println("Invoke Method 2");
                return super.invokeMethod(o, s, objects);    
            }
        }   ;

        meta.initialize();
        groovyObject.setMetaClass(meta);
    }
}
</pre>
</blockquote>
<p>Un bean groovy</p>
<blockquote>
<pre>
class MyObject implements Runnable {

    public void run() {
        print "Run !"
    }

}</pre>
</blockquote>
<p>Ce fichier de configuration :</p>
<blockquote><pre>
  &lt;lang:groovy id=&quot;test&quot; script-source=&quot;be/hikage/groovy/MyObject.groovy&quot; customizer-ref=&quot;custom&quot;/&gt;

    &lt;bean id=&quot;custom&quot; class=&quot;be.hikage.groovy.MyCustom&quot;/&gt;
</pre>
</blockquote>
<p>Et une application test </p>
<blockquote><pre>
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");

        Runnable run = (Runnable) context.getBean("test");

        run.run();
</pre>
</blockquote>
<p>En lance cela, je m&rsquo;attendais à voir un &laquo;&nbsp;Invoke Method 1&Prime; ou un &laquo;&nbsp;Invoker Method 2&Prime;, mais rien, comme si cela ne passait pas du tout par ma metaclasse.</p>
<p>Et si je caste l&rsquo;objet en GroovyObject et que j&rsquo;effectue l&rsquo;appel manuellement, la c&rsquo;est bien invoqué.</p>
<p>Avez vous déjà remarqué ce problème ?</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tips : Composant JSF et Facelets</title>
		<link>https://blog.developpez.com/hikage/p4712/java/tips/tips_composant_jsf_et_facelets</link>
		<comments>https://blog.developpez.com/hikage/p4712/java/tips/tips_composant_jsf_et_facelets#comments</comments>
		<pubDate>Fri, 21 Dec 2007 10:56:09 +0000</pubDate>
		<dc:creator><![CDATA[Hikage]]></dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Je suis nouveau sur Facelet, et je suis tombé sur un &#171;&#160;problème&#160;&#187;. Je devais créer un composant JSF, jusque la pas de soucis, j&#8217;en avais déjà fait auparavant. Je commence donc : Création du composant Création du renderer Création du Tag Ajout dans faces-config des composants Création de la taglib Bref, je déplois une page de test, et pas de bol, ca ne marche pas.. Après quelques recherches, je découvre qu&#8217;avec Facelet, le &#171;&#160;Tag&#160;&#187; n&#8217;est [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Je suis nouveau sur Facelet, et je suis tombé sur un &laquo;&nbsp;problème&nbsp;&raquo;.<br />
Je devais créer un composant JSF, jusque la pas de soucis, j&rsquo;en avais déjà fait auparavant.</p>
<p>Je commence donc :</p>
<ul>
<li>Création du composant</li>
<li>Création du renderer</li>
<li>Création du Tag</li>
<li>Ajout dans faces-config des composants</li>
<li>Création de la taglib</li>
</ul>
<p>Bref, je déplois une page de test, et pas de bol, ca ne marche pas..</p>
<p>Après quelques recherches, je découvre qu&rsquo;avec Facelet, le &laquo;&nbsp;Tag&nbsp;&raquo; n&rsquo;est pas utilisé, et donc la méthode setProperties non plus. Le problème qui en survient, est que les expressions languages sont directement passée via setValueBinding au composant, et non plus &laquo;&nbsp;traitée&nbsp;&raquo; par le Tag.</p>
<p>Il faut donc faire une vérification au niveau du composant, dans les accesseurs, pour vérifier si une ValueBinding n&rsquo;existe pas pour la propriété :</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; public String getActionName() { <br />
&nbsp;<br />
&nbsp; &nbsp; if (this.actionName != null) <br />
&nbsp; &nbsp; &nbsp; return this.actionName; <br />
&nbsp;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ValueBinding vb = this.getValueBinding(&quot;actionName&quot;); <br />
&nbsp; &nbsp; if (vb == null) <br />
&nbsp; &nbsp; &nbsp; return null; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return (String) vb.getValue(context); <br />
&nbsp; }</div></div>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
