Voudrais-je le beurre et l'argent du beurre ?
Suite à deux tutoriels très intéressants (http://objis.developpez.com/tutoriels/aspectj/log et http://skebir.developpez.com/tutoriels/java/aspectj/),
j'ai voulu utiliser AspectJ pour reformater des logs "archaïques" (System.out...), dans une approche "simple" : pas de Spring, pas d'annotations, juste un fichier .aj et le plugin AJDT dans Eclipse.
J'ai des méthodes de Servlet (do...) avec des try catch:
1 2 3 4 5 6 7 8
| do...() {
try {
...
}
catch (Exception e) {
System.out(...);
}
} |
Récupérer l'exception avec aspectJ, pas de problème :
1 2
| pointcut servletExceptionScope(Exception) : traceException(toto.servlet..*) && handler(Exception+) && args(exception);
before(Exception e) : servletExceptionScope(e) {logger.error(e.getMessage());} |
Oui mais voila, je veux savoir aussi qui a généré l'exception, information stockée dans la session.
Et pour récupérer la session, il faut passer par la request (request.getSession(); il y a d'autres moyens ?)
Donc, nouveau pointcut :
pointcut traceDoServlet(HttpServletRequest req, HttpTaskTarget target) : within(toto.servlet..*) && call(* *.d*(HttpServletRequest, HttpTaskTarget)) && args(req, target);
Par contre en combinant les 2 pointcuts :
before(Exception exception,HttpServletRequest req, HttpTaskTarget target) : servletExceptionScope(exception) && traceDoServlet(req, target) { ....}
l'advice ne s'applique sur aucune servlet.
J'ai l'impression de ramener des carottes (exception) avec le handler et des choux (servlet) avec le call...
Je n'ai pas trouvé le moyen (simple; si c'est complexe, il n'y a plus d'intérêt à mettre ça en place) de récupérer à la fois mon exception et ma session.
Quelqu'un aurait-il La solution ? Ou même une piste ?
Partager