Você está na página 1de 8

artigo

Aumentando a performance do
Hibernate com Ehcache

Jos Yoshiriro Ajisaka Ramos


(jyoshiriro@gmail.com)
bacharel em Sistemas de Informao (IESAM).
Analista/desenvolvedor do TJ Par. Trabalha
com Java como desenvolvedor, instrutor e
consultor h mais de 4 anos.

64 www.mundoj.com.br

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

Este artigo mostra as diversas maneiras de configurar o


framework Ehcache no Hibernate para oferecer uma Cache
confivel e de alta qualidade. Tambm sero abordados
alguns conceitos sobre Cache e seus benefcios.

Aprenda a usar o poderoso framework Ehcache


em aplicaes com Hibernate para aumentar
a performance reduzindo o trfego na rede e o
acesso a banco de dados sem comprometer a
consistncia dos dados.

egundo a documentao do Ehcache, Cache uma coleo temporria de dados replicados de outros lugares que acessada repetidamente e com baixo custo computacional. Uma analogia bem simples seria dizer que a Cache como aquela gaveta em nossa mesa de
trabalho na qual sempre esto algumas coisas que necessitamos vrias vezes por dia. Colocamos
essas coisas l porque basta mover uma mo para peg-las e, como se trata de uma gaveta,
rpido achar algo nela. Temos tambm um armrio com vrias gavetas no outro canto da sala
com tudo mais que precisamos para o trabalho coisas essas que precisamos ocasionalmente.
medida que certas coisas da gaveta se tornam de uso pouco frequente, passamos a guard-las
no armrio (tiro da Cache) e medida que algo do armrio vai sendo muito utilizado, passamos a
guardar na gaveta (ponho em Cache).
Alguns exemplos de Cache em sistemas computacionais so: memria cache seo de memria
de alta velocidade que armazena dados que o computador pode acessar rapidamente e cache
de instruo seo de memria de alta velocidade que armazena as prximas instrues a serem
executadas por um processador (para acelerar a operao). Caches podem estar na memria principal, em disco ou em qualquer componente com possibilidade de rpida leitura e escrita de dados.
O importante que o acesso a informaes na Cache seja mais rpido do que o acesso a mesma
informao no repositrio "oficial".

65

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

Quando usar Cache


Existe Cache em tudo na computao: Cache em CPUs, cache de DNS,
cache de Proxy, cache em SGBDs etc. Cada tipo de Cache tem a finalidade
de otimizar um tipo especfico de operao computacional. Este artigo
ir tratar da Cache de informaes em nvel de aplicao, na qual o objetivo principal tornar mais rpido o acesso a dados.
Um exemplo prtico de uso de Cache poderia ser para acessar uma tabela que contm os registros das cidades brasileiras. A frequncia com
a qual uma cidade criada em nosso pas muito baixa o municpio
mais novo foi emancipado em 1995 (Nazria/PI)*. Todavia existem 5.564
cidades no Brasil*. A aplicao que usa essa tabela do tipo cliente x
servidor e cada cliente faz centenas de consultas em cidades por hora.
Seria mais rpido acess-la em um banco de dados, lendo em disco e promovendo trfego na rede ou acessando uma lista de objetos na memria
principal do mesmo computador onde est a aplicao, ou seja, em uma
Cache? Exemplos parecidos seriam bairros em uma cidade, setores em
uma empresa, parmetros de uma aplicao etc.
GPOUF*#(&

Quanto maior o volume de acesso a um universo especfico de dados


em uma aplicao, mais ela ganha em performance com Cache em nvel
de aplicao. E se o repositrio padro de dados for remoto, o ganho de
desempenho maior ainda.
Pode surgir uma questo: "Se a Cache mais rpida, por que no se
coloca tudo em Cache?" Basta lembrar o exemplo da gaveta da mesa e
do armrio do outro lado da sala. Se colocar tudo na gaveta (talvez seja
necessrio aumentar a gaveta!), passar a ser quase to demorado achar
as coisas l do que no armrio. "E por que no se aproxima mais o armrio
da mesa?" uma boa idia, mas isso no seria uma Cache e sim uma
otimizao no sistema. Cache no a soluo para todos os problemas
de performance em uma aplicao e sim um dos recursos que podem
ser usados para agilizar o acesso a dados. aliada, e no concorrente,
de recursos como melhora da infraestrutura, rede, melhora do hardware,
ndices em tabelas etc.
Usar Cache de informaes em nvel de aplicao costuma dar resultados
muito bons para a performance, mas pode ser uma armadilha consistncia dos dados. A Cache deve ser rpida, mas tudo nela deve ser fiel
ao que est no lugar "oficial" onde ficam as informaes. Por isso, criar
solues "caseiras" de Cache muito arriscado. A melhor opo procurar solues amplamente testadas e consolidadas, como o framework
Ehcache.

Ehcache
O projeto Ehcache foi criado em 2003 e est hospedado no site sourceforge.net. um framework que oferece, alm do Cache para o Hibernate,
Cache para sistemas de autenticao, Cache de recursos WEB e Cache
para sistemas distribudos. At o fechamento desta edio, a verso mais
recente do Ehcache era a 1.6.0-beta1 e a estvel mais recente a 1.5.0.
um framework complexo e robusto. possvel verificar a arquitetura dele
na figura 1.
66 www.mundoj.com.br

O Hibernate trabalha com o conceito de Cache Provider que uma


classe que gerencia a Cache da aplicao e suporta vrios tipos de Providers, sendo o Ehcache um deles. Este artigo dar orientaes sobre as
vrias maneiras de configurar um Provider do Ehcache para Hibernate e
sobre como usar o Ehcache em vrios tipos de consultas.

Configurando o Ehcache no Hibernate


1 Passo: Adicionar biblioteca do Ehcache no classpath ou usar o
Ehcache padro do Hibernate
Desde a verso 2.1, o Hibernate vem com a classe org.hibernate.cache.
EhCacheProvider e ainda com a biblioteca do Ehcache para uso opcional
(arquivo ehcache-x.jar). Neste passo, pode-se associar esse arquivo ao
classpath da aplicao ou usar o Ehcache Provider interno do Hibernate.
A diferena que o ehcache-x.jar oferece os recursos adicionais e, caso
seja usada uma verso recente da biblioteca, pode usufruir de correo
de possveis bugs, melhoras de performance e novos recursos.

2 Passo: Ajustar constantes de configurao do Hibernate para o


Ehcache
Neste passo, so descritas as constantes de configurao para uso do
Ehcache em uma aplicao com Hibernate. Na tabela 1 h um detalhamento dessas constantes. Elas podem ser feitas no arquivo XML ou
properties de configurao do Hibernate ou ainda de maneira programtica. Existem exemplos de cada uma dessas maneiras nas Listagens 1,
2 e 3, respectivamente.

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

In-process APIs

Network
APIs

EHCACHE
JSR107 API

Cache Replication

Core

RMI Replication
JMS Replication
JGroups
Replication

Cluster Replication SPI

TerraCotta Replication

Hibernate API

Self Populating
Cache

JMX API

Serviet Cachin
Filter API

Blocking Cache

SOAP API

Cache Server

Ehcache API

CacheManager
Cache Manager
Listener SPI

JMS API

RESTful API

Cache
Cache Loader SPI Cache Extension SPI

Store
Memory Store
LRU

Disk Store

Cache Listener SPI

Cache Exception
Handler SPI

JMS Cache
Loader

Memory Store
LFU
Memory Store
FIFO

Figura 1. Arquitetura completa do Ehcache.

3 Passo: Configurar o Ehcache


