Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Invalidar o Cache

No curso de Spring MVC utilizamos o cache do guava, onde cada vez que faziamos uma alteração em um registro ou a inclusão de um novo registro, o cache era descartado e recriado novamente para evitar de termos cache com dados antigos. Como funciona isso com o ehCache e o Hibernate? a cada persist e merge o cache é invalidado ou o programador é que tem que se preocupar em invalidar o cache? com o eh cache é possível configurar para invalidar o cache de tempo em tempo?

2 respostas
solução!

Opa Ricardo, a premissa é a mesma... merge e persist vão invalidar o cache.. as configurações de timeout dependem da implementação do cache que você esteja utilizando.

Oi Alberto, no caso seria o mesmo cache apresentado no curso de JPA, o eh-cache.

Pesquisando um pouco vi que existe um arquivo de configuração chamado ehcache.xml, onde suponho eu que podemos fazer algumas configurações adicionais ao cache

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect" dynamicConfig="true">

    <!-- By default, Ehcache stored the cached files in temp folder. -->
    <!-- <diskStore path="java.io.tmpdir" /> -->

    <!-- Ask Ehcache to store cache in this path -->
    <diskStore path="c:\\cache" />

    <!-- Sample cache named cache1
    This cache contains a maximum in memory of 10000 elements, and will expire
    an element if it is idle for more than 5 minutes and lives for more than
    10 minutes.

    If there are more than 10000 elements it will overflow to the
    disk cache, which in this configuration will go to wherever java.io.tmp is
    defined on your system. On a standard Linux system this will be /tmp" -->
    <cache name="cache1"
        maxEntriesLocalHeap="10000"
        maxEntriesLocalDisk="1000"
        eternal="false"
        diskSpoolBufferSizeMB="20"
        timeToIdleSeconds="300" timeToLiveSeconds="600"
        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>

</ehcache>

Agora só falta saber oque é cada propriedade dessas, mas pelo nome acho que o timeout é a propriedade timeToLiveSeconds correto? que tal em uma próxima atualização do curso de JPA a Alura poderia incluir uma aula ensinando a confirar o eh-cache com este arquivo, afinal acho que cache de segundo nível deve ser uma dúvida que quase todo mundo que inicia no JPA deve ter.