Auditoria de Sistema Dinâmico

Bom dia!

Atualmente estou em um projeto onde tenho como requisito a implantação de um módulo de auditoria do sistema. A dificuldade é que, para este módulo de auditoria, terá um painel com a listagem das entidades do sistema, onde será possível informar se a entidade será auditada ou não. Já tentei usar o Hibernate Envers, porém não obtive sucesso, mesmo customizando os listeners e o Integrator.

Gostaria de saber se existe alguma forma de ignorar dinamicamente uma Annotation. Pensei em usar Reflection, mas não estou conseguindo encontrar uma estratégia para esta solução.

Desde já agradeço !

OBS: Só informando, este painel será para utilização da equipe de suporte da empresa!

Como assim ignorar uma annotation?

Olá Rodrigo!

Em minha tentativa com o Envers ele audita toda entidade que esteja com a anotação. Inicialmente pensei em anotar todas as entidades por padrão e através do painel desabilitar as entidades que não seriam auditadas. Por isso pensei se teria alguma fora de ignorar programaticamente a anotação nas entidades que foram configuradas. Deu pra entender?

Ex:

 @Audited
  Funcionario

 @Audited
  Cliente

Usando o Envers estas entidades já seriam auditadas, mas no painel o suporte configura que Cliente não será auditado. Ai pensei se tem alguma forma de ignorar o @Audited.

Na documentação do hibernate envers aparece um tópico que diz respeito a isso:

https://docs.jboss.org/hibernate/core/4.2/devguide/en-US/html/ch15.html#d5e4338

Você disse que já tentou mas deve estar faltando algum detalhe, a doc deles é meio superficial, mas tem que tentar seguir.

No caso criaria um Integrator customizado, que busca no banco a entidade que pode ser auditada ou não e assim ignora ou aceita a annotation @Audited.

Mas não testei aqui, é só uma idéia.

Olá andersonscherrer!

Quando usei o Integrator me orientei justamente por este link. Realmente achei bem superficial. Realizando o Debug ele passa pelo Integrator customizado quando estou levantando a aplicação. Percebi que ao montar a configuração do envers, a API internamente faz uma verificação de onde possui a anotação @Audited e já sinaliza para ser auditada (Comportamento padrão do Envers). Criei também os Listeners para os eventos, mas percebi que ele sempre vai executar o onPostInsert tanto o customizado quanto o do envers.

Agora estou vendo uma solução com o uso diretamente do hibernate, sem o intermédio do Envers.

Vlw pela ajuda!