As configuraes do Ehcache com o Hibernate podem estar centralizadas
em um nico arquivo ou em vrios arquivos XML, conforme os valores
das constantes de configurao do passo anterior. Independentemente
do nmero de arquivos de configurao definidos, as tags desse tipo de
arquivo so:
ehcache: tag raiz do arquivo XML.
diskStore: indica a pasta onde sero gravados os arquivos temporrios de Cache gerados automaticamente pelo Ehcache. No
atributo path, indica-se o caminho absoluto de uma pasta vlida.
Esta tag obrigatria e deve ser usada apenas uma vez no arquivo
XML.
Nesse atributo possvel ainda usar as propriedades de sistema java.
io.tmpdir (pasta de temporrios do usurio do sistema operacional),
user.home (pasta de configuraes do usurio do sistema operacional)
e user.dir (pasta de trabalho atual da aplicao). Caso seja usada alguma dessas propriedades, pode-se apontar subdiretrios (exemplo: java.
io.tmpdir/minhaAplicacao).
cacheManagerEventListenerFactory: indica, por meio do atributo class, uma classe que funcionar como fbrica de objetos do
tipo net.sf.ehcache.distribution.CacheManagerEventListener a qual
oferece mtodos que podem retornar diversas informaes sobre o
Ehcache Provider, como as classes que entram e saem da Cache,
por exemplo. A classe indicada no atributo class deve estender
net.sf.ehcache.event.CacheEventListenerFactory. No atributo properties (opcional), possvel passar propriedades personalizadas
(exemplo: prop1=valor1,prop2=valor2) as quais sero recebidas
como parmetro do mtodo createCachePeerProvider() e podem
ser usadas para qualquer finalidade. Esta tag opcional e deve ser
usada apenas uma vez no arquivo XML.
cacheManagerPeerProviderFactory: indica, por meio do atributo class, uma classe que funcionar como fbrica de objetos do
tipo net.sf.ehcache.distribution.CacheManagerPeerProvider, a qual
oferece mtodos que podem retornar diversas informaes sobre
cada instncia do Ehcache Provider configurada. Esta tag usada
caso o Ehcache tenha sido configurado para mltiplas instncias.
68 www.mundoj.com.br

A classe indicada no atributo class deve estender net.sf.ehcache.


distribution.CacheManagerPeerProviderFactory. No atributo properties (opcional), possvel passar propriedades personalizadas
(exemplo: prop1=valor1,prop2=valor2) as quais sero recebidas
como parmetro do mtodo createCachePeerProvider() e podem
ser usadas para qualquer finalidade. Esta tag opcional e deve ser
usada apenas uma vez no arquivo XML.
cacheManagerPeerListenerFactory: indica, por meio do atributo class, uma classe que funcionar como fbrica de objetos do
tipo net.sf.ehcache.distribution.CacheManagerPeerListener, a qual
oferece mtodos que podem retornar diversas informaes sobre a
instncia do Ehcache Provider e sobre classes que entram e saem
da Cache. Esta tag usada caso o Ehcache tenha sido configurado
para mltiplas instncias. A classe indicada no atributo class deve
estender net.sf.ehcache.distribution.CacheManagerPeerListenerFactory. No atributo properties (opcional), possvel passar propriedades personalizadas (exemplo: prop1=valor1,prop2=valor2)
as quais sero recebidas como parmetro do mtodo createCachePeerProvider() e podem ser usadas para qualquer finalidade. Esta
tag opcional e deve ser usada apenas uma vez no arquivo XML.
defaultCache: indica as configuraes padro para o Provider associado ao arquivo XML. As classes que no tiverem Caches individuais configuradas (tag cache) usaro as configuraes definidas
nesta tag. obrigatrio o uso desta tag e deve ser usada apenas
uma vez no arquivo XML.
cache: indica as configuraes para uma classe especfica, para
uma query especfica ou para um tipo padro de Cache do Ehcache.
Todos os atributos desta tag, com exceo do atributo name, existem na tag defaultCache e possuem a mesma finalidade. Na tabela
2 so descritos esses atributos. Esta tag pode ser repetida infinitas
vezes dentro do arquivo de configurao.
Os valores definidos nos atributos da tag defaultCache no so herdados
pelos da(s) tag(s) cache. Por exemplo: se for definido o valor 1.800 para
o atributo diskExpiryThreadIntervalSeconds na tag defaultCache e o
mesmo atributo for omitido em uma tag cache do mesmo arquivo, esta
adota o valor 120 (padro) e no os mesmos 1.800.

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

Constante

Valor(es) e orientaes
True

cache.use_query_cache

Se esta constante no for indicada ou estiver com valor


false, o Ehcache no ser usado pelo Hibernate mesmo
se as configuraes a seguir estiverem corretas.
org.hibernate.cache.EhCacheProvider
Ehcache Provider padro do Hibernate. Se for usado este
valor no necessrio ter o ehcache-x.jar no classpath
da aplicao.

Listagem 1. Exemplo de constantes de configurao do Ehcache no


hibernate.cfg.xml.

<property name=cache.provider_class>
org.hibernate.cache.EhCacheProvider
</property>
<property name=cache.provider_configuration_file_resource_path>
/pacote/subpacote/ehcache.xml
</property>
Listagem 2. Exemplo de constantes de configurao do Ehcache no
hibernate.properties.

