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");
}
}