Escolar Documentos
Profissional Documentos
Cultura Documentos
Aumentando a performance do
Hibernate com Ehcache
64 www.mundoj.com.br
"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF
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
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
"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF
In-process APIs
Network
APIs
EHCACHE
JSR107 API
Cache Replication
Core
RMI Replication
JMS Replication
JGroups
Replication
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 Exception
Handler SPI
JMS Cache
Loader
Memory Store
LFU
Memory Store
FIFO
"SUJHPt"VNFOUBOEPBQFSGPSNBODFEP)JCFSOBUFDPN&IDBDIF
Constante
Valor(es) e orientaes
True
cache.use_query_cache
<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
net.sf.ehcache.<alias_de_
configuracao>
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);
"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
<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>
...
<ehcache>
<diskStore path=java.io.tmpdir/>
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 {
...
}
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
@Entity
@Table(name = cidade)
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class Cidade implements java.io.Serializable {
...
}
<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.
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".
Saber mais
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