Configure the dynamic cache

 

This example puts all the steps together for configuring the dynamic cache with the cachespec.xml file, showing the use of the cache ID generation rules, dependency IDs, and invalidation rules.

Suppose we have a servlet which is used to manage a simple news site. This servlet uses the query parameter "action" to determine whether the request is being used to "view" news or "update" news (used by the administrator). Further, another query parameter "category" is used to select the news category. Further, suppose that this site supports an optional customized layout, which is stored in the user's session using the attribute name "layout". Here are example URL requests to this servlet:

Return a news page for the sports category

http://host/webapp/newscontroller?action=view&category=sports

Return a news page for the money category

http://host/webapp/newscontroller?action=view&category=money

Allow the administrator to update news in the fashion category

http://host/webapp/newscontroller?action=update&category=fashion

Here are the steps for configuring dynamic cache with cachespec.xml, using the information provided to you...

  1. Define the cache-entry elements necessary to identify the servlet. In this case, the servlet's URI is "newscontroller" so this will be our cache-entry's name element. Also, since we are caching a servlet/JSP, the cache-entry class is "servlet".

    <cache-entry> 
    <name> /newscontroller </name>
    <class>servlet  </class>  
     </cache-entry>
    

  2. Define cache ID generation rules. For this servlet, we only want to cache when action=view, so one component of the cache ID will be the parameter "action" when the value equals "view". The news category is also an essential part of the cache ID. Finally, the optional session attribute for the user's layout is included in the cache ID. The cache-entry now looks like this

    <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>
    

  3. Define dependency ID rules. For this servlet, a dependency ID will be added for the category. Later, when the category is invalidated due to an update event, all views of that news category will be invalidated. After adding our dependency-id, the cache-entry now looks like this

    <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>
    
    

  4. Define invalidation rules. Since we defined a category dependency ID, we will now define an invalidation rule to invalidate the category when action=update. To incorporate the conditional logic, we will add "ignore-value" components into the invalidation rule. These components will not add to the output of the invalidation ID, but will only determine whether or not the invalidation ID is created and executed. The final cache-entry now looks like this

    <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>
    

 

See Also

Using the dynamic cache service to improve performance
Configuring servlet caching
Verifying the cacheable page