Usando @Cacheable do Spring 3.1

Antes do Spring 3.1, eu costumava usar a anotação @Cacheable fornecida pelo projeto ehcache-spring-annotations. No entanto, com a introdução do Spring Cache, você não precisa mais usar essa biblioteca e pode usar a anotação org.springframework.cache.annotation.Cacheable.

Para migrar, tudo que você precisa fazer é substituir o @Cacheable pelo da spring.

Eu ainda precisava manter um cache de bloqueio que poderia facilmente na biblioteca antiga, e não estava claro na documentação do Spring como fazer isso. A solução que escolhi foi fornecer um cacheDecoratorFactory no ehcache.xml. Algo como

<cache name="dataCache" eternal="false"
maxElementsInMemory="0" overflowToDisk="false" diskPersistent="false"
timeToIdleSeconds="0" timeToLiveSeconds="14400"
memoryStoreEvictionPolicy="LRU" statistics="true">

<cacheDecoratorFactory class="com.saitz.BlockingCacheDecoratorFactory"></cacheDecoratorFactory>
</cache>

onde BlockingCacheDecoratorFactory está (em Scala)

class BlockingCacheDecoratorFactory extends CacheDecoratorFactory {
def createDecoratedEhcache(cache: Ehcache, properties: Properties): Ehcache = {
return createBlockingCache(cache);
}

def createDefaultDecoratedEhcache(cache: Ehcache, properties: Properties): Ehcache = {
return createBlockingCache(cache);
}


def createBlockingCache(cache:Ehcache):Ehcache = {
val blockingCache
= new BlockingCache(cache);
return blockingCache;
}
}