AspectJ para tratamento de Exceções

Boa tarde galera,

Estou desenvolvendo uma aplicação desktop usando hibernate e SWT e estou econtrando o seguinte problema: como o sistema será implantado em ambientes diversos (por isso o hibernate para suportar várias bases de dados de forma fácil) e com várias máquinas acessando a aplicação. Isso pode gerar erros por motivos diversos nas máquinas e a idéia era gerar um log de erros da aplicação. No íncio, tentei usar o log4j, só que ele se mostrou extremamente lento na aplicação. Pode ser que eu não tenha configurado direito.

Logo, pensei em usar o AspectJ para capturar o erro…mas como eu naum entendo muito a sintaxe do aspect, eu até consegui fazer com que alguns pointcuts sejam executados antes e depois das exceptions, mas o q eu precisava mesmo era que, no momento de execução da exception, o aspecto recuperasse a Exception para que eu tivesse acesso ao printStackTrace e pudesse salvá-lo em um arquivo usando o PrintStream. Coisa simples, mas eu naum estou conseguindo pegar a exception no momento de execução.

alguém tem um exemplo de código para isso? um tratamento de pointcut que me permita acesso à Exception…

grato pelo auxílio

Problema resolvido galera…

fica aki a solução para quem está com o mesmo problema e não conseguiu com os códigos encontrados na internet (q são poucos, aliás…parece que não é muito utilizado ainda)

Eu dei uma lida nos seguinte link para entender a sintaxe da linguagem e como ela funciona:

http://www.eclipse.org/aspectj/doc/released/progguide/index.html

explicando os termos espartanos da AOP:

Join Point é qualquer processamento feito em java. Eles são identificados, basicamente, por sua assinatura. Dessa forma você consegue capturar chamadas de métodos, alterações de atributos…

PointCut é um ponto de parada usado pelo AspectJ para trabalhar com a execução de algum Join Point. Ou seja, ele contém uma descrição de todas as condições de Join Points (algo como eventos) que ocorram no processamento para que ele seja chamado. A partir de um PointCut (algo como uma interferência na execução para a execução dos interesses transversais).

Advice. Descrevem o que será feito com o PointCut e em q momento será feito. Básicamente, é uma forma diferente de escrita de um método onde vc descreve quais valores de contexto serão utilizados no advice e quando ele será executado. É aki que fica o que será feito com a parada na execução.

segue o código do advice e pointcuts. Detalhe: a respeito do motivo do tópico, o advice por eqto está recebendo em contexto a Exception. Com o seu método printStackTrace baseado em PrintStream, não é muito difícil implementar a escrita em arquivo.

//point cut que captura qualquer exceção na execução do programa, o within no final da linha especifica pacotes em que o pointcut é //ignorado
pointcut printStackTrace(): execution(* *.*(..)) /*&& !within(teste)*/;

//advice que pega a Exception no retorno da chamada do método printStackTrace dessa Exception
	after(Exception e) returning: call(* *.printStackTrace(..)) && target(e){		
		System.out.println("imprimi depois de dar o erro");
	}
}