Auditoria

Pessoal,

Estou precisando implementar um esquema de auditoria no sistema que estou desenvolvendo.

Isso é de vital importância, pois ele só será homologado no cliente, se todas as operações de inserção, update, e até mesmo algumas leituras forem registradas devidamente, com usuário que a realizou, hora, etc…

Existe algum trabalho open source que se propoe a fazer isso, ou perto disso? Alguma extensão do hibernate, por exemplo…

Caso negativo, estava pensando em usar orientação a aspectos para fazer isso… alguma dica?

Abraços,
Rodnei Couto

1 curtida

Não vejo motivo para complicar muito isso.

Centralize a execução de SQL em um método e faça o log da operação sendo realizada usando por exemplo o Log4J.

[]'s
Marco Campêlo

Se vc está usando o pattern DAO poderá implementar sem problemas o LOG e de uma maneira personalizada.

Toda vez que vc alterar , incluir o excluir pode escrever código para gravar o log.

Se vc não pode mexer no código (por que não dá mesmo) tente fazer direto no banco usando Triggers

E se quiser seguir a última moda em Paris, use AOP! :smiley:

[]'s
Marco Campêlo

Ou, se vc nao quiser AOP, mas ainda assim quiser algo que nao seja intrusivo no seu sistema, implemente um driver JDBC que faz o logging e delega as funcoes pro driver normal. Da um pouco de trabalho, mas nao requer macumba AOPzenta em lugar nenhum, e voce pode reusar nas aplicacoes que quiser :slight_smile:

Usando Hibernate você implementa isso com umas 10 linhas de código.

Com relação ao uso do DAO, infelizmente não o estou utilizando.

Uso algo semelhante com o hibernate ( EOF, do WebObjects ). Realizo todas as operações de sql em cima de algo como a Session do hibernate. Não tenho como modificar essa session para realizar a auditoria. Uso a session padrao ao longo de toda a aplicacao, e não uma estrutura desenvolvida por mim, oq me daria o poder de acrescentar facilmente o mecanismo de log ( Foi um erro, eu sei… )

Foi um requisito imposto de ultima hora, por isso nao me preocupei em fazê-lo desde o início…

LIPE, me interessei pela sua idéia…

Acabei de descobrir que estou com um tempinho para fazer uma refactory na camada de persistencia…

Como seria isso?

OBS.: Não uso o hibernate, mas como oq eu estou usando é parecido, talvez consiga fazer algo semelhante a solucao do hibernate…

Tipo isso http://www.p6spy.com :wink:

valeuz…

Se o que está usando implementa filtros que valem para a sessão inteira, então conseguirá fazer hehe

Com o Hibernate basta criar um filtro a ser executado antes de qualquer update/insert/delete e logar isso no banco :smiley:

Se o teu sistema usa Hibernate, USEEEEEEE um Session Interceptor no 2.x (no 3.0 não sei como fica).

Já fiz isso e foi assustadoramente facil, coisa de 1 dia de trabalho e tudo tava testado e funcionando direitinho. Ele auditava qualquer modificação junto com monte de metadata (usuario, ip, bla bla).

1 curtida

Eu tô fazendo isso para controlar minhas aplicaçoes prevalentes(obviamente não é o SQL q é centralizado)!!!
E funciona beem, sem nenhuma complexidade! :thumbup:

[quote=LIPE]Se o que está usando implementa filtros que valem para a sessão inteira, então conseguirá fazer hehe

Com o Hibernate basta criar um filtro a ser executado antes de qualquer update/insert/delete e logar isso no banco :D[/quote]

Tem como vc mandar um exemplo de como isso é implementado?

cv, o que voce postou existe?
Ou deu uma ideia para ele implementar?

Ou 3º opcao, é uma das suas ironias ???

iuahAIUhUIAhIUHAiuHAIUhIUA

[]'s rapaz…

afrj…

http://www.guj.com.br/posts/list/24881.java#133551

[quote=microfilo]afrj…

http://www.guj.com.br/posts/list/24881.java#133551[/quote]

Obrigadoo =)

Cara use pattern DAO é o melhor na mminha opniao hauhau

Procurei no Google por hibernate ‘session interceptor’ e o primeira resposta foi o link para este tópico. Tem certeza de que é esse o nome da coisa?

Olá

Teoricamente AOP é uma excelente solução mas na prática, às vezes, mata o desempenho do sistema. E se eu fosse usar AOP para isto me contentaria com um Proxy dinâmico (de interface com Java ou de classe com CGLIB).

As sugestões dadas para quem usa JDBC na raça ou Hibernate foram boas. Só acrescento que sempre que alguém pensar em alguma coisa referente a monitoração de um sistema, deve lembrar que JMX é bom, funciona bem e vem dentro do Java desde o Java 5.

[]s
Luca