Hibernate não atualiza os dados no Banco de Dados MySQL que deram entrada no web service.
Caros.
Montei um sistema para acompanhamento de vendas/desempenho de mercados de varejo (minimercados, supermercados, lojas de varejo) via web que tem a seguinte estrutura de funcionamento:
- A loja gera um cupom(arquivo texto) com todas as informações das vendas logo após a emissão da NFc-e;
- O cupom é transferido por meio de um Web Service SOAP (Compilado em Delphi) que fica em um servidor web IIS e que grava as informações em um Banco de Dados MySQL;
- Em um servidor de aplicação Tomcat eu rodo o sistema client(JSF + Hibernate + Primefaces) onde o usuário tem acesso através de um usuário e senha para acompanhamento da movimentação da loja e que acessa o mesmo Banco de Dados MySQL;
- Ambas aplicações funcionam corretamente. A aplicação Delphi envia os cupons e os gravam sem problemas e com perfeita consistência. A aplicação Web também funciona corretamente a partir do momento em que o usuário a acessa.
O PROBLEMA:
A partir do momento em que o usuário acessa a aplicação web toda a movimentação da loja (cupons) que está sendo enviada pelo Web Service, não é visualizada na aplicação web. A informação só é visualizada a partir do momento em que dou um "reload" da aplicação client no TOMCAT.
Como utilizo o Hibernate, sei que este framework trabalha vinculado a uma Session que por sua vez acessa o cache com as informações "fotografadas" do Banco de Dados do objeto em questão.
A partir do momento em que uma nova informação é adicionada ao objeto o Hibernate atualiza este cache e as mesmas ficam disponibilizadas.
Apesar de utilizar o método "evict()" ou "clear()" na Session não consigo de forma alguma acessar as informações que estão dando entrada através do Web Service. Para acessá-las eu tenho que dar um "reload" na aplicação client no Tomcat....
Outra coisa. Qualquer informação incluída, modificada ou excluída através da aplicação client WEB é prontamente acessada pela mesma aplicação mesmo que seja executada por outro usuário ou em outro computador.
Resumindo. Toda informação inserida pelo Web Service, a partir do momento em que eu acesso o sistema client WEB, não é "enxergada" pelo mesmo. Porém toda informação inserida pelo sistema client WEB a qualquer momento é acessada pelo sistema WEB.
Como podem ver meus caros acho que meu problema é conceitual.....Alguma dica???
Montei um sistema para acompanhamento de vendas/desempenho de mercados de varejo (minimercados, supermercados, lojas de varejo) via web que tem a seguinte estrutura de funcionamento:
- A loja gera um cupom(arquivo texto) com todas as informações das vendas logo após a emissão da NFc-e;
- O cupom é transferido por meio de um Web Service SOAP (Compilado em Delphi) que fica em um servidor web IIS e que grava as informações em um Banco de Dados MySQL;
- Em um servidor de aplicação Tomcat eu rodo o sistema client(JSF + Hibernate + Primefaces) onde o usuário tem acesso através de um usuário e senha para acompanhamento da movimentação da loja e que acessa o mesmo Banco de Dados MySQL;
- Ambas aplicações funcionam corretamente. A aplicação Delphi envia os cupons e os gravam sem problemas e com perfeita consistência. A aplicação Web também funciona corretamente a partir do momento em que o usuário a acessa.
O PROBLEMA:
A partir do momento em que o usuário acessa a aplicação web toda a movimentação da loja (cupons) que está sendo enviada pelo Web Service, não é visualizada na aplicação web. A informação só é visualizada a partir do momento em que dou um "reload" da aplicação client no TOMCAT.
Como utilizo o Hibernate, sei que este framework trabalha vinculado a uma Session que por sua vez acessa o cache com as informações "fotografadas" do Banco de Dados do objeto em questão.
A partir do momento em que uma nova informação é adicionada ao objeto o Hibernate atualiza este cache e as mesmas ficam disponibilizadas.
Apesar de utilizar o método "evict()" ou "clear()" na Session não consigo de forma alguma acessar as informações que estão dando entrada através do Web Service. Para acessá-las eu tenho que dar um "reload" na aplicação client no Tomcat....
Outra coisa. Qualquer informação incluída, modificada ou excluída através da aplicação client WEB é prontamente acessada pela mesma aplicação mesmo que seja executada por outro usuário ou em outro computador.
Resumindo. Toda informação inserida pelo Web Service, a partir do momento em que eu acesso o sistema client WEB, não é "enxergada" pelo mesmo. Porém toda informação inserida pelo sistema client WEB a qualquer momento é acessada pelo sistema WEB.
Como podem ver meus caros acho que meu problema é conceitual.....Alguma dica???
Sergio Peixoto
Curtidas 0
Respostas
Sergio Peixoto
18/03/2019
...alguma dica ???? :(
GOSTEI 0
Sergio Peixoto
18/03/2019
Caros.
Apesar de não receber qualquer sugestão por parte deste fórum, consegui solucionar de uma forma, digamos, muito “tosca”, o meu problema.
Inseri uma “Transaction” na sessão e finalizo dando um COMMIT mesmo que não tenha nada pra gravar…
Dando este COMMIT com certeza estou "matando" o cache e buscando uma nova "Fetch" no Bando de Dados.
E desta forma consegui manter atualizada as pesquisas de acordo com o que o Web Service atualiza o Banco de Dados…
Mais tarde pensarei em uma forma mais “elegante” para solucionar o problema de vez.
Grato pela atenção de todos.
Apesar de não receber qualquer sugestão por parte deste fórum, consegui solucionar de uma forma, digamos, muito “tosca”, o meu problema.
Inseri uma “Transaction” na sessão e finalizo dando um COMMIT mesmo que não tenha nada pra gravar…
Dando este COMMIT com certeza estou "matando" o cache e buscando uma nova "Fetch" no Bando de Dados.
E desta forma consegui manter atualizada as pesquisas de acordo com o que o Web Service atualiza o Banco de Dados…
Mais tarde pensarei em uma forma mais “elegante” para solucionar o problema de vez.
Grato pela atenção de todos.
GOSTEI 0