Trilha de auditoria em java

Boa tarde,

Pessoal, estou com um probleminha, tenho que iniciar implementação de um sistema e o mesmo possui como regra, que qualquer inserção, alteração ou exclusão deve ser registrado na base, claro que devem saber que isso se chama Trilha de auditoria. A minha pergunta é! Existe um tutorial ou algum material na Web, na qual eu possa dar início a produção da trilha de auditoria em java? Basta me apontarem o caminho.

Obrigado.
Att.
Eude Lacerda

Se você tiver usando JPA/Hibernate procure na documentação sobre Listeners/Interceptors. São os lugares ideiais pra esse tipo de lógica.

Sim,vou aplicar JPA/Hibernate.
Obrigado!
Será que teria um exemplo bem simples?

Na própria documentação do Hibernate, para explicar Interceptors, eu acho que ele usa um exemplo exatamente de auditoria. Mas colocando no google também não deve ser difícil de encontrar.

OK! Obrigado.

https://www.google.com.br/?gfe_rd=cr&ei=Ap5OVO-KCMei8wf544DQAQ#safe=off&q=hibernate+audit+interceptor

Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=

[quote]Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=[/quote]

É. Como o Hebert disse, o Envers funciona bem. Acho que inclusive nas versões mais novas ele já vem embutido no “core” do Hibernate. Sö tomaria cuidado se pra você não seria “matar formiguinha com bala de canhão”. O Envers duplica todas as tabelas que você deseja auditar e tudo mais.

Alias, minha sugestão mesmo seria você tentar fazer isso a nível de banco.

[quote=rodrigo.uchoa][quote]Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=[/quote]

É. Como o Hebert disse, o Envers funciona bem. Acho que inclusive nas versões mais novas ele já vem embutido no “core” do Hibernate. Sö tomaria cuidado se pra você não seria “matar formiguinha com bala de canhão”. O Envers duplica todas as tabelas que você deseja auditar e tudo mais.[/quote]
Na verdade ele está totalmente configurável agora. Você pode escolher quais tabelas, colunas serão salvos. Ou seja, apenas as informações que você desejar serão salvas.

Gosto dele pois você mantém o controle da auditoria que é onde está a regra de negócio.

