Exemplo: Configurando o Serviço de Cache Dinâmico
Este exemplo reúne todas as etapas para configurar o serviço de cache dinâmico com o arquivo cachespec.xml, mostrando o uso das regras de geração de ID de cache, IDs de dependência e regras de invalidação.
Suponha que um servlet seja utilizado para gerenciar um site simples de notícias. Esse servlet utiliza o parâmetro de consulta "action" para determinar se o pedido está sendo utilizado para visualizar as notícias (parâmetro de consulta "view") ou atualizar notícias (parâmetro de consulta "updade") (utilizado pelo administrador). Outro parâmetro de consulta "category" seleciona a categoria de notícias. Suponha que esse site suporte um layout personalizado opcional, o qual é armazenado na sessão do usuário utilizando o nome de atributo "layout". Eis alguns exemplos de pedidos de URL para esse servlet:
http://yourhost/yourwebapp/newscontroller?action=view&category=sports (Retorna uma página de notícias para a categoria sports)
http://yourhost/yourwebapp/newscontroller?action=view&category=money (Retorna uma página de notícias para a categoria money)
http://yourhost/yourwebapp/newscontroller?action=update&category=fashion (Permite que o administrador atualize as notícias na categoria fashion)
Estas são as etapas para configurar o serviço de cache dinâmico para esse exemplo com o arquivo cachespec.xml:
- Defina os elementos <cache-entry> necessários para identificar o
servlet. Nesse caso, o URI do servlet é "newscontroller", para que esse seja
o elemento <name> da entrada de cache. Como esse exemplo armazena em cache um servlet ou arquivos JSP (JavaServer
Pages), a classe da entrada de cache é "servlet".
<cache-entry> <name> /newscontroller </name> <class>servlet </class> </cache-entry>
- Defina as regras de geração de ID de cache. Esse servlet é armazenado em cache apenas quando action=view,
de modo que um componente do ID de cache será o parâmetro "action" quando o valor
for igual a "view". A categoria de notícias também é uma parte essencial
do ID de cache. O atributo opcional session para o layout do usuário
é incluído no ID de cache. A entrada de cache agora é:
<cache-entry> <name> /newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> </cache-entry>
- Defina regras de ID de dependência. Para esse servlet, é incluído um ID
de dependência para a categoria. Posteriormente, quando a categoria for invalidada devido a um evento
de atualização, todas as visualizações dessa categoria de notícias serão invalidadas.
A seguir
está um exemplo da entrada de cache após incluir o ID de dependência:
<cache-entry> <name>newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> <dependency-id>category <component id="category" type="parameter"> <required>true</required> </component> </dependency-id> </cache-entry>
- Defina regras de invalidação. Como um ID da dependência de categoria já está definido,
defina uma regra de invalidação para invalidar a categoria quando action=update. Para incorporar a lógica condicional, incluiremos componentes "ignore-value"
na regra de invalidação. Esses componentes não são incluídos na saída do ID de
invalidação, mas apenas determinam se o ID de invalidação será ou não criado e executado. O cache-entry final agora é semelhante a este:
<cache-entry> <name>newscontroller </name> <class>servlet </class> <cache-id> <component id="action" type="parameter"> <value>view</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> <component id="layout" type="session"> <required>false</required> </component> </cache-id> <dependency-id>category <component id="category" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation>category <component id="action" type="parameter" ignore-value="true"> <value>update</value> <required>true</required> </component> <component id="category" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry>