Monitorando tempo de execução com AspectJ

1 resposta
rafael.espiritosanto

Caros colegas,

Estou iniciando meus estudos sobre AOP e estou com a seguinte dúvida.
Fiz um aspecto para monitorar o tempo de execução de todos os métodos dentro de um determinado pacote.

package aspectos;

public aspect Monitor {
	
	long inicio;
	long fim;
	
	pointcut trace() : execution(* classes..*.*(..));

	before() : trace() {
		inicio = System.currentTimeMillis();

	}
	
	after() : trace() {
		fim = System.currentTimeMillis();
		System.out.println(	thisJoinPoint.getStaticPart().getSignature().getName() + " demorou "+ (fim-inicio));
	}	

}
package classes;

import javax.swing.JOptionPane;

public class A {


	public void teste3(){

	}

	public void teste4(){
		JOptionPane.showInputDialog("Vai parar?");

	}


}
package classes;

public class TesteApp {

	/**
	 * @param args
	 */
	public static void main(String[] args) {

		A a = new A();
		a.teste3();
		a.teste4();
	

	}	
	

}

Mas obtenho como resposta algo incoerente

Como o main pode demorar menos que teste4 se este é executado dentro da main?
Será que estou desenvolvendo o aspecto de maneira errada?

Muito obrigado,

1 Resposta

T

Não conheço suficientemente AspectJ para lhe dar a dica, mas dá a impressão que ocorre o seguinte: isso funcionaria corretamente se uma instância das variáveis “inicio” e “fim” existisse para cada método executado. Como deve haver apenas uma instância para todo o aspecto, então você acaba sempre sobreescrevendo o valor de “inicio”. Isso indica que quando o “main” termina de ser executado, o valor de “inicio” não é o capturado no início da execução do “main” e sim o último que foi capturado pelo aspecto,ou seja, ao ser executado o método “teste4”.

Criado 5 de junho de 2008
Ultima resposta 5 de jun. de 2008
Respostas 1
Participantes 2