Cache de páginas com o framework EhCache
Autor: Samuel Martins Delfim | Publicado: 2010-02-02T10:03:00-08:00

Olá pessoal,Há bastante tempo não escrevo nada. Resolvi falar agora sobre melhorias de performance que ajudam bastante a aplicação. Em sites, constantemente temos páginas que acessam várias consultas pesadas além de regras de negócio. Estas páginas quando muito acessadas causam freqüentemente problemas de desempenho na aplicação e páginas lentas.Um dado importante para se tomar a decisão de utilizar ou não cache em páginas é a relação entre corretude e performance. Imagine o seguinte caso: Você tem uma página que possui as últimas notícias da sua empresa. Se uma nova notícia nova acaba de sair, qual o impacto da notícia demorar um pouco a mais para entrar no ar? O ganho de performance vale a pena o atraso na notícia. Se sim é interessante utilizar neste caso o cache para esta página.Quando temos cenários parecidos com este podemos verificar se é possível realizar cache de páginas. O Ehcache que é um framework java possui além do cache de objetos e cache para acesso a dados com JPA, possui também cache de páginas. Este cache às vezes é mais interessante, porque uma mesma página pode possuir várias consultas e regras de negócio, o que faz com que o cache de página geralmente gere mais ganho de performance do que o cache de acesso a dados.Para definir o cache de páginas é necessário primeiramente baixar os jars do ehcache disponíveis em http://ehcache.org. Entre os jars necessários é necessário baixar o módulo ehcache-web, que possui a Servlet responsável por gerenciar e guardar o cache das páginas.Depois disto, no classPath (pode ser na pasta src por exemplo) deve ser adicionado o aquivo ehcache.xml com um conteúdo parecido com o abaixo:&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;ehcache&gt;    &lt;diskStore path="java.io.tmpdir" /&gt;    &lt;cache name="SimplePageCachingFilter" maxElementsInMemory="10"        eternal="false" timeToIdleSeconds="600"         timeToLiveSeconds="600" overflowToDisk="true" /&gt;    &lt;defaultCache maxElementsInMemory="10" eternal="false"        overflowToDisk="false" timeToIdleSeconds="120"         timeToLiveSeconds="120" diskPersistent="false"         diskExpiryThreadIntervalSeconds="120" /&gt;&lt;/ehcache&gt;Para o arquivo acima é necessário verificar o tempo de expiração do cache que é definido pela propriedade timeToLiveSeconds que representa o número de segundos do cache da página apresentada.Depois, no arquivo web.xml devemos adicionar o filtro de cache para as páginas necessárias, assim como mostrado abaixo:&lt;!-- Filtros para cache de páginas adicionado para páginas --&gt;&lt;filter&gt;    &lt;filter-name&gt;SimplePageCachingFilter&lt;/filter-name&gt;    &lt;filter-class&gt;        net.sf.ehcache.constructs.web.filter.SimplePageCachingFilter    &lt;/filter-class&gt;&lt;/filter&gt;&lt;filter-mapping&gt;    &lt;filter-name&gt;SimplePageCachingFilter&lt;/filter-name&gt;    &lt;url-pattern&gt;/index.jsf&lt;/url-pattern&gt;&lt;/filter-mapping&gt;&lt;filter-mapping&gt;    &lt;filter-name&gt;SimplePageCachingFilter&lt;/filter-name&gt;    &lt;url-pattern&gt;/noticias.jsf&lt;/url-pattern&gt;&lt;/filter-mapping&gt;&lt;filter-mapping&gt;    &lt;filter-name&gt;SimplePageCachingFilter&lt;/filter-name&gt;    &lt;url-pattern&gt;/rss.jsf&lt;/url-pattern&gt;&lt;/filter-mapping&gt;A melhoria de performance é bastante significante. Além do cache de páginas comum é possivel também compactar as páginas, adicionar cabeçalhos, entre outros. Para mais informações visitem http://ehcache.org/documentation/web_caching.html.É isto aí pessoal. Qualquer problema avisem...