Boa tarde,
Estou tentando auditar as minhas entidades e me deparei com um problema.
Utilizo o VRaptor 3.4.0 e com ele fiz um interceptador[1] para as minhas requisições
capturar um cabeçalho especifico e definir em um ThreadLocal[2] o nome do usuário
na aplicação.
Tenho um “listener”[3] do Hibernate para interceptar as iterações com as minhas
entidades.
O meu problema é quando eu tenho requisições simultâneas de vários usuários e acesso
a ThreadLocal no “listener” do Hibernate o nome do usuário varia entre os já definidos
na ThreadLocal.
Fiz uma depuração na aplicação que exibe na saída do arquivo de log os valores de
Thread.currentThread().getId() e AuditThreadLocal.get() na classe que intercepta a
requisação[1] e no repositório[4] onde eu insiro o registro na base
de dados.
Esta sendo registrado no arquivo de log de origem do interceptador de requisições
o Thread.currentThread().getId() com o mesmo número duas vezes para usuários
diferentes e não executando o repositório nesse intervalo.
A alguma restrições em utilizar um TheadLocal com essa estrutura sitada juntamente
com o VRaptor?
Se alguém souber de uma propriedade, classe ou projeto que eu possa fazer esse trabalho
será de grande ajuda.
[1] - http://pastebin.com/JJ5sLGfr
[2] - http://pastebin.com/dc8tuqcC
[3] - http://pastebin.com/2nWv0caF
[4] - http://pastebin.com/Qn4Wvnzn
Obrigado,
Nycholas de Oliveira e Oliveira.