Por mim, é apenas mais uma solução para auditoria. Espero que ele escolha o que for melhor para o sistema dele. [=

eude.lacerda,
é interessante também conversar com o cliente para ver o que ele quer de verdade.Já tive que fazer um sistema com documentos em que NADA era realmente apagado.A diferença estava do que cada user/role podia ver no sistema. A marcação de deletar apenas deixava NÃO visível aquele documento.

Hebert,

O módulo Envers é aplicável com a especificação JPA? Pois, é o que vou usar, juntamente com um provedor Hibernate.

rodrigo.uchoa,

Mas será que o sistema não ficaria dependente do SGBD que vou usar, caso no futuro, o cliente queira mudar de banco?

[quote]Hebert,

O módulo Envers é aplicável com a especificação JPA? Pois, é o que vou usar, juntamente com um provedor Hibernate. [/quote]

Responder pelo Hebert aqui :slight_smile:

Sim, dá pra usar sem problemas. É só declarar os listeners no persistence.xml.

[quote]rodrigo.uchoa,

Mas será que o sistema não ficaria dependente do SGBD que vou usar, caso no futuro, o cliente queira mudar de banco?[/quote]

Pois é, essa é uma questão que depende muito da sua realidade ai. O SGBD tem a clara vantagem que se houver intervenções diretamente no banco, a auditoria também será feita, e também é bem mais rápido. Por outro lado, você vai ser obrigado a manter código de banco também.

[quote=rodrigo.uchoa][quote]Hebert,

O módulo Envers é aplicável com a especificação JPA? Pois, é o que vou usar, juntamente com um provedor Hibernate. [/quote]

Responder pelo Hebert aqui :slight_smile:

Sim, dá pra usar sem problemas. É só declarar os listeners no persistence.xml.

[/quote]
Não precisa de listener mais. [=

A única configuração que coloquei (mas não é obrigatória) foi apenas para mudar o nome da tabela de auditoria.
<property name=“org.hibernate.envers.audit_table_suffix” value="_AUDITORIA"/>

Creio que vale a pena você dar uma olhada nele agora, tá ponta firme.

[quote=eude.lacerda]Hebert,

O módulo Envers é aplicável com a especificação JPA? Pois, é o que vou usar, juntamente com um provedor Hibernate.

rodrigo.uchoa,

Mas será que o sistema não ficaria dependente do SGBD que vou usar, caso no futuro, o cliente queira mudar de banco?[/quote]
Sim, ele é do Hibernate. [=

[quote=Hebert Coelho]Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=[/quote]

Hebert,

Como faço para fazer o envers registra todas as alterações de todas entidades numa única entidade? É isso que o líder do projeto quer.

Obrigado.

[quote=eude.lacerda][quote=Hebert Coelho]Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=[/quote]

Hebert,

Como faço para fazer o envers registra todas as alterações de todas entidades numa única entidade? É isso que o líder do projeto quer.

Obrigado.[/quote]
Não sei se é possível e para te falar a verdade, eu diria que não seria uma boa prática pois essa tabela viraria um monstro de colunas com valor null e não null, de difícil manutenção e péssima performance.

Caso você queria pesquisar mais sobre esse assunto: http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html

[quote=Hebert Coelho][quote=eude.lacerda][quote=Hebert Coelho]Opa, tudo bem?

Tive que implementar isso aqui e utilizei o módulo do Hibernate chamado de Hibenrate Envers. Ele já cria a tabela de auditoria para você e persite toda alteração lá. Você não precisará ter que implementar nada na mão. [=[/quote]

Hebert,

Como faço para fazer o envers registra todas as alterações de todas entidades numa única entidade? É isso que o líder do projeto quer.

Obrigado.[/quote]
Não sei se é possível e para te falar a verdade, eu diria que não seria uma boa prática pois essa tabela viraria um monstro de colunas com valor null e não null, de difícil manutenção e péssima performance.

Caso você queria pesquisar mais sobre esse assunto: http://docs.jboss.org/hibernate/core/4.1/devguide/en-US/html/ch15.html[/quote]

Hebert,

Acho que você não me entendeu, não será salvar todos os campos de todas as entidades, mas criar um tabela padrão onde possa, salvar: o id do registro, nome da tabela, tipo de operação realizada, campo alterado, valor antigo e novo valor. Será que é possível? Eu olhei alguns tutoriais e percebi que pode se criar uma entidade de revisão. Será que esse conceito pode ser aplicado com aquilo que estou querendo. Entendi muito bem o Hibernate Envers, será que é aplicável a minha necessidade?

Obrigado.

[quote=eude.lacerda]
Hebert,

Acho que você não me entendeu, não será salvar todos os campos de todas as entidades, mas criar um tabela padrão onde possa, salvar: o id do registro, nome da tabela, tipo de operação realizada, campo alterado, valor antigo e novo valor. Será que é possível? Eu olhei alguns tutoriais e percebi que pode se criar uma entidade de revisão. Será que esse conceito pode ser aplicado com aquilo que estou querendo. Entendi muito bem o Hibernate Envers, será que é aplicável a minha necessidade?

Obrigado.[/quote]Nesse caso não sei.

Sempre utilizei o envers com pouca customização.

Provavelmente isso não é possível com o Envers porque nem é o escopo dele. O Envers serve para auditar entidades e não operações no banco de dados. Inclusive, você pode fazer queries com o entity manager dele para buscar uma entidade em um determinado instante de tempo, montar a entidade dessa forma seria muito complexo se o Envers auditasse operações no banco em vez da entidade como um todo.

Se você realmente precisa fazer a auditoria no banco de dados, o Envers não será de muita utilidade.

1 curtida