Auditoria em aplicativo Web com EJB

Olá!

Quero implementar auditoria de mudança de valores campos em meu aplicativo. É um aplicativo (EAR) que usar JSF na camada WEB (WAR), esse WAR chama métodos que estão em um projeto EJB (JAR). No JAR estão minhas entidades, métodos que acessam banco de dados etc.

Queria gravar, na tabela de auditoria, a mudança que houve nos dados, juntamente com o id do usuário que efetuou a mudança. Esse ID consigo pegar no lado WEB, pois é um parametro da sessão. A única maneira que imagine de enviar esse ID para a camada EJB (já que essa faria a inclusão de dados nas tabelas de auditoria), é enviá-lo como parâmetro de todos os métodos. Isso ficaria horrível não acham?

Estava pensando em utilizar algum listener, filtro, ou interceptador. Algo que deixasse a auditoria o mais transparente possível. Descobri uma framework que parece muito legal, o Hibernate Envers, mas não descobri como passar o ID do usuário para o Envers…

Alguma idéia?

Abs!

Olá!

Não acho que você precisaria passar o usuário em todas as chamadas EJB não. Depende de como o seu “realm de segurança” foi feito. Usando JAAS, todas as informações de segurança referente ao usuário, roles e etc são passadas nas chamadas EJB automaticamente, você só teria que recuperar do outro lado usando a classe EJBContext.

QUando ao envers, para persistir essas informações personalizas como por exemplo o nome do usuário, ou qualquer outra coisa que você deseja, é só usar a interface RevisionListener. Você cria uma classe que implementa essa interface e é a partir dela que a mágica acontece. Não uso envers ha algum tempo, mas deve continuar sendo da mesma forma. Procura na documentação que você acha.