net.sf.ehcache.hibernate.EhCacheProvider
Ehcache Provider do arquivo ehcache-x.jar. Oferece
correes de bugs e/ou novas funcionalidades de acordo
com a verso do .jar usado. Deve-se sempre verificar as
possveis configuraes peculiares da verso usada, bem
como sua compatibilidade com a verso do Hibernate
usada.

cache.provider_class

net.sf.ehcache.hibernate.SingletonEhCacheProvider
Outro Ehcache Provider do arquivo ehcache-x.jar. Com
ele, apenas uma instncia de Provider instanciada na
aplicao.
/pacote/pacote1/ehcache.xml (exemplo 1)
/ehcache.xml (exemplo 2 pacote raiz)
cache.provider_configuration_file_resource_path

Se for usado o Ehcache Provider padro do Hibernate,


o org.hibernate.cache.EhCacheProvider, essa constante
indica o caminho do arquivo ehcache.xml, que contm
as configuraes do Ehcache do projeto. Se for indicado
o Provider net.sf.ehcache.hibernate.SingletonEhCacheProvider, esta propriedade ignorada.
/pacote/pacote1/minha_ehcache1.xml (exemplo 1)
/minha_ehcache2.xml (exemplo 2 - pacote raiz)

net.sf.ehcache.<alias_de_
configuracao>

Se for usado o Ehcache Provider net.sf.ehcache.hibernate.EhCacheProvider, possvel criar vrios Providers


de Ehcache, cada um com seu arquivo de configurao
XML.Neste caso, existiro mltiplas instncias do Ehcache Provider.

5BCFMB$POTUBOUFTEFDPOmHVSBPEP)JCFSOBUFQBSBP&IDBDIF

Dentro das tags cache e defaultCache, possvel definir, opcionalmente, tags que oferecem maior poder de gerenciamento do Ehcache. Essas
tags so:
cacheEventListenerFactory: No atributo class deve ser informada uma classe que estenda a net.sf.ehcache.event.CacheEventListenerFactory, que funcionar como fbrica de objetos que implementam net.sf.ehcache.event.CacheEventListener, que possui
listeners para os eventos de Cache (inserir, descartar, atualizar,
expirar). No atributo properties, possvel passar propriedades
personalizadas (exemplo: prop1=valor1,prop2=valor2).
bootstrapCacheLoaderFactory: No atributo class deve ser informada uma classe que estenda net.sf.ehcache.bootstrap.BootstrapCacheLoaderFactory, a qual funcionar como uma fbrica de objetos
que implementam net.sf.ehcache.bootstrap.BootstrapCacheLoader
e que so usados por Caches na sua inicializao, antes de serem
populados. No atributo properties, possvel passar propriedades
personalizadas (Exemplo: prop1=valor1,prop2=valor2).
Na Listagem 4 h um exemplo de arquivo XML de configurao do Ehcache comentado.

hibernate.cache.provider_class = org.hibernate.cache.
EhCacheProvider
hibernate.cache.provider_configuration_file_resource_path = /
pacote/subpacote/ehcache.xml
Listagem 3. Exemplo de constantes de configurao do Ehcache de
maneira programtica.

Configuration.setProperty(hibernate.cache.provider_class,org.
hibernate.cache.EhCacheProvider);
Configuration.setProperty(hibernate.cache.provider_configuration_
file_resource_path,/pacote/subpacote/ehcache.xml);

4 Passo: Configurar as classes dos mapeamentos objeto relacional


para uso de Cache
As entidades mapeadas devem receber uma configurao particular para
melhor uso do Ehcache. Os atributos desse tipo de configurao so:
usage: indica a estratgia para concorrncia no uso de Cache. um
atributo obrigatrio. Os tipos de uso e suas orientaes esto descritos na tabela 3.
include: aceita os valores all e non-lazy. Indica se os elementos
colocados na Cache incluiro os atributos vindos de relacionamentos lazy=true do Hibernate (valor all) ou no (valor non-lazy).
Este atributo opcional e o valor padro all.
region: indica o nome da regio do Second Level Cache para a entidade. Este atributo opcional.
Este tipo de configurao pode ser feito nos arquivos XML de mapeamento objeto relacional, via XDoclet ou ainda via anotaes (a partir do
Hibernate 3.2.x). Existem exemplos de cada uma dessas maneiras nas
Listagens 5, 6 e 7, respectivamente.
Outra maneira de configurar a Cache nas entidades mapeadas o uso da
tag class-cache no arquivo raiz de configurao do Hibernate (hibernate.
cfg.xml, por exemplo). Ela possui, alm dos atributos usage, include e
region, o atributo class no qual se indica o nome completo da classe. Um
exemplo dessa opo de configurao est na Listagem 8.

