Estou trabalhando em um projeto usando JSF + JPA + Glassfish + Primefaces, além de um sistema de retaguarda para cadastro de informações, utilizando a mesma base de dados do mysql para as duas aplicações.
Porém, quando eu faço uma alteração qualquer em uma informação no sistema de retaguarda e vou no projeto web, a informação não se encontra disponível de imediato, MESMO que eu faça uma nova checagem no banco de dados. Muitas vezes é necessário aguardar meia hora para a informação vir a ser atualizada no projeto web. Em outros casos, preciso ainda reiniciar o servidor glassfish, senão a informação não aparece de jeito nenhum.
O que pode estar gerando esse problema? Existe como controlar esse timeout para novas verificações de dados? Existe como configurar para que todos os dados sejam obrigatoriamente checados novamente no banco de dados, e não solicitados de eventuais cookies?
Object retorno = new Object();
EntityManager em = null;
try {
em = xxxHibernateJPA.getEntityManager();
em.getTransaction().begin();
switch (operacao) {
case INCLUIR:
em.persist(obj); //Transformando o objeto transiente em um objeto persistente no banco de dados
break;
}
return retorno;
} catch (Exception ex) {
throw new xxxException(ex);
} finally {
em.getTransaction().commit(); //Finalizando a transação
em.close(); //Fechando a EntityManager
}
O problema em si não é nem a gravação. Ela fica perfeitamente no banco de dados. Se eu gravar um registro de uma pessoa, por exemplo, com Código “1”, nome “João” e RG “123”, ele consegue a gravação perfeitamente. Posso gravar, incluindo ou alterando, sem problemas.
Porém, ao utilizar a recuperação por código, por exemplo, se eu busco o RG da pessoa do código = “1”, ele me retorna um RG antigo, de momentos antes de eu haver atualizado o registro para “123”, por exemplo. E, se eu for direto no banco, o RG lá já está “123”.