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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
pointcut traceDoServlet(HttpServletRequest req, HttpTaskTarget target) : within(toto.servlet..*) && call(* *.d*(HttpServletRequest, HttpTaskTarget)) && args(req, target);
Par contre en combinant les 2 pointcuts :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?