Usando Ehcache no Hibernate


Com todas as configuraes feitas, possvel usar o Ehcache em consultas usando as APIs Query e Criteria. Em ambas, basta usar os mtodos
setCacheable(true) e/ou setCacheRegion(<nome da cache>) para indicar
que a consulta usar uma das configuraes de query especficas do Ehcache. Nas Listagens 9, 10 e 11 h exemplos comentados de consultas usando
Cache e, em ambas, deve-se levar em conta as configuraes da Listagem 4.
69

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF
Atributo

Conceito e orientaes

maxElementsInMemory

Define quantos elementos podem permanecer em memria. Se for usado o valor 0 (zero), nenhum elemento ficar em memria e no um nmero infinito, como pode parecer.

overflowToDisk

Determina se os elementos devem passar a ser armazenados em disco caso o limite estabelecido no atributo maxElementsInMemory tenha sido alcanado. O Cache de disco so arquivos indexados criados automaticamente pelo Ehcache que ficam na
pasta indicada na tag diskStore. Aceita os valores true ou false. Se o valor usado for false, o Ehcache usar apenas Cache em
memria.

maxElementsInDisk

Define quantos elementos podem permanecer em Cache de disco. O valor padro deste atributo zero.

Eternal

Aceita os valores true ou false. Se o valor usado for true, os elementos nunca iro expirar na Cache. Isso no significa que
nunca sero atualizados e sim que nunca sero retirados automaticamente da Cache, pois o Ehcache ignora os valores dos
atributos timeToIdleSeconds ou timeToLiveSeconds. Se for usado false, os elementos em Cache iro expirar de acordo com o
tempo definido nos atributos timeToIdleSeconds ou timeToLiveSeconds.

timeToIdleSeconds

timeToLiveSeconds

Indica quanto tempo, em segundos, um elemento pode ficar ocioso na Cache antes de ser removido. O valor padro deste
atributo 0. Este atributo ignorado pelo Ehcache se o atributo eternal for definido como true.
Indica quanto tempo, em segundos, um elemento pode ficar ativo na Cache antes de ser removido. O valor padro deste atributo 0. Este atributo ignorado pelo Ehcache se o atributo eternal for definido como true.

diskPersistent

Aceita os valores true ou false. Se o valor usado for true, os arquivos indexados no so excludos do disco com o encerramento da aplicao. O valor padro deste atributo false.

diskExpiryThreadIntervalSeconds

Indica quanto tempo, em segundos, a Cache de disco expira. O valor padro deste atributo 120.

diskSpoolBufferSizeMB

memoryStoreEvictionPolicy

Indica o tamanho, em MB, do espao em disco que deve ser alocado para a Cache de disco. O valor padro deste atributo
30.
Indica a poltica usada quando o nmero de elementos em memria alcanar o valor especificado no atributo maxElementsInMemory. Os valores possveis so:
LRU (Least Recently Used): nesta poltica, quando o nmero de elementos em memria alcanado e ocorre a solicitao para
entrada de um novo, o que foi atualizado ou recuperado pela ltima vez a mais tempo descartado da Cache.
LFU (Least Frequently Used): nesta poltica, quando o nmero de elementos em memria alcanado e ocorre a solicitao
para entrada de um novo, o que tiver o menor cache hits* descartado da Cache.
FIFO (First In First Out): nesta poltica os elementos so descartados da memria na mesma ordem em que entram. Os primeiros que entram tambm so os primeiros a sair, independentemente da ltima vez em que foi atualizado ou do nmero
de cache hits.
O valor padro deste atributo LRU.
* - Todo tipo de Cache computacional possui os conceitos cache miss e cache hit. Toda vez que uma informao procurada
em uma Cache e encontrada, ocorre um cache hit, caso contrrio, ocorre um cache miss.

name

