quinta-feira, 25 de junho de 2009

Configurando o EhCache como cache provider JPA

Olá pessoal,

Hoje vou falar um pouco sobre o EhCache e em seguida mostrarei como configurar o ehcache como provider de cache para o JPA.

Algumas vezes precisamos criar caches para linhas de banco de dados mais acessadas. Entre os problemas para a criação de um sistema de cache temos o sincronismo, o gasto excessivo de memória, o tamanho máximo do cache, entre outros. Devido à grande quantidade de possíveis problemas, escrever um sistema de cache eficiente, seguro e com suporte a sistemas distribuídos é um grande trabalho.

Este é o trabalho do cache de segundo nível do Hibernate (Second level Cache). É possível utilizar este cache com vários providers e um dos mais utilizados é o EhCache. O EhCache é um mecanismo de cache distribuído em Java vastamente utilizado. Ente seus principais recursos temos cache de entidades, de queries, de páginas web, entre outros.

Sua ultima versão está disponível em http://ehcache.sourceforge.net/.

Para configurá-lo como provider de persistência devemos primeiramente adicionar o seguinte trecho ao arquivo persistence.xml:


<property name="cache.use_second_level_cache" value="true" />
<property name="hibernate.cache.provider_class"
value="net.sf.ehcache.hibernate.EhCacheProvider" />
<property name="net.sf.ehcache.configurationResourceName"
value="/META-INF/ehcache.xml" />

Depois devemos criar o arquivo ehcache.xml dentro do diretório META-INF da sua aplicação e adicionar nele o seguinte conteúdo:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ehcache.xsd">
<diskStore path="java.io.tmpdir" />
<defaultCache maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120" timeToLiveSeconds="180"
overflowToDisk="true" diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU" />
</ehcache>


Um exemplo mais completo de arquivo de configuração do ehcache pode ser encontrado em http://ehcache.sourceforge.net/ehcache.xml.

Lembrem-se de adicionar o arquivo ehcache.jar dentro das bibliotecas de sua aplicação.

Depois de configurado então deverá aparecer no log do servidor algo como:


23:16:50,437 INFO [SettingsFactory] Second-level cache:
enabled
23:16:50,437 INFO [SettingsFactory] Query cache: disabled
23:16:50,437 INFO [SettingsFactory] Cache provider:
net.sf.ehcache.hibernate.EhCacheProvider


Depois disto é só começar a utilizar as anotações e o cachê de queries.

Em um próximo post falarei sobre como utilizar o cache de segundo nível com o Hibernate.

4 comentários:

Flex 4 JD disse...

O que acha de uma tecnologia/ferramenta java = ao Flex?

Uma camada View Java = ao Flex?

Estou procurando parceiros que tenha interesse em desenvolver essa tecnologia.

Não iremos criar do zero, na verdade já existe um pequeno Framework que possibilita isso, porém ele está "cru", pois não foi desenvolvido com este propósito.

A idéia é evoluir este Framework e fazer dele uma tecnologia Java = ao Flex para desenvolvimento da camada View, tanto web quanto desktop.

Uma tecnologia desta no mercado vale bilhões.

Derrubaria todas as demais, jsf e implementações, javafx, e outras "gambiarras", além de ser uma forte concorrência ao Flex.

Aguardo contato.
sivoleu@hotmail.com

Alexandre Verri disse...

Afinal, quem é o autor do post deste blog!? Já li o mesmo texto em 3 sites distintos...

Samuel Martins Delfim disse...

Eu tenho na verdade diferentes sites. Entre eles o www.portalarquiteto.com.br e publico os posts em vários lugares na internet.

Provavelmente o que vc viu foram diferentes lugares que publicam meus posts.

Unknown disse...

"Depois disto é só começar a utilizar as anotações e o cachê de queries."
Vc tem exemplos ou links de como continuar a implementação ai do cache com JPA ?