<?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>Spring Framework &#187; Tips &amp; Tricks</title>
	<atom:link href="https://blog.developpez.com/spring/pcategory/spring-framework/tips-tricks/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/spring</link>
	<description></description>
	<lastBuildDate>Wed, 27 Oct 2010 05:28:03 +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 : Gestion des exceptions JSF avec Spring</title>
		<link>https://blog.developpez.com/spring/p5527/spring-framework/tips-tricks/tips_gestion_des_exceptions_jsf_avec_spr</link>
		<comments>https://blog.developpez.com/spring/p5527/spring-framework/tips-tricks/tips_gestion_des_exceptions_jsf_avec_spr#comments</comments>
		<pubDate>Sat, 19 Apr 2008 17:18:28 +0000</pubDate>
		<dc:creator><![CDATA[Hikage]]></dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Récemment, sur un projet JSF sur lequelle je travaille, nous avons remarqué que l&#8217;on n&#8217;est pas à l&#8217;abris d&#8217;exception lancée et non récupérée. Résultat : une belle page d&#8217;erreur, avec une stacktrace. Bon, si en développement ce n&#8217;est pas génant, ce genre de pages n&#8217;est pas fort appréciées en production. Mais comment faire pour être sur de tout gérer ? Il serait bien sur possible de faire des try / catch sur les RuntimeException dans [&#8230;]]]></description>
				<content:encoded><![CDATA[<p>Récemment, sur un projet JSF sur lequelle je travaille, nous avons remarqué que l&rsquo;on n&rsquo;est pas à l&rsquo;abris d&rsquo;exception lancée et non récupérée.<br />
Résultat : une belle page d&rsquo;erreur, avec une stacktrace. Bon, si en développement ce n&rsquo;est pas génant, ce genre de pages n&rsquo;est pas fort appréciées en production.</p>
<p>Mais comment faire pour être sur de tout gérer ?<br />
Il serait bien sur possible de faire des try / catch sur les RuntimeException dans toutes les méthodes des beans managés&#8230;<br />
<span id="more-41"></span></p>
<p>Mais, sur notre projet, nous avons la chance de travailler avec une configuration spéciale !<br />
En effet, les beans managés ne sont plus gérés directement par JSF, cette responsabilité étant déléguée à Spring.</p>
<p>Qu&rsquo;est-ce que cela change me direz vous ? Je vous répondrais : beaucoup de choses !<br />
En effet, du fait de Spring, toutes les fonctionnalités de celui-ci sont apportés au Bean managé : IoC, Déclaration par annotation, et &#8230; AOP !</p>
<p>Afin d&rsquo;être sur de traité tout les exceptions correctement, il suffit de créer un aspect, qui entourera tout les appels aux méthodes publiques.<br />
Si une exception est lancée, alors l&rsquo;aspect pourra la récupérée, et voir ce qu&rsquo;elle doit en faire selon son type.</p>
<p>Voici un exemple de cet aspect : </p>
<blockquote>
<pre>
@Aspect
public class ExceptionHandler {
    private String errorOutcome = "exceptionPage";
    public void setErrorOutcome(String errorOutcome) {
        this.errorOutcome = errorOutcome;
    }

    @Pointcut("execution(* be.hikage.managed..* (..))")
    public void publicMethodsInManagedBean() {
    }

    @Around("be.hikage.aop.ExceptionHandler.publicMethodsInManagedBean() ")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {

        try {
            Object retVal = pjp.proceed();
            return retVal;
        } catch (Throwable throwable) {
            if (throwable instanceof DirectException) {
                throw throwable;
            } else {
                // Ajout de l'exception dans les attributs de la requête
                FacesContext context = FacesContext.getCurrentInstance();
                NavigationHandler navigation = context.getApplication().getNavigationHandler();
                context.getExternalContext().getRequestMap().put("exception", throwable);
                // Redirection vers la page des erreurs
                navigation.handleNavigation(context, "", errorOutcome);


            }
        }

        return null;
    }
}

</pre>
</blockquote>
<p>Cet aspect va être exécuté pour toutes les méthodes publiques des beans managés.<br />
Si une exception est lancée par la méthode, alors une vérification est faites. Si c&rsquo;est une exception de type DirectException ( une classe spécifique à mon application ), alors il suffit de la relancée pour que le traitement se fasse ( appel d&rsquo;un bean par un autre bean par exemple ).</p>
<p>Sinon c&rsquo;est une exception de type Runtime ( NullPointerExeption par exemple ), alors au lieu d&rsquo;affiche une jolie stacktrace, l&rsquo;utilisateur sera redirigé vers une page de gestion d&rsquo;erreur ( défini par l&rsquo;outcome &laquo;&nbsp;exceptionPage&nbsp;&raquo; ) en ajoutant dans la requête l&rsquo;exception originale.</p>
<p>Résultat, lorsqu&rsquo;une erreur n&rsquo;est pas traitée correctement, une page d&rsquo;erreur avec le design du site sera affichée <img src="https://blog.developpez.com/spring/wp-includes/images/smilies/icon_smile.gif" alt=":-)" class="wp-smiley" /><br />
Ce qui fait quand meme plus professionnel !</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
