示例:配置动态高速缓存服务
本示例将使用 cachespec.xml 文件配置动态高速缓存服务的步骤以及显示使用高速缓存标识生成规则、依赖项标识和无效规则的所有步骤都放在一起。
假定 Servlet 管理一个简单的新闻站点。此 Servlet 使用查询参数“action”来确定请求查看(查询参数“view”)新闻还是更新(查询参数“update”)新闻(由管理员使用)。另一个查询参数“category”用于选择新闻类别。假设该站点支持可选的定制布局,该布局存储在使用属性名“布局”的用户会话中。这里是到该 Servlet 的示例 URL 请求:
http://yourhost/yourwebapp/newscontroller?action=view&category=sports(返回 sports 类别的新闻页面)
http://yourhost/yourwebapp/newscontroller?action=view&category=money(返回 money 类别的新闻页面)
http://yourhost/yourwebapp/newscontroller?action=update&category=fashion(允许管理员更新 fashion 类别的新闻)
以下是使用 cachespec.xml 文件为此示例配置动态高速缓存服务的步骤:
- 定义标识 Servlet 所必需的 <cache-entry> 元素。在这种情况下,servlet 的 URI 是“newscontroller”,因此这是高速缓存条目 <name> 元素。因为该示例高速缓存 Servlet 或 Java Server Pages (JSP) 文件,所以高速缓存条目类是“servlet”。
<cache-entry> <name> /newscontroller </name> <class>servlet </class> </cache-entry>
- 定义高速缓存标识生成规则。仅当 action=view 时才高速缓存此 servlet,因此当值等于“view”时,高速缓存标识的某个组件是参数“action”。新闻类别也是高速缓存标识的必不可少的部分。该高速缓存标识中包括用户布局的可选会话属性。现在,高速缓存条目为:
<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>
- 定义依赖项标识规则,对于此 servlet,为该类别添加依赖项标识。对于此 servlet,将为类别添加依赖项标识。以后,由于更新事件而使该类别无效时,那么该新闻类别的所有视图都无效。以下是添加依赖项标识后的高速缓存条目的示例:
<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>
- 定义无效规则。由于已经定义了类别依赖项标识,因此定义无效规则以在 action=update 时使该类别无效。要合并条件逻辑,将“ignore-value”组件添加到无效规则中。这些组件将不添加到无效标识的输出中,而是仅确定是否创建和运行该无效标识。现在,最后的高速缓存条目如下所示:
<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>