Este atributo s existe na tag cache. Pode ser usado para indicar as configuraes de Cache para:
Uma classe especfica: neste caso, deve-se preencher este atributo com o nome completo de uma classe. Exemplo: pacote.
modelo.Pais
Uma query especfica: neste caso, pode-se usar qualquer valor alfanumrico. Exemplo cidadesParaenses
Um dos tipos padro do Ehcache: Da verso 2.1.x at a 3.1.x do Hibernate esses tipos so net.sf.hibernate.cache.StandardQueryCache e net.sf.hibernate.cache.UpdateTimestampsCache.
A partir da verso 3.2.x, esses tipos so org.hibernate.cache.StandardQueryCache e org.hibernate.cache.UpdateTimestampsCache
5BCFMB"USJCVUPTEBTUBHTEFGBVMU$BDIFFDBDIFEFBSRVJWPT9.-EFDPOmHVSBPEP&IDBDIF

Nas consultas das Listagens 9 e 10 todos os objetos da lista retornada passaro a ficar na Cache sob as configuraes da tag <cache name="pacote.
subpacote.modelo.Cidade".../> da Listagem 4.
Na consulta da Listagem 11, todos os objetos da lista retornada passaro
a ficar na Cache sob as configuraes da tag <cache name="capitaisBras
ileiras".../>, da Listagem 4.
O mtodo setCacheable() s surtir efeito se os atributos descritos no
tpico Configurando o Ehcache no Hibernate (2 passo) forem configurados para uso de Cache. Por outro lado, mesmo que as configuraes
do Hibernate estejam preparadas para uso do Ehcache, sem o uso deste
mtodo, os resultados das consultas no sero colocados em Cache.
As Caches no Hibernate vo se formando medida que as consultas so
executadas. Se uma determinada consulta foi planejada para ficar em
Cache, ela deve ser executada pelo menos uma vez na aplicao. Se, por
70 www.mundoj.com.br

Listagem 5. Exemplos de configurao de Cache em arquivo XML de mapeamento.

<hibernate-mapping>
<class name= pacote.subpacote.modelo.Cidade table=cidade>
<cache usage=read-write/>
<id... >
<property... >
...
<set name=setX ...>
<cache usage=read-only/>
...
</set>
<list name=listaX ...>
<cache usage=read-only/>
...
</list>
<map name=mapaX ...>
<cache usage=read-only/>
...
</map>
...

<!-- configuraes para uma consulta especfica chamada


capitaisBrasileiras -->
<cache name=capitaisBrasileiras eternal=true
maxElementsInMemory=25 maxElementsOnDisk=0
memoryStoreEvictionPolicy=LRU overflowToDisk=false/>
</ehcache>

<!-- configuraes para as consultas que envolverem a classe


pacote.subpacote.modelo.Cidade -->
<cache name=pacote.subpacote.modelo.Cidade diskExpiryT
hreadIntervalSeconds=0 diskPersistent=false eternal=true
maxElementsInMemory=5500 maxElementsOnDisk=0
memoryStoreEvictionPolicy=LRU overflowToDisk=true/>

<!-- configuraes para toda a aplicao, com exceo dos


definidos pela tag cache -->
<defaultCache diskExpiryThreadIntervalSeconds=180
0 diskPersistent=false diskSpoolBufferSizeMB=128
eternal=true maxElementsInMemory=1000
maxElementsOnDisk=2000 memoryStoreEvictionPolicy=LRU
overflowToDisk=true/>

<ehcache>
<diskStore path=java.io.tmpdir/>

Listagem 4. Exemplo arquivo XML de configurao do Ehcache.

Estratgia indicada para entidades que precisaro de raras atualizaes. No indicada para transaes strict.

nonstrict read/write

/**
* @hibernate.class table=cidade
* @hibernate.cache usage=read-write
*/
public class Cidade implements java.io.Serializable {
...
}

Listagem 6. Exemplo de configurao de Cache usando XDoclet.

Tabela 3. Estratgias de concorrncia para o uso de Cache.

Essa estratgia no se aplica para o Cache Provider do Ehcache.


Apenas o Provider do JBoss TreeCache suporta.

Estratgia indicada para a maioria dos casos de uso de Cache.


Permite a insero e atualizao de elementos a todo instante.
No indicada para transaes serializable

read-write

transactional

Indica que os elementos j existentes em uma Cache para a entidade mapeada no podero ser atualizados. a estratgia que
oferece melhor performance, mas s deve ser usada em casos
onde realmente no h atualizao de elementos. Exemplo: parmetros de sistema.

