Hibernate - Existe cache? Qual a logica desse problema maluco?

7 respostas
allanperon

Pessoal,

O hibernate possui algum tipo de cache? Estou com um problema doidao utilizando struts + hibernate:

  1. Implementei o padrao Open Session in View, abrindo uma sessao/transacao a cada request em um Filtro (extends Filter)

public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws ServletException, IOException { try { sf.getCurrentSession().beginTransaction(); sf.getCurrentSession().setFlushMode(FlushMode.COMMIT); chain.doFilter(request, response); sf.getCurrentSession().flush(); sf.getCurrentSession().getTransaction().commit(); } catch (StaleObjectStateException staleEx) { staleEx.printStackTrace(); throw staleEx; } }

  1. Entro no sistema e faco uma pesquisa exibindo todos os clientes.
  2. Excluo o cliente XXXX.
  3. Mensagem de sucesso aparece com botao para voltar a tela de consulta.
  4. Faco uma nova pesquisa exibindo todos os clientes.
  5. O cliente XXXX aparece nos resultados DE FORMA INCORRETA.
  6. Atualizo a pagina (F5) fazendo uma nova consulta (request) e o cliente SOME, nao aparecendo CONFORME ESPERADO na primeira consulta.

Alguem pode dar uma ajuda?

7 Respostas

maniacs

veja se não esta no cache do browser…
tente tirar o cache com as metatag do head

allanperon

Yuri,

Antes de mais nada obrigado pela resposta. Ja estou utilizando o seguinte no meu

Tem alguma outra tag pra garantir que nao esta no cache do browser?

Nao acho que seja cache do browser pois o comando pesquisar disparar uma pesquisa no banco, passa por uma classe Decorator e chega ate a display tag.

Outra sugestao?

maniacs

mostre como você faz o insert…

Session s = getSession();
	beginTransaction();
	s.saveOrUpdate(entity);
	commitTransaction();

é algo assim ?

allanperon

Na verdade utilizo o padrao Open Session in View. Ou seja, quem fica responsavel por abrir a sessao, a transacao e "commita-las" eh o Filtro.

Abaixo o codigo do mesmo e depois o metodo remover(), lembrando que meu problema é com EXCLUSAO. INSERCAO e ATUALIZACAO estao funcionando redondo.

FiltroSessao

public class FiltroSessao implements Filter {

	private SessionFactory sf;


	public void destroy() {
	}
	
	public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws ServletException, IOException {
		
        try {
        	
            sf.getCurrentSession().beginTransaction();
            sf.getCurrentSession().setFlushMode(FlushMode.COMMIT);
            chain.doFilter(request, response);
            sf.getCurrentSession().flush();
            sf.getCurrentSession().getTransaction().commit();
            
        } catch (StaleObjectStateException staleEx) {
            staleEx.printStackTrace();
            throw staleEx;
        } 
        		
	}


	public void init(FilterConfig config) throws ServletException {
		
		try {
			sf = HibernateUtil.getInstance().getSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
Metodo remover() de Cliente
(...)
	public void remover() throws HibernateException {
		try {
			getSession().delete(this);
		} catch (HibernateException ex) {
			throw new RuntimeException(ex);
		}
	}

	private static Session getSession() {
		return HibernateUtil.getInstance().getSessionFactory().getCurrentSession();
	}
      
        (...)
jgbt

pergunta:
depois de excluir vc ta refazendo a consulta para atualizar os dados que irão p/ tela?

[]´s

allanperon

Sim, a consulta é refeita.

  1. LancarClienteAction - excluir();
  2. Forward pra tela de sucesso - msgSucesso.jsp
  3. Clique no botao Voltar chamando action de exibicao - ExibePagina.do?pagina=consultaClientes
  4. Clique no botao pesquisarTodos no jsp
  5. PesquisarClientesAction - Realiza pesquisa e monta TO’s (ClienteTO) - Forward para tela de pesquisa colocando colecao de TO’s no request
  6. Renderizacao da colecao atraves de um decorator no displaytag (nesse momento mostra uma linha com o registro excluido)
  7. Atualizo a pagina (nova consulta PesquisarClientesAction com os mesmos parametros) - F5 no browser
  8. Resultado exibido corretamente
maniacs

estanho :?

Criado 4 de janeiro de 2008
Ultima resposta 4 de jan. de 2008
Respostas 7
Participantes 3