Bonjour,
Je suis sur un projet struts qui utilise Hibernate, et j'ai un filtre chargé d'ouvrir / fermer la transaction autour de mes actions, dont voici le code :
Code:
sf = HibernateUtil.getSessionFactory();
try {
log.debug("Starting a database transaction");
sf.getCurrentSession().beginTransaction();
// Call the next filter (continue request processing)
chain.doFilter(request, response);
// Commit and cleanup
log.debug("Committing the database transaction");
sf.getCurrentSession().getTransaction().commit();
} catch (StaleObjectStateException staleEx) {
log.error("This interceptor does not implement optimistic concurrency control!");
log.error("Your application will not work until you add compensation actions!");
throw staleEx;
} catch (Throwable ex) {
ex.printStackTrace();
try {
if (sf.getCurrentSession().getTransaction().isActive()) {
log.error(ParametresMessages.getString("error.production.commit"));
sf.getCurrentSession().getTransaction().rollback();
}
} catch (Throwable rbEx) {
log.error(ParametresMessages.getString("error.production.commit"), rbEx);
}
throw new ServletException(ex);
}
Mon problème est le suivant : lorsqu'une erreur se produit lors du commit (la ligne : sf.getCurrentSession().getTransaction().commit(); ), comment afficher la pile d'erreur dans ma JSP ?
En général, si une erreur se produit dans mes actions, soit je la catche et j'affiche un message d'erreur personnalisé dans ma jsp, soit non et tomcat s'en charge en me balançant la pile d'exceptions dans ma jsp.
Par contre, ici, j'ai l'impression que la réponse est déjà renvoyée juste avant le commit, et comme Hibernate n'envoie ses requêtes que le plus tard possible (donc pile au moment du commit), la réponse est déjà partie et l'exception ne parvient pas à l'utilisateur (elle s'affiche bien dans la console, par contre).
Merci d'avance