Solução elegante para tratamento de exceções

12 respostas
R

Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

12 Respostas

jeanmalvessi

O Log4J não serve ?

kicolobo

Aspectos são a solução mais interessante para este tipo de problema.
No caso do Spring, há um tipo de advice/aspecto que se chama “after throw”. Basta você o colocar apontando para todos os beans do seu sistema.

Precisando de ajuda, to ai pra te ajudar (tava escrevendo sobre isto ontem!)

rmendes08

raf4ever:
Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

Fazer isso para TODAS as exceções não seria um exagero ? Eu pergunto isso, porque você poderia, por exemplo, escrever um tratador específico em um Interceptor para EJB, ou em um Filter para os Servlets. Mas aí não funcionaria para casos em que a exceção é lançada e capturarada.

kicolobo

rmendes08:
raf4ever:
Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

Fazer isso para TODAS as exceções não seria um exagero ? Eu pergunto isso, porque você poderia, por exemplo, escrever um tratador específico em um Interceptor para EJB, ou em um Filter para os Servlets. Mas aí não funcionaria para casos em que a exceção é lançada e capturarada.

Oi rmendes, no caso é uma solução interessante para logs. Tem de saber como você vai implementar o seu aspecto. Sò pra lembrar, a classe que terá de tratar a excessão não sabe que há um aspecto por trás dos panos e, com isto, ela acaba tendo de tratar a excessão nos casos em que é necessário.

O interessante neste caso é, na implementação do aspecto, você saber filtrar bem qual tipo de problema lidar.

FernandoFranzini

raf4ever:
Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

Tudo depende aonde e o que vc ja ta usando…segue algumas opções:

  1. Criar exception pai que envia email na criação de objetos.
  2. no web.xml tratar um pagina que envia email.
  3. se tiver usando ejb = interceptor (tipo de AOP).
  4. se tiver no spring…AOP.
  5. simples dinamic proxy simples…
    e por ai vai…
R

Realmente é um exagero,mas o lance é que o sistema tá em produção e tá faltando tempo pra filtrar melhor as exceções que eu
quero pegar.

R

Assim?

<error-page>
        <exception-type>java.lang.Exception</exception-type>
        <location>/servlet/ErrorDisplay</location>
    </error-page>
FernandoFranzini

Sim…vc redireciona para uma pagina que automaticamente o envio de email…

kdoigor

raf4ever:
Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

tenho um amigo que fez isso com log4j e a implementação é simples e ficou muito bom.
aspectos se for só pra isso acho que seria usar bazuca pra matar mosquito.

P

Use o Log4J, se vc pegar “qualquer” tutorial dele vc vai ver que vc tem os “appenders” que são as saidas, como saidas podemos ter a console, arquivo txt, banco de dados e o email.

Inté

R

kdoigor:
raf4ever:
Caros,

como eu faria para,a cada exceção que for lançada em qualquer trecho do código,um email seja lançado?Com aspectos resolve?

Alguém ja fez isso?

tenho um amigo que fez isso com log4j e a implementação é simples e ficou muito bom.
aspectos se for só pra isso acho que seria usar bazuca pra matar mosquito.

Realmente vc tem razão,aspectos só pra isso é overkill.

Vou tentar colocar no web.xml pra redirecionar pra pagina de envio de email.

Obg!!!

Andre_Fonseca

oi,

sua aplicação tem logs? não seria mais fácil você fazer um shell script que faz alguns greps no log e depois chama direto o comando mail passando parametros?

talvez você não precise alterar o código da sua aplicação.

abs

Criado 14 de setembro de 2012
Ultima resposta 14 de set. de 2012
Respostas 12
Participantes 8