Conceito e orientaes

read-only

Valor

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF

Listagem 7. Exemplo de configurao de Cache usando anotaes.

@Entity
@Table(name = cidade)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Cidade implements java.io.Serializable {
...
}

Caso as mesmas consultas das Listagens de 9 a 11 sejam executadas


novamente, mesmo que em outra sesso Hibernate (mas na mesma
instncia Hibernate), os objetos sero recuperados da Cache e no do
repositrio oficial (SGBD, por exemplo).
Se forem requisitados objetos por meio dos mtodos load() ou get()
da API Session, o Hibernate tentar recuper-los de alguma Cache antes
de tentar a busca no repositrio oficial, mesmo que a sesso usada seja
outra (mas da mesma instncia do Hibernate).

Listagem 8. Exemplo de configurao de Cache em arquivo raiz de configurao Hibernate.

<hibernate-configuration>
<session-factory>
<class-cache class=pacote.subpacote.modelo.Cidade
usage=read-only />
<class-cache class=pacote.subpacote.modelo.Estado
usage=read-only />
...
Listagem 9. Exemplo de Cache usando Query.

Query query = sessao.createQuery(from Cidade);


query.setCacheable(true);
List<Cidade> cidades = query.list();

Dicas importantes
Use as tags "cacheManagerEventListenerFactory", "cacheManagerPeerProviderFactory", "cacheManagerPeerListenerFactory",
"cacheEventListenerFactory" e "bootstrapCacheLoaderFactory"
somente se desejar criar Listeners para monitorar a o Echcache
na sua aplicao.
Se quiser que apenas consultas personalizadas e/ou tabelas que
sofrem poucas atualizaes fiquem em Cache, use o valor 0
para o atributo "maxElementsInMemory" da tag "defaultCache".

Criteria criteria = sessao.createCriteria(Cidade.class);


criteria.setCacheable(true);
List<Cidade> cidades = criteria.list();
Listagem 11. Exemplo de Cache usando Criteria e setCacheRegion().

Integer[] idscapitais = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18


,19,20,21,22,23,24,25};
Criteria criteria = sessao.createCriteria(Cidade.class);
criteria.add(Restrictions.in(idcidade, idscapitais));
criteria.setCacheable(true);
criteria.setCacheRegion(capitaisBrasileiras);
List<Cidade> capitais = criteria.list();
exemplo, em uma aplicao WEB, seja requisito que o primeiro usurio a
entrar no sistema j usufrua todas as Caches programadas no sistema,
necessrio criar um mecanismo que invoque todas as consultas necessrias para a criao dessas Caches antes que a aplicao seja disponibilizada. As Caches no so populadas automaticamente pelo fato de estarem
configuradas no(s) arquivo(s) XML do Ehcache.

Saber mais

Listagem 10. Exemplo de Cache usando Criteria.

As edies 01, 10 e 24 da Mundoj tratam de


diversos conceitos e dicas importantes sobre o
Hibernate.

Consideraes finais
Este artigo introduziu alguns conceitos sobre Cache, procurando mostrar
sua importncia para o ganho de performance. Foi mostrado como configurar o framework Ehcache para funcionar como um Cache Provider do
Hibernate. No foram demonstradas comparaes entre a performance
com e sem uso de Cache, porque isso tornaria este trabalho muito extenso;
alm disso, j existem diversos trabalhos com essas comparaes disponWFJTOB8FC TFOEPBMHVOTJOEJDBEPTOBTSFGFSODJBTEFTUFBSUJHPt

Referncias
t 4JUFEP&IDBDIFIUUQFIDBDIFTGOFU
t &#PPLDPNQMFUPEP&IDBDIFIUUQFIDBDIFTPVSDFGPSHFOFU&IDBDIF6TFS(VJEF
pdf
t $PNQBSBFTFOWPMWFOEP&IDBDIF
t IUUQSBJCMFEFTJHOTDPNSEFOUSZPTDBDIF@WT@FIDBDIF@GPS@IJCFSOBUF
t IUUQKBLBSUBBQBDIFPSHKDT+$4WT&)$BDIFIUNM
t IUUQHSFHMVDLDPNCMPHBSDIJWFTDPNQBSJOH@NFNDBIUNM

72 www.mundoj.com.br

Você também pode gostar