Bonjour,
j'utilise spring aop pour monitorer le temps d'executions de certaines de mes classes ...
Context : appli web struts/spring/hibernate (.war) sous jboss.
Tout va bien, j'utilise un regex method pointcut advisor pour monitorer uniquement les méthodes des classes répondant à certains noms de package.
Mon problème se situe lorsque je change à chaud ce nom de package. Les méthodes monitorées précédemment vont continuer à être monitorées, par contre les méthodes répondant bien à la regex sur le package et n'ayant pas été monitorées une fois ne le sont pas, ce qui me fait dire que le changement a bien été pris en compte. De plus les methodes du nouveau package sont elles aussi monitorées ce qui confirme que le changement a chaud du package a bien fonctionné.
L'objectif de ce changement a chaud de package était pour moi de ne plus voir les anciennes méthodes, ce qui n'est pas le cas ;(.
Mon hypothèse est que mon interceptor est injecté (bytecode) dans l'appel à la méthode et qu'après il ne peut donc plus disparaitre ( sauf redeploiement du war ou redémarrage de jboss).
Je donne un exemple pour être sur de me faire comprendre :
PerformanceInterceptor est mon advisor et démarre un timer, execute la méthode, arrête le timer et log le temps.
regex du package a monitorer.
com\.core\.test\.Action* -> monitore toutes les actions struts.
Je passe ma page de login, la méthode execute de ma classe LoginAction est loguée.
Je change la regex du package à chaud ( via un mbean jmx ) :
com\.core\.test\.service\.*
J'appelle une nouvelle action struts, elle n'est pas loguée. Je me délogue puis repasse par la page de login et je vois le meme log que précédemment.
Existe-t-il une solution pour que ces méthodes ne soit plus "interceptées" ?
Si quelqu'un à une piste ??? parce que je ne peux pas me permettre de redémarrer jboss dès que j'ai besoin de monitorer les perfs d'un webservice ou d'une action ....
Merci par avance.
Partager