Forçar Reload Cache - EhCache JPA

Olá,

estou fazendo uma aplicação web que utiliza JPA e ehcache ( utilizando implementação hibernate ) e gostaria de saber se é possivel forçar o reload do cache a partir de um método.

Sendo mais especifico, gostaria de chamar um método que limpasse todo o cache da aplicação naquele momento e a partir dai ele começasse a popular o cache novamente do zero.

Alguem pode me ajudar ?

Obrigado

[]´s

Sim,

mas como faço para pegar session que foi aberta pelo EhCacheProvider do Hibernate ?

Obrigado

[]´s

Meio estranho o que voce esta tentando fazer. Mas, de qualquer maneira, voce precisa fazer um cast para SessionFactoryImplementor (que eh a interface mais especializada, cuja implementacao da session factory do hibernate utiliza) e chamar o metodo getAllSecondLevelCacheRegions(), e depois getSecondLevelCacheRegion(String) passando o nome de cada region, e ai invocar o metodo clear() do Cache. Algo como

SessionFactoryImplementor sfi = (SessionFactoryImplementor)sessionFactory; 
Map cacheRegions sfi.getAllSecondLevelCacheRegions();

Ai itere pelo Map e invoce o getSecondLevelCacheRegion() para cada region.

Rafael

Olá Rafael,

entendi, mas ainda a minha duvida é:

Como que eu pego o SessionFactory ? Pode ser uma pergunta idiota =)

Usando JPA e o EHCACHE ele automaticamente cria o cache, nao tenho controle sobre essa inicialização.

O problema é o seguinte:

criei dois contextos diferentes que acessam o mesmo banco de dados, e gostaria de usar o ehcache.
Porém tenho que garantir que o cache fique consistente, dessa maneira queria criar um método que limpasse o cache.

Ao modificar o banco através de uma das aplicações teria que limpar o cache da outra entendeu ? =(

Pode me ajudar ???

Obrigado

[]´s

A SessionFactory possui o método evict, podendo eliminar tanto um objeto ou toda o cache da classe escolhida.

Seguinte, o hibernate com ou sem cache praticamente não muda nada nos métodos de manipulação de dados.
Quando o cache de segundo nível estiver ativado e a classe for mapeada para ser cacheada, os comandos para consultar dados primeiro verificam o cache os dados e depois o banco de dados.

o método evict, limpa um objeto da classe cacheada ou toda a classe cacheada.