Projets
Pages enfant
  • 3.2 Gestion des exceptions

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.
Commentaire: Migration of unmigrated content due to installation of a new plugin

...

Même dans une application muremûre, il n'est de cas pour lesquels une exception ne puisse se produire. esup-commons offre une gestion des exceptions qui évite au développeur de recevoir le message traditionnel de Tomcat :



Ou encore celui de uPortal :
esup-commons permet de remonter les exceptions de manière propre, par exemple :

Cette gestion des exceptions est une véritable aide au développeur, qui peut ainsi connaitre tout le contexte d'exécution au moment où s'est produite l'erreur :


| | |

...

On utilisera par exemple :

Bloc de code
<bean
  id="exceptionServiceFactory"
      class="org.esupportail.commons.services.exceptionHandling.CachingEmailExceptionServiceFactoryImpl"
      parent="abstractApplicationAwareBean">
  <property name="smtpService" ref="smtpService" />
  <property name="recipientEmail" value="${exceptionHandling.email}" />
  <property name="exceptionViews" >
    <map>
      <entry key="java.lang.Exception" value="go_exception" />
    </map>
  </property>
  <property name="logLevel" value="${exceptionHandling.logLevel}" />
  <property name="cacheManager" ref="cacheManager" />
</bean>

* La propriété smtpService est le service d'envois envoi des messages électroniques.

...

SimpleExceptionServiceFactoryImpl (ainsi que les classes qui en héritent) présente une vue à l'utilisateur avec le contenu de l'erreur. Cette vue peut être configurée en utilisant la propriété exceptionView du bean exceptionServiceFactory. Si cette propriété n'est pas définie, alors la vue /stylesheets/exception.jsp de esup-commons est utilisée par défaut. La vue proposée par défaut , présente des détails qui ne sont certainement pas utiles à l'utilisateur. Il convient avant de mettre en production une application de personnaliser la vue /stylesheets/exception.jsp (en la copiant dans le projet de l'application) ou bien d'en créer une autre (par exemple /stylesheets/customizedException.jsp) et d'indiquer au bean exceptionServiceFactory de l'utiliser (à l'aide de la propriété exceptionView).

...

exercice
Changer la vue des exceptions
Changer la vue des exceptions

Copier exception.jsp en exception-prod.jsp et simplifier la page pour ne garder que les informations qui vous intéressent. Configurer l'application pour utiliser cette nouvelle vue en cas d'exception.

solution

1. Création de la page exception-prod.jsp dans le répertoire webapp/stylesheets/
2. Modification du fichier exceptionHandling.xml :
Ajout d'une entrée dans la property exceptionViews.

Bloc de code
<entry key="java.lang.Exception" value="/stylesheets/exception-prod.jsp" />

3. Créer puis provoquer une exception afin de tester la redirection vers exception-prod.jsp.

Redémarrage de l'application.

...

Bloc de code
<bean id="exceptionController"
      class="org.esupportail.commons.web.controllers.ExceptionController"
      scope="session">
 </bean>

La méthode restart() de exceptionController appelle la méthode reset() de tous les beans qui implémentent l'interface Resettable.
En conséquence, tout bean (contrôleur, ...) qui doit être réinitialisé lors du redémarrage de l'application doivent doit implémenter l'interface Resettable.

exercice
Réinitialiser un contrôleur après une exception
Réinitialiser un contrôleur après une exception

Faire en sorte que, sur une exception, l'attribut value de test2Controller soit vidé.

solution

Implémenter la méthode reset dans le controller contrôler Test2Controller :

Bloc de code
/**
 * @see org.esupportail.formation.web.controllers.AbstractDomainAwareBean#reset()
 */
@Override
public void reset() {
  super.reset();
  value = null;
}

...