Bom dia,
Dou suporte a uma aplicação web desenvolvida em Java, mas que possui uma tecnologia bem ultrapassada. Notei faz pouco tempo, que as funcionalidades que fazem alguma alteração no BD (ex. Inclusão de Conta Contábil) não reflete visualmente na aplicação, só conseguindo que essa informação fique visível após dar um restart nos servidores JBOSS e APACHE.
Essa informação deveria aparecer numa lista que é carregada na tela principal da aplicação, e mesmo estando correto no BD, ela não aparece para o usuário nessa lista, somente quando dou esse restart ou as vezes quando dou alguns “refreshs” dentro dessa aplicação.
Preciso solucionar esse problema, tendo em vista que o usuário não consegue ser independente dentro da aplicação por esse motivo. Preciso de uma ajuda.
Tecnologias Utilizadas:
Hibernate
Tapestry
Realmente é estranho, mas já passei por problemas semelhantes.
Infelizmente a mesma “infra” de desenvolvimento NUNCA é a mesma de produção. Na teoria o ambiente de desenvolvimento deveria ser “semelhante” ao de produção(libs, jar…etc) mas nem sempre ocorre.
Em uma empresa onde trabalhei, tinha ambiente Desenv, Homol, Prod, todos diferentes entre si, e ocorria alguns problemas em um deles, e em outro não, muitas vezes por versão de bibliotecas.
Mas o seu caso, aparentemente é simples, tenta debugar e chamar o método flush na mão!
Cara, olhei aqui e todos os facades dentro da aplicação possuem o metodo flush. Tentei colocar o metodo clear para limpar a memória e obriga-lo a fazer o select novamente, mas ainda sim não deu certo, qualquer alteração não é atualizada visualmente, desde que eu faça o restart.
Eu agora faço testes na minha máquina apontando para o ambiente de QA, já que em desenvolvimento não tenho esse tipo de problema, estou com a impressão que não seja erro dentro da aplicação e nem no código, se não o correto seria conseguir simular o mesmo erro em desenvolvimento.
o datasource fica em JBOSS_HOME/standalone/configuration/standalone.xml nas versões mais recentes do jboss e em arquivos xml separados nas versões mais antigas.
Se a funcionalidade de leitura e atualização são sistemas diferentes, ou seja, usam diferentes contextos de persistência, então acredito que esse é o comportamento esperado de um ORM. Basicamente, cada entity manager gerencia seu próprio conjunto de entidades em memória. Neste caso, a alteração reflete para o usuário que fez a atualização, mas outros contextos de persistência que estão ativos não tem como serem notificados, seu sistema não é distribuído.