[RESOLVIDO] Envers - redefinindo nomes de campos das tabelas _AUD

[quote=Ataxexe][quote=rfsilva][quote=rimolive]rfsilva,

Talvez com uma única entidade você não notará nenhuma diferença, mas sua aplicação não terá apenas uma entidade, certo? Fora o número de atributos que cada entidade contém.

Tente abrir o JIRA, e discuta com o engenheiros da JBoss sobre o porquê você acha necessário isso. O projeto é da comunidade, discussões serão bem-vindas desde que com bons argumentos, pois dizer que é um desejo seu é no mínimo irrelevante.

Ataxexe,

Corre o risco sim, mas qual framework não corre? :smiley: [/quote]

rimolive

O Envers JÁ faz por default a varredura em toda a classe (e em todas as classes que são entidades JPA, independente de estarem anotadas como auditoria ou não), mesmo sem necessidade. Não há motivo para acreditar que uma anotação a mais ou um atributo em anotação a mais para ser lido e compreendido vá afetar performance. Talvez o medo em perder performance seja em tentar entender que para auditoria, o nome de coluna é outro, e isso demande implementação e essa implementação demande em consumo de memória e cpu. Aí sim, veria motivo para eventualmente não terem feito. Mas, sinceramente, isso é muito pouco. Ainda estou aguardando a resposta oficial no site do Envers mas meu sentimento é que meu post lá ficará sem resposta.

De qualquer maneira agradeço a vcs pela contribuição na discussão. Infelizmente já estou buscando outras soluções. Talvez eu tenha que reinventar a roda, e escrever meu próprio mecanismo de auditoria, mas isso faz parte dos riscos que estamos correndo ao utilizar frameworks. Um tombo agora pode servir para garantir qualidade lá na frente.

Abraços!

Rodrigo
[/quote]

Vai por mim, vale muito mais a pena discutir a questão junto aos DBAs. Eu fiz isso uma vez e, quando apresentei os ganhos do Envers, não houve quem levantasse a mão pra questionar se ele se adequava ou não ao padrão de nomenclatura. A solução, no meu caso, foi usar um schema diferente para os dados de auditoria.

Se vocês não são provedores de tecnologia, não vale a pena reinventar a roda em uma solução desse porte (já vi muita empresa quebrar as pernas por causa disso). Pense nisso :wink: (Estou assumindo que são consumidores de tecnologia, desconsidere isso caso contrário)[/quote]

Ataxexe,

Onde trabalho, o “pessoal de BD” define nomes de tabelas e colunas baseadas em algumas regras. Por exemplo:

TAB01ALUN
TAB02PROF
TAB03NOTA
TAB04DISC

Onde TAB é o indicativo que trata-se de tabela, 01 indica a ordem de criação da tabela, e os 4 caracteres subsequentes indicam (ou tentam indicar) o significado da tabela (ALUNO, PROFESSOR, NOTA, DISCIPLINA

Quando entra a auditoria, as tabelas a serem criadas ficam assim:

TAB05AALU
TAB06APRO
TAB07ANOT
TAB08ADIS

Eles são muito rígidos em relação a essas regras. São irredutíveis. Vamos agora às colunas:

ALUNNCODT - ALUN - entidade da coluna (a tabela), N - number, COD - descrição, T - tabela (V = view)
ALUNDMATT - ALUN - entidade da coluna (a tabela), D - date, MAT - descrição (matrícula?), T - tabela)

Olha como fica para a auditoria, esses dois campos:

AALUNCODT - AALU - entidade da coluna (a tabela), N - number, COD - descrição, T - tabela (V = view)
AALUDMATT - AALU - entidade da coluna (a tabela), D - date, MAT - descrição (matrícula?), T - tabela)

Eu queria muito poder discutir essa regra maluca, absurda, na minha opinião, com eles. MAS não tenho força suficiente para bater de frente com o “pessoal de BD”. Essa regra é muito antiga e tem muitos sistemas encaixados nesse esquema. Está fora de cogitação insistir em manter a forma como o Envers faz hoje, para eles.

Rodrigo

[quote=rfsilva]Eu queria muito poder discutir essa regra maluca, absurda, na minha opinião, com eles. MAS não tenho força suficiente para bater de frente com o “pessoal de BD”. Essa regra é muito antiga e tem muitos sistemas encaixados nesse esquema. Está fora de cogitação insistir em manter a forma como o Envers faz hoje, para eles.

Rodrigo
[/quote]

Tava parecendo que você tinha se unido ao “time do BD”. A questão não é criar uma guerra entre as equipes e, sim, bolar a melhor solução. Vou tentar pela última vez…

O que você pode levantar é justamente isso: se você tiver que reinventar a roda por conta da nomenclatura, irá trazer um custo para o projeto (tempo pra escrever a solução traduz-se em custo), uma complexidade a mais (um componente para ser escrito), um risco a mais (um componente para ser testado rigorosamente) e uma responsabilidade a mais (um componente para ser mantido). Coloque o impacto financeiro nisso tudo e você terá uma sólida base argumentativa em cima.

Basicamente, você terá que investir tempo (e dinheiro) em:

  • Projetar a solução
  • Escrever a solução
  • Testar a solução
  • Manter a solução

[quote=rimolive][quote=rfsilva][quote=rimolive]rfsilva,

Não é uma questao de fazer uma simples varredura em metadados de classes. Já pensou em quantas tarefas são feitas internamente pelo Hibernate ao fazer um simples Session.save()? Reforço a sugestão do Ataxexe em verificar o código do Envers, pois se você acha preguiça dos desenvolvedores, com certeza você não terá preguiça de fazer, certo

Nem preciso dizer para que é necessário um prefixo/sufixo na tabela de auditoria, né?[/quote]

A tabela de auditoria, se vc quiser, pode ter um nome totalmente diferente da tabela a ser auditada, e isso via configuração de anotação (vê lá o @AuditTable). Vc pode bypassar prefixo, sufixo, e colocar PREGUICA no nome da tabela de auditoria se vc quiser, que o Envers aceita.

Eu acho que a preguiça a que me refiro está mais em não haver interesse do Hibernate na evolução do framework Envers, do que em “ah, vou fazer não”. Está mais ligada à estratégia do Hibernate em relação a esse framework doq na dificuldade em si de fazer tal feature. Sinto que o Envers está estagnado nesse momento.

Obrigado!

Rodrigo

[/quote]

Tá aí uma coisa que eu concordo contigo: O Envers estagnou. Por isso, ele foi adicionado ao Hibernate core e Hibernate Entitymanager e com isso se tornou o Hibernate ORM.

Mas ele estagnou porque eu não conheço muita gente que nem saiba da existência dele (fora a família de projetos JBoss, o próprio Hibernate tem toda uma família de frameworks), e os que conhecem falam mal. Não seria mais fácil estudar e apontar melhorias no framework do que simplesmente dizer que os engenheiros da JBoss são preguiçosos?[/quote]

rimolive
Segui a sua sugestão e alterei o próprio Envers para fazer o que eu quero. Foi relativamente simples, e não houve qualquer impacto de desempenho.

Obrigado!

Rodrigo

Chegou a abrir um JIRA na comunidade e propôs sua alteração? Seria muito bom se fizesse isso para que assim pessoas que tenham o mesmo problema que você possam utilizar essa funcionalidade.

[quote=rimolive]Chegou a abrir um JIRA na comunidade e propôs sua alteração? Seria muito bom se fizesse isso para que assim pessoas que tenham o mesmo problema que você possam utilizar essa funcionalidade.
[/quote]

Assim que obtiver resposta no forum oficial do Envers, me informando que não é possível hoje que o Envers faça o que eu faço, eu divulgo a minha solução. Por enquanto, só no aguardo.

Obrigado!

Rodrigo