cachespec.xml 檔
當伺服器啟動時,快取會剖析 cachespec.xml 檔,並從每個 cache-entry 元素中擷取一組配置參數。 每當新的 Servlet 或其他可快取物件起始設定時,快取會試圖比對每個 cache-entry 元素來尋找這個物件的配置資訊。
cache-entry 元素可以在根 cache 元素內,或在 cache-instance 元素內。 在根元素中的快取項目是利用預設快取實例來快取。 在 <cache-instance> 元素中的快取項目是在這個特定快取實例中進行快取。 不同的可快取物件有不同的 class 元素。 您可以利用 name 元素來定義快取原則所指向的特定物件。
位置
請將 cachespec.xml 檔與部署模組放在一起。 請利用組合工具來定義可快取物件。 請參閱組裝應用程式的相關主題。 您也可以將廣域 cachespec.xml 檔放在應用程式伺服器 properties 目錄下。 在應用程式伺服器內容目錄中有廣域 cachespec.xml 檔且應用程式中有 cachespec.xml 檔的情況下,會合併兩個 cachespec.xml 檔中的項目。如果這兩個檔案中有衝突的項目,則應用程式的 cachespec.xml 檔中的項目會置換該應用程式的廣域 cachespec.xml 檔中的項目。
在應用程式伺服器 properties 目錄中,提供了 cachespec.dtd 檔。 cachespec.dtd 檔定義可以在 cachespec.xml 檔中的合法結構和元素。
使用注意事項
- Cachespec.xml 元素
- cachespec.xml 檔的根元素是 cache,它包含 cache-instance 和 cache-entry 元素。 cache-entry 元素也可以放在 cache-instance 元素內,使這個快取項目成為快取實例中非預設的一部分。
- cache-instance
- <cache-instance name="cache_instance_name"></cache-instance>
name 屬性是快取實例在管理主控台中設定的「Java™ 命名和目錄介面 (JNDI)」名稱。
每個 cache-instance 元素都必須包含至少一個 cache-entry 元素。 在 cache-instance 元素內相符的快取項目會在 name 屬性所指定的 Servlet 快取實例中進行快取。 如果在各 cache-instance 元素之間存在相同的 cache-entry 元素,會使用第一個相符的 cache-entry 元素。
- cache-entry
- 每個快取項目都必須指定動態快取用來處理這個項目的某些基本資訊。
這一節說明 cachespec.xml 檔的每個快取項目元素的功能,其中包括:
- class
- name
- sharing-policy
- skip-cache
- property
- cache-id
當使用 WebSphere® Application Server 的現行版本時,您可以為單一 Servlet 定義多重快取原則。 比方說,如果您在 web.xml 檔中,定義某個 Servlet 的多重對映,您可以為每項對映各建立一個快取項目。
- class
<class>command | servlet | webservice | JAXRPCClient | static | portlet </class>
這個元素是必要的,它指定應用程式伺服器要如何解釋其餘的快取原則定義。 servlet 值是指部署在 WebSphere Application Server Servlet 引擎中的 Servlet 和 JavaServer Pages (JSP) 檔。 webservice 類別利用 Web 服務要求的特殊元件類型來延伸 Servlet。 JAXRPCClient 用來定義 Web 服務用戶端快取的快取項目。 command 值是指使用 WebSphere Application Server 指令程式設計模型的類別。 static 值是指包含靜態內容的檔案。 下列範例說明 class 元素:
<class>command</class> <class>servlet</class> <class>webservice</class> <class>JAXRPCClient</class> <class>static</class> <class>portlet</class>
- name
<name>name</name>
請對 name 元素使用下列準則來指定可快取的物件:- 對於指令,這個必要元素必須包含所配置物件的套件名稱(如果有的話)和類別名稱,其中包括尾端的 .\class。
重要: 如果您在 cachespec.xml 檔中指定指令快取,且沒有對應用程式執行所在的應用程式伺服器啟用 Servlet 快取,您將會得到錯誤。 應用程式伺服器仍會試圖取得快取實例;因此,啟用 Servlet 快取會消除錯誤。
- 對於 Servlet 和 JSP 檔,如果 cachespec.xml 檔在 WebSphere Application Server properties 目錄中,這個必要元素必須包含要快取的 JSP 檔或 Servlet 的完整 URI。 對於 Servlet 和 JSP 檔,如果 cachespec.xml 檔在 Web 應用程式中,這個必要元素可以相對於特定的 Web 應用程式環境定義根目錄。
- 對於 Web 服務,請納入與您想要快取的 Web 服務相關聯的「簡易物件存取通訊協定 (SOAP)」路由器的「通用資源 ID (URI)」。
- 對於 Web 服務用戶端快取,名稱是可快取的 Web 服務的目標端點,或是與可快取的 Web 服務相關聯的 SOAP 路由器的 URI。 您可以利用「Web 服務說明語言 (WSDL)」檔中的 SOAP 位址位置來定義 Web 服務用戶端快取的名稱。
- 對於靜態檔案,如果 cachespec.xml 檔在 WebSphere Application Server properties 目錄中,這個必要元素必須包含要快取之檔案的完整 URI。 如果 cachespecm.xml 檔在 Web 應用程式中,這個必要元素可以相對於特定的 Web 應用程式環境定義根目錄。 對於含有環境定義根目錄的 Web 應用程式,使用靜態類別的檔案,其快取原則必須指定在 Web 應用程式中,而不是在 properties 目錄中。
- 對於 Portlet,如果 cachespec.xml 檔在 WebSphere Application Server properties 目錄中,這個必要元素必須包含要快取之 Portlet 的完整環境定義路徑和名稱。 如果 cachespec.xml 檔在 Web 應用程式中,這個必要元素是相對於特定 Web 應用程式環境定義根目錄的 Portlet 名稱。
提示: cachespec.xml 檔的偏好位置在 Web 應用程式中,而不是在 properties 目錄中。如果您有不同的對映指向相同的 Servlet,您可以在 cache-entry 內指定多個 name 元素。
下列範例說明 name 元素:<name>com.mycompany.MyCommand.class</name> <name>default_host:/servlet/snoop</name> <name>com.mycompany.beans.MyJavaBean</name> <name>mywebapp/myjsp.jsp</name> <name>/soap/servlet/soaprouter</name> <name>http://remotecompany.com:9080/service/getquote</name> <name>mywebapp/myLogo.gif</name>
- 對於指令,這個必要元素必須包含所配置物件的套件名稱(如果有的話)和類別名稱,其中包括尾端的 .\class。
- sharing-policy
<sharing-policy> not-shared | shared-push | shared-pull | shared-push-pull</sharing-policy>
在含有分散式快取的叢集內工作時,這些值會決定從這個物件建立之項目的共同性質。 如果這個元素不存在,會使用 not-shared 值。
在單一伺服器環境中,not-shared 是唯一的有效的值。
在 z/OS® 平台上,您可以利用 DynacacheEnableUnmanagedServerReplication 和 DynacacheUnmanagedServerReplicationType Java 虛擬機器 (JVM) 自訂內容,在基本應用程式伺服器中的服務者之間啟用複制。 當啟用複制時,預設值為 not-shared。 這個內容不會影響透過「邊緣片段快取」內容配送至 Edge Side Include 處理器。
請參閱「配置快取抄寫」一文,以取得相關資訊。
表 1. Sharing-policy 值. sharing-policy 的值和說明。 值 說明 not-shared 這個物件的快取項目在不同的應用程式伺服器之間不共用。 這些項目可以包含不可序列化的資料。 比方說,如果 <class> 類型支援快取的 Servlet,這個 Servlet 可以將不可序列化的物件放入要求屬性中。 避免困難: 應用程式伺服器一律會抄寫失效項目。 它們不會受共用原則的影響。gotcha
shared-push 這個物件的快取項目會自動配送到其他應用程式伺服器或協同操作的 Java 虛擬機器 (JVM) 中的動態快取中。 每個快取在建立時就有了這個項目的副本。 這些項目無法儲存不可序列化的資料。 shared-pull 這個物件的快取項目會在應用程式伺服器之間隨需共用。 如果應用程式伺服器得到這個物件的快取遺失,它會查詢協同操作的應用程式伺服器,以瞭解它們是否有這個物件。 如果沒有任何應用程式伺服器有這個物件的快取副本,原始應用程式伺服器會執行要求並產生這個物件。 這些項目無法儲存不可序列化的資料。 不建議採用這個共用模式。 shared-push-pull 這個物件的快取項目會在應用程式伺服器之間隨需共用。 當應用程式伺服器產生快取項目時,它會向所有協同操作的應用程式伺服器播送已建立之項目的快取 ID。 之後,每個伺服器會知道是否存在任何給定快取 ID 的項目。 當給定了對這個項目的要求時,應用程式伺服器就會知道是否要產生項目或從他處取回這個項目。 這些項目無法儲存不可序列化的資料。 下列範例顯示共用原則:<sharing-policy>not-shared</sharing-policy>
- skip-cache
- 取得要求屬性的名稱,如果這個屬性出現在要求環境定義中,它會指示不能從指定的快取實例中擷取回應。
在預覽正式作業系統中的內容及驗證應用程式是否依預期運作和執行時,這個內容很有用。
<cache> <skip-cache-attribute>att1</skip-cache-attribute> <!–只適用於基本快取 - -> ... <cache-instance name="instance1"> <skip-cache-attribute>att2</skip-cache-attribute> <!-只適用於這個實例 - -> ... </cache-instance> </cache>
- property
<property name="key">value</property>
其中 key 是這個快取項目元素的內容名稱,value 是對應的值。
您可以在可快取物件上設定選用的內容,如已配置之 Servlet 的說明。 這個類別決定了快取項目的有效內容。 這時會定義下列內容:
表 2. 內容值. 內容值和有效類別。 內容 有效類別 值 ApplicationName 全部 置換 JavaEEName 應用程式 ID,使多個應用程式能夠分享共用的快取 ID 名稱空間。 EdgeCacheable Servlet true 或 false。預設值為 false。 如果這個內容是 true,就會在外部從 Edge Side Include 處理器要求給定的 Servlet 或 JSP 檔。 Servlet 或 JSP 檔是否可快取,取決於其餘的快取規格。 一般的邊緣可快取的快取項目,其容許的元件有 PARAMETER、HEADER、COOKIE 和 PATH_INFOSERVLET_PATH
ExternalCache Servlet 和 portlet 指定外部快取名稱。 外部快取名稱必須符合外部快取群組名稱。 consume-subfragments Servlet、Web 服務或 Portlet true 或 false。預設值為 false。 當快取 Servlet 時,只會儲存這個 Servlet 的內容,其中包括它要包含或轉遞的任何其他片段的位置保留元。 consume-subfragments (CSF) 告知快取在包含子 Servlet 時不要停止保存內容。 標示為 CSF 的母項目包括其快取項目中所有片段的全部內容,這會產生一個很大的快取項目,含有整個項目樹狀結構的內容,但沒有包含或轉遞。 consume-subfragments 可以儲存數量可觀的應用程式伺服器處理,但通常只在外部 HTTP 要求包含所有必要的資訊,可供確定已包括之片段的整個樹狀結構時才有用。 請利用 <exclude> 元素來告訴快取停止使用已排除的片段,改成建立用於包含或轉遞的位置保留元。 例如,將 A.jsp 從 consume-subfragment 中排除,如下所示:<property name="consume-sbufragments">true <exclude>/A.jsp<exclude> </property>
do-not-consume Servlet、Web 服務或 Portlet true 或 false。預設值為 false。 當母片段的 consume-subfragment 內容設為 true 時,子片段內容會儲存在母項的快取項目中。 do-not-consume (DNC) 會告訴快取停止在母 cache-entry 中儲存這個片段的內容,改成建立用於包含或轉遞的位置保留元。 alternate_url Servlet 指定用來呼叫 Servlet 或 JSP 檔案的替代 URL。 只有在快取項目也設定 EdgeCacheable 內容時,這個內容才有效。 persist-to-disk 全部 true 或 false。預設值為 true。 當這個內容設為 false 時,如果發生溢位或伺服器停止的情況,快取項目不會寫入磁碟中。 save-attributes Servlet 和 portlet true 或 false。預設值為 true。 當這個內容設為 false 時,要求屬性不會與快取項目一起儲存。 請利用 <exclude> 元素來指定不適用於 save-attributes 內容的要求屬性。 比方說,如果只有 attr1 屬性要與快取項目一起儲存:<property name= "save-attributes">false <exclude>attr1</exclude> </property>
如果要儲存快取項目中 attr1 屬性以外的所有屬性,請在前述範例中,將這個內容設為 true。 如果您沒有使用 <exclude> 元素,要求屬性會全部與快取項目一起儲存,或全部不儲存。
delay-invalidations 指令 true 或 false。當這個內容設為 true 時,在執行根據這個快取項目中的失效規則而使快取物件失效的指令之後,快取項目便會失效。 依預設,失效是發生在執行指令之前。 store-cookies Servlet 和 portlet On 或 off。預設值為 On。 這個內容會將一或多個 Cookie 名稱當作它的引數,這個引數會與快取物件一起儲存,在含有 set-cookie 標頭的回應中,Servlet 快取會將它們還原。 請依照下列方式,將 cookie1 以外的所有 Cookie 另存為 cache-entry 的一部分:<property name="store-cookies">true <exclude>cookie</exclude> </property>
請依照下列方式,只將 cookie1 另存為 cache-entry 的一部分:<property name="store-cookies">false <exclude><cookie1</exclude> </property>
ignore-get-post Servlet 和 portlet true 或 false。預設值為 false。 當這個內容設為 true 時,除非定義了 requestType 元件 requestType 元件子元素,否則要求類型不會附加到 GET 和 POST 要求的 cache-id。 依預設,要求類型會自動附加到 GET 和 POST 要求的 cache-id。 ignore-char-encoding Servlet 和 portlet true 或 false。預設值為 false。當這個內容設為 true 時,不會將 UTF-8 字元編碼附加到快取 ID。 將 UTF-8 字元編碼附加到快取 ID,可能會導致片段有多份副本,從而不必要地增加快取的大小。 do-not-cache Servlet 和 portlet 定義既未快取,母項也並未使用的片段。
or<cache-entry> ... <property name="do-not-cache">true</property>
<cache-id> <property name="do-not-cache">true</property> </cache-id> </cache-entry>
- cache-id
- 如果要快取物件,應用程式伺服器必須知道如何產生這個物件各不同呼叫的唯一 ID。
這些 ID 是從使用者編寫的自訂 Java 程式碼建置而來,或從每個快取項目的快取原則中所定義的規則建置而來。
在發生下列任何情況之前,每個快取項目都可以有多個會循序執行的快取 ID 規則:
- 有規則傳回不是空白的快取 ID,或者
- 已無規則可執行。
每個 cache-id 元素都定義一個物件的快取規則,它是由 component、timeout、inactivity、priority、property、idgenerator 和 metadatagenerator 等子元素組成。 下列範例說明 cache-id 元素:<cache-id> component*| timeout? | inactivity? | priority? | property* | idgenerator? | metadatagenerator? </cache-id>
- component 子元素
請利用 component 子元素來產生快取 ID 的一部分。 component 子元素由 id、type 和 ignore-value 屬性以及 index、method、field、required、value 和 not-value 等元素組成。
- 利用 id 屬性來識別元件。
- 利用 type 屬性來識別元件的類型。
下表列出 type 的值。
避免困難: 在 cachespec.xml 檔中指定參數 component 子元素時,Web 儲存器會根據從要求物件取得的編碼設定來設定字元編碼。 如果 Servlet 隨後呼叫 setCharacterEncoding 方法,這個方法會無效,因為字元編碼在設定之後無法變更。gotcha
表 3. type 值. type 的有效類別和意義。 類型 有效類別 意義 方法 指令 在指令或物件上呼叫指示的方法 欄位 指令 擷取指令或物件中具名的欄位 參數 Servlet 和 portlet 從要求物件中擷取指定的參數值 parameter-list Servlet 和 portlet 擷取指定參數的值清單 避免困難: 對於所有這個名稱的參數,快取會抓取其值,並依照抓取順序,利用所有這些值來建立快取 IDgotcha
session Servlet 和 portlet 從 HTTP 階段作業中擷取指定的值 cookie Servlet 擷取指定的 cookie 值 attribute Servlet 和 portlet 擷取指定的要求屬性 header Servlet、Web 服務和 Portlet 擷取指定的要求標頭 pathInfo Servlet 從要求中擷取 pathInfo 元素 servletpath Servlet 擷取 Servlet 路徑 locale Servlet 和 portlet 擷取要求語言環境 小心: 當使用 RRD 時,只允許將 locale 元件用於邊緣可快取項目。 locale 元件對所有其他 ESI 版本無效。requestType Servlet 和 portlet 從要求中擷取 HTTP 要求方法。 小心: 當使用 RRD 時,只允許將 requestType 元件用於邊緣可快取項目。 requestType 元件對所有其他 ESI 版本無效。tiles_attribute Servlet 和 portlet 從並排中擷取屬性值。 SOAPEnvelope Web 服務和 Web 服務用戶端快取 從 Web 服務要求中擷取 SOAPEnvelope 元素。 Hash 的 ID 屬性會使用 SOAPEnvelope 元素的 Hash,Literal 則是依接收情況來使用 SOAPEnvelope 元素。 SOAPAction Web 服務 如果 SOAPAction 標頭可用,便擷取 Web 服務要求的這個標頭。 serviceOperation Web 服務 擷取 Web 服務要求的服務作業 serviceOperationParameter Web 服務 從 Web 服務要求中擷取指定的參數 operation Web 服務用戶端快取 指示「Web 服務說明語言 (WSDL)」檔中的作業類型。 id 屬性會被忽略,值是作業或方法名稱。 如果指定了作業的名稱空間,便將值格式化為 namespaceOfOperation:nameOfOperation。 part Web 服務用戶端快取 指示 WSDL 檔或要求參數中的輸入訊息組件。 它的 id 屬性是組件或參數名稱,值是組件或參數值。 SOAPHeaderEntry Web 服務用戶端快取 擷取 Web 服務要求的「簡易物件存取通訊協定 (SOAP)」標頭中的特殊資訊。 id 屬性指定項目的名稱。 另外,SOAP 要求中 SOAP 標頭的項目必須有 actor 屬性,其中包含 com.ibm.websphere.cache。 例如: <soapenv:Header> <getQuote soapenv:actor="com.ibm.websphere.cache">IBM</getQuote> </soapenv:Header>
portletSession Portlet 從 Portlet 階段作業中擷取指定的值 portletWindowId Portlet 從 Portlet 要求物件中擷取 Portlet 視窗 ID portletMode Portlet 從 Portlet 要求物件中擷取 Portlet 模式 portletWindowsState Portlet 從 Portlet 要求物件中擷取 Portlet 視窗狀態 sessionID Servlet 和 portlet 擷取 HTTP 階段作業 ID - 請利用 ignore-value 屬性來指定是否要在快取 ID 的構成中使用這個元件傳回的值。 這個屬性是選用的,預設值為 false。 如果是 true 值,在建立快取 ID 時,只會使用元件的 ID,或是在建立相依 ID 或無效 ID 時不使用輸出。
- 利用 method 元素,對傳回的物件呼叫空方法。
您可以在任何組合中,建立方法和欄位物件的無限巢狀結構。
這個方法必須是公用的,且對邊緣可快取元件無效。
例如:
<component id="getUser" type="method"><method>getUserInfo <method>getName</method></method></component>
這個方法相當於 getUser().getUserInfo().getName()
對於可以傳回物件的 attribute、method 或 field 等元件類型,當傳回的物件是集合或陣列時,是利用集合或陣列中以逗點區隔的元素清單來建立 ID。 比方說,如果要求屬性 users 傳回 [a, b] 陣列,且快取項目的定義如同下列範例:
快取 ID 會包含 users: a,b 字串。 相依 ID 是 dep: a,b。<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry>
請將 multipleIDs 屬性與元件類型搭配使用,根據集合或陣列中的項目來指定和產生多個相依 ID(或無效 ID)。 例如:
快取原則將產生下列相依 ID:<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>
- dep:a,b
- dep:a
- dep:b
請利用具有前一元件類型的 index 元素,只將集合或陣列中位於指定索引位置的元素值新增到要建立的 ID 中。
前一個快取原則會產生下列元件,以便用於快取 ID:users: b。 請利用 <method> 元素,對傳回的物件呼叫空方法。<cache-entry> <class>servlet</class> <name>xxx.jsp</name> <cache-id> . . <component id="users" type="attribute"> <required>true</required> <index>1</index> </component> . . </cache-id> <dependency-id>dep <component id="users" type="attribute" multipleIDs="true"> <required>true</required> </component> </dependency-id> </cache-entry>
- 利用 field 元素來存取傳回的物件其中的欄位。
您可以在任何組合中,建立方法和欄位物件的無限巢狀結構。
這個欄位必須是公用的。
這個欄位對邊緣可快取元件無效。
例如:
<component id="getUser" type="method"><method>getUserInfo <field>name</field></method></component>
這個方法相當於 getUser().getUserInfo().name 方法。
- 利用 required 元素,指定這個元件是否必須傳回這個快取 ID 的非空值來代表有效的快取。
如果設為 true,這個元件必須傳回這個快取 ID 的非空值來代表有效的快取 ID。
如果設為 false(預設值),便在快取 ID 構成中使用非空值,空值表示在 ID 構成中根本不使用這個元件。
例如:
<required>true</required>
- 請利用 value 元素來指定在快取 ID 構成中使用這個元件所需符合的值。
例如:
<component id="getUser" type="method"><value>blue</value> <value>red</value> </component>
- 請利用 not-value 元素來指定在快取 ID 構成中使用這個元件所不得相符的值。
這個方法類似於 value 元素,但改成規定快取中定義的值。
當存在多個無效的值時,您可以使用多個 not-value 元素。
例如:
<component id="getUser" type="method"> <required>true</required> <not-value>blue</not-value> <not-value>red</not-value></component>
component 子元素可以有 method 和 field 元素,以及 value 或 not-value 元素。 method 和 field 元素只適用於指令。 下列範例說明 component 子元素的屬性:<component id="isValid" type="method" ignore-value="true"><component>
- timeout 子元素
- timeout 子元素用來指定快取項目的絕對存活時間 (TTL) 值。
例如,
<timeout>value</timeout>
其中 value 是保留快取項目的時間量(秒)。 記憶體中的快取項目,只要它們仍在記憶體中,就會無限期地保留。 儲存在磁碟上的快取項目,只要 24 小時未存取,就會收回。
- inactivity 子元素
- inactivity 子元素用來根據快取項目的前次存取時間,指定快取項目的存活時間 (TTL) 值。
它是 cache-id 元素的子元素。
其中 value 是在前次快取命中之後,將快取項目保留在快取中的時間量(秒)。<inactivity>value</inactivity>
- priority 子元素
- priority 子元素用來指定快取中快取項目的優先順序。
快取的近期最少使用 (LRU) 演算法會利用優先順序加權來確定,在快取儲存空間不足時,要從快取中移除哪些項目。
例如,
<priority>value</priority>
其中 value 是 1-16 之間的正整數,頭尾包括在內。
- 範例
- 下列範例將快取項目保存在快取中至少 35 秒,且最多保存 180 秒。
如果在每個 35 秒不活動期間存取快取項目,不活動期間會延伸另一個 35 秒。
不過,由於也配置了 timeout 元素,所以快取項目一律會在 180 秒後失效。
如果未在 35 秒期間存取快取項目,就會從快取中移除這個項目。
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>35</inactivity> <priority>1</priority> </cache-id>
- 下列範例將快取項目保存在快取中至少 600 秒。
如果在每個 600 秒期間存取了快取項目,不活動期間會延伸另一個 600 秒。
如果未在 600 秒期間存取快取項目,就會從快取中移除這個快取項目。
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
- 在下列範例中,inactivity 的值沒有意義,因為逾時期間小於不活動期間。
無論存取快取項目的頻率如何,快取項目一律在 180 秒之後失效。
<cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <inactivity>600</inactivity> <priority>1</priority> </cache-id>
- property 子元素
- 請利用 property 子元素來指定快取項目的一般內容。例如,
<property name="key">value</property>
其中 key 是要定義的內容名稱,value 是對應的值。
例如:<property name="description">The Snoop Servlet</property>
表 4. property 子元素值。. property 有效類別和意義。 內容 有效類別 意義 sharing-policy/timeout/priority 全部 當要求符合這個快取 ID 時,置換包含快取項目的設定。 EdgeCacheable Servlet 當要求符合這個快取 ID 時,置換包含快取項目的設定。
idgenerator 和 metadatagenerator 子元素
<idgenerator> class name </idgenerator>
其中 class name 是要使用之類別的完整名稱。
請在共用程式庫中定義這個產生器類別。<metadatagenerator> classname </metadatagenerator>
在這個範例中,類別名稱是要使用之類別的完整名稱。
請在共用程式庫中定義這個產生器類別。dependency-id 元素
請利用 dependency-id 元素來指定將多個快取項目與同一個群組 ID 關聯起來的其他快取 ID。
dependency-id 元素的值是通過將相依 ID 基本字串與其元件元素傳回的值連結起來而產生。 如果必要的元件傳回空值,既不會產生也不會使用整個相依關係。 請透過動態快取 API 或利用 invalidation 元素來明確驗證相依 ID。 在單一 cache-entry 元素中,可以存在多個相依 ID 規則。 所有相依關係規則都是個別執行。
invalidation 元素
<invalidation>component* | invalidationgenerator? </invalidation>
invalidationgenerator 子元素
<invalidationgenerator>class name</invalidationgenerator>
在這個範例中,classname 是實作 com.ibm.websphere.cache.webservices.InvalidationGenerator 介面的類別的完整名稱。
請在共用程式庫中定義這個產生器類別。cachespec.xml 檔範例
<?xml version="1.0" ?> <!DOCTYPE cache SYSTEM "cachespec.dtd"> <cache> <cache-entry> <class>servlet</class> <name>/MyDefinedServlet</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MyAnnotatedServlet</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MyProgrammaticServlet</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MyProgrammaticServlet2</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MyProgrammaticServlet3</name> <cache-id> <timeout>3600</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/StartAsyncDispatchCompleteAltPath</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testDoNotConsume</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testCacheChildONLY</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/StartAsyncDispatchComplete</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testDoNotConsume</value> </component> <property name="consume-subfragments">false</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testConsumeSubFragments</value> </component> <property name="consume-subfragments">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testTimeout</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>testError</value> </component> <property name="do-not-consume">true</property> <timeout>5000</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DiscardParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AttrA1.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AttrA2.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AttrA3.jsp</name> <property name="consume-subfragments">true</property> <property name="save-attributes"> false <exclude>saveThisAttr</exclude> </property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AttrC3.jsp</name> <property name="do-not-cache">true</property> <property name="save-attributes">false</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/CacheTest.jsp</name> <cache-id> <component id="output" type="attribute"> <required>true</required> </component> <timeout>180</timeout> </cache-id> <dependency-id> response <component id="output" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>Include1.jsp</name> <cache-id> <component id="outputForInclude1" type="attribute"> <required>true</required> </component> <timeout>120</timeout> <priority>2</priority> </cache-id> <dependency-id> response <component id="output" type="attribute"> <required>true</required> </component> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESIParent.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> dep1 <component id="parm1" type="parameter" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESIChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm2" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> dep4 <component id="parm2" type="parameter" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI1Cached.jsp</name> <cache-id> <component id="param2" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI1</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI1Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="param2" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI1</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI2Cached.jsp</name> <cache-id> <timeout>240</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI2</dependency-id> </cache-entry> <cache-entry> <property name="EdgeCacheable">true</property> <name>ESI2Edgeable.jsp</name> <class>servlet</class> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI2</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI3Cached.jsp</name> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI3</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI3Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI3</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI4Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI4</dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI5Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI5</dependency-id> </cache-entry> <!--Test ESI w/ wildcard character--> <cache-entry> <class>servlet</class> <name>ESI6Edgeable.jsp</name> <cache-id> <component id="*" type="parameter"> <required>false</required> </component> <timeout>180</timeout> <property name="EdgeCacheable">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>ESI7Edgeable.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <priority>2</priority> </cache-id> <cache-id> <timeout>60</timeout> <priority>2</priority> </cache-id> <dependency-id>ESI7</dependency-id> </cache-entry> <cache-entry> <class>webservice</class> <name>/services/CounterService1</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="Request-Hash" type="header"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> <property name="description"> This is SOAP Servlet. </property> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="in" type="serviceOperationParameter"> <value>xxx</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <not-value>urn:counterservice1:counter1</not-value> </component> <component id="in" type="serviceOperationParameter"> <not-value>xxx</not-value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Literal" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="SOAPAction"> <value>urn:lookup</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> <value>urn:counterservice2:counter2</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="" type="serviceOperation"> <value>urn:counterservice1:counter1</value> </component> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id>depId</dependency-id> <invalidation> depId <component id="" type="serviceOperation" ignore-value="true"> <value>urn:counterservice1:reset1</value> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>TimeoutPos.jsp</name> <cache-id> <timeout>10</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.servlet.pathinfo1.class</name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <component id="genPathInfo" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.servlet.pathinfo2.class</name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/pathinfo1/xxxx</name> <cache-id> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/pathinfo1/yyyy</name> <cache-id> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <sharing-policy>shared-pull</sharing-policy> <name>com.ibm.ws.cache.servlet.reqparmtest.class</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>15</timeout> <priority>1</priority> </cache-id> <dependency-id> reqparm <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> reqparm <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <sharing-policy>shared-push</sharing-policy> <name> com.ibm.ws.cache.servlet.reqparmtest_sharePush.class </name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>15</timeout> <priority>1</priority> </cache-id> <dependency-id> reqparm <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> reqparm <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.servlet.reqattrtest.class</name> <cache-id> <component id="arg" type="attribute"> <required>false</required> </component> <component id="IAmRequired" type="attribute" ignore-value="true"> <required>true</required> </component> <component id="int" type="attribute"> <method>intValue</method> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STMTestServlet</name> <sharing-policy>shared-push</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>servlet</class> <name>/STMTestServlet_shareNone</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STMTestServlet_shareDefault</name> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STMTestServlet_sharePush</name> <sharing-policy>shared-push</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STMTestServlet_sharePull</name> <sharing-policy>shared-pull</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STMTestServlet_sharePushPull</name> <sharing-policy>shared-push-pull</sharing-policy> <cache-id> <component id="parm" type="parameter"> <required>false</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>SITimeStamp</name> <cache-id> <component id="parm" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> </cache-instance> <cache-entry> <class>servlet</class> <name>/CloseAndFlush</name> <cache-id> <component id="action" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>servlet</class> <name>/TimeStamp</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity0" type="parameter"> <required>true</required> </component> <timeout>30</timeout> <inactivity>0</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity1" type="parameter"> <required>true</required> </component> <timeout>60</timeout> <inactivity>30</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity2" type="parameter"> <required>true</required> </component> <inactivity>30</inactivity> <priority>1</priority> </cache-id> <cache-id> <component id="inactivity3" type="parameter"> <required>true</required> </component> <timeout>30</timeout> <inactivity>60</inactivity> <priority>1</priority> </cache-id> <cache-id> <property name="ignore-get-post">false</property> <component id="ignore" type="parameter"> <value>false</value> </component> </cache-id> <cache-id> <property name="ignore-get-post">true</property> <component id="ignore" type="parameter"> <value>true</value> </component> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> </cache-instance> <cache-entry> <class>servlet</class> <name>/TimeStamp1</name> <property name="persist-to-disk">false</property> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/TimeStamp2</name> <property name="persist-to-disk">false</property> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="timeout" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp2 <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp2 <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-instance name="services/cache/servletInstance_1"> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.MyQuoteCommand.class</name> <cache-id> <timeout>0</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id>MyQuoteTicker</dependency-id> </cache-entry> </cache-instance> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommand.class</name> <cache-id> <timeout>180</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id> ticker <component id="getTicker" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommandComplex.class</name> <cache-id> <timeout>240</timeout> <priority>3</priority> <component id="getComplex" type="method"> <method>getTicker</method> </component> </cache-id> <dependency-id> ticker <component id="getComplex" type="method"> <field>ticker</field> </component> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.QuoteCommandIdGen</name> <cache-id> <timeout>120</timeout> <priority>3</priority> <idgenerator> com.ibm.ws.cache.command.QuoteIdGenerator </idgenerator> </cache-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.NoOutputPropCommand</name> <cache-id> <timeout>180</timeout> <priority>3</priority> <component id="getTicker" type="method" /> </cache-id> <dependency-id> ticker <component id="getTicker" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/bufferwritercached</name> <cache-id> <timeout>0</timeout> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/bufferstreamcached</name> <cache-id> <timeout>0</timeout> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/BasicServlet</name> <cache-id> <component id="testCookie" type="cookie"> <required>true</required> </component> <timeout>30</timeout> </cache-id> <cache-id> <component id="action" type="parameter" /> <component id="" type="locale" /> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.WatchListCommand</name> <cache-id> <timeout>360</timeout> <priority>4</priority> <component id="userGroup" type="field" /> <component id="userNumber" type="field" /> </cache-id> <dependency-id> USER <component id="userGroup" type="field" /> <component id="userNumber" type="field" /> </dependency-id> </cache-entry> <cache-entry> <class>command</class> <name>com.ibm.ws.cache.command.WatchListCommandMixed</name> <cache-id> <timeout>360</timeout> <priority>4</priority> <component id="userGroup" type="field" /> <component id="getUserNumber" type="method" /> </cache-id> <dependency-id> USER <component id="userGroup" type="field" /> <component id="getUserNumber" type="method" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.command.CommandTestServlet.class</name> <invalidation> USER <component id="action" type="parameter" ignore-value="true"> <value>invalidate</value> </component> <component id="group" type="parameter" /> <component id="user" type="parameter" /> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>consumeParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> <priority>4</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>consumeParent2.jsp</name> <cache-id> <timeout>0</timeout> <priority>4</priority> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>consumeParentForward.jsp</name> <cache-id> <timeout>0</timeout> <priority>4</priority> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/esiForwardInclude.jsp</name> <cache-id> <property name="EdgeCacheable">true</property> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/esiParentConsume.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <property name="EdgeCacheable">true</property> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/alturlcontroller1</name> <property name="EdgeCacheable">true</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AltUrlTest2.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller2</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AltUrlTest3.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller3</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AltUrlTest4.jsp</name> <property name="EdgeCacheable">true</property> <property name="alternate_url">/alturlcontroller4</property> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/AltUrlTest5.jsp</name> <cache-id> <timeout>600</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.servlet.reqparmlisttest.class</name> <cache-id> <component id="parm" type="parameter-list"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SaveAttributesParent.jsp</name> <sharing-policy>not-shared</sharing-policy> <property name="consume-subfragments">false</property> <property name="save-attributes">false</property> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> <dependency-id> timestamp <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> timestamp <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/ReqAttA.jsp</name> <cache-id> <component id="ReqAttr" type="attribute"> <required>true</required> </component> <timeout>0</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/ServletPathTest</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="" type="servletpath"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/ESICookie.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/ESIQueryStringParent.jsp</name> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/ESIQueryStringChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="scenario" type="parameter"> <required>true</required> </component> <component id="parm1" type="parameter"> <required>true</required> </component> <component id="testCookie" type="cookie"> <required>true</required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>com.ibm.ws.cache.servlet.IncludeTimeStamp.class</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="type" type="attribute"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/Counter </name> <cache-id> <component id="http://schemas.xmlsoap.org/soap/envelope/:Counter" type="SOAPHeaderEntry" /> <timeout>0</timeout> </cache-id> <cache-id> <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Counter" type="SOAPHeaderEntry" /> <timeout>0</timeout> </cache-id> <cache-id> <component id="" type="operation"> <value> http://counter.webservices.cache.ws.ibm.com:counter1 </value> </component> <component id="in" type="part"></component> <timeout>0</timeout> </cache-id> <cache-id> <component id="Hash" type="SOAPEnvelope" /> <timeout>0</timeout> </cache-id> <dependency-id> Counter_in <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Counter" type="SOAPHeaderEntry"> <required>true</required> </component> </dependency-id> <invalidation> Counter_in <component id="http://schemas.xmlsoap.org/soap/envelope/:urn:headerNS:Reset" type="SOAPHeaderEntry"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/AddressBookBean </name> <cache-id> <component id="" type="operation"> <value> http://addr.webservices.cache.ws.ibm.com:getAddressFromName </value> </component> <component id="name" type="part"></component> <component id="country" type="part"></component> <timeout>0</timeout> </cache-id> <dependency-id> AddressBook <component id="" type="operation" ignore-value="true"> <value> http://addr.webservices.cache.ws.ibm.com:getAddressFromName </value> <required>true</required> </component> <component id="name" type="part"> <required>true</required> </component> </dependency-id> <invalidation> AddressBook <component id="" type="operation" ignore-value="true"> <value> http://addr.webservices.cache.ws.ibm.com:invalidate </value> <required>true</required> </component> <component id="name" type="part"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>JAXRPCClient</class> <name> http://localhost:9080/dynacachetests/services/StockQuote </name> <sharing-policy>shared-push</sharing-policy> <cache-id> <idgenerator> com.ibm.ws.cache.webservices.stock.QuoteIdGenerator </idgenerator> <metadatagenerator> com.ibm.ws.cache.webservices.stock.QuoteMetaDataGenerator </metadatagenerator> <priority>5</priority> </cache-id> <invalidation> http://localhost:9080/dynacachetests/services/StockQuote <invalidationgenerator> com.ibm.ws.cache.webservices.stock.QuoteInvalidationGenerator </invalidationgenerator> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/basic.do</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> struts <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> struts <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/forward.do</name> <cache-id> <property name="EdgeCacheable">true</property> <component id="type" type="parameter"> <required>true</required> <value>esiParentConsume</value> </component> <component id="JSESSIONID" type="cookie" /> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/strutsTimeStamp.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/STTimeStamp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/child1.do</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/stConsumeFragment.do</name> <cache-id> <component id="whoami" type="parameter"> <required>true</required> <value>grandparent</value> </component> <property name="consume-subfragments">true</property> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/stConsumeParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/stDNCFragment.do</name> <property name="consume-subfragments">true</property> <cache-id> <component id="whoami" type="parameter"> <required>true</required> <value>grandparent</value> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> DNC <component id="whoami" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/stDNCGrandChild.jsp</name> <property name="do-not-consume">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/stSaveAttrParent.do</name> <property name="save-attributes">false</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/stDisplayInfo.jsp</name> <cache-id> <component id="lbean" type="session"> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileParent.jsp</name> <cache-id> <component id="type" type="parameter"> <required>true</required> <value>strut</value> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileChild.jsp</name> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileChildServlet</name> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileEsiParent.jsp</name> <cache-id> <component id="type" type="parameter"> <value>edgeable</value> </component> <property name="EdgeCacheable">true</property> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileEsiChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="arg1" type="parameter"> <required>true></required> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileGrandParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileDNCGrandParent.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileCSFChild1.jsp</name> <property name="do-not-consume">true</property> <cache-id> <component id="arg1" type="parameter"> <value>DNC</value> </component> <timeout>180</timeout> <priority>1</priority> </cache-id> <dependency-id> DNC <component id="arg1" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/tileSaveAttrParent.jsp</name> <property name="save-attributes">false</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/header.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/body.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/footer.jsp</name> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/testSTDefinition.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SavAttrParent/TrueExclude</name> <property name="save-attributes"> true <exclude>att1</exclude> </property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SavAttrParent/FalseExclude</name> <property name="save-attributes"> false <exclude>att1</exclude> </property> <cache-id> <timeout>35</timeout> <priority>1</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DCP</name> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DCPParent</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DCPGrandParent</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-instance name="services/cache/servletInstance_2"> <cache-entry> <class>servlet</class> <name>/TimeStampCM2</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> </cache-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_3"> <cache-entry> <class>servlet</class> <name>/TimeStampCM3</name> <sharing-policy>not-shared</sharing-policy> <cache-id> <component id="arg1" type="parameter"> <required>true</required> </component> </cache-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_4"> <cache-entry> <class>servlet</class> <name>ServletInstance_Esi1_ESIParent.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> ci_dep1 <component id="parm1" type="parameter" /> </dependency-id> </cache-entry> </cache-instance> <cache-instance name="services/cache/servletInstance_5"> <cache-entry> <class>servlet</class> <name>ServletInstance_Esi2_ESIChild.jsp</name> <property name="EdgeCacheable">true</property> <cache-id> <component id="parm2" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> <dependency-id> ci_dep4 <component id="parm2" type="parameter" /> </dependency-id> </cache-entry> </cache-instance> <cache-entry> <class>servlet</class> <name>JspRecompileTest.jsp</name> <cache-id> <component id="parm1" type="parameter" /> <timeout>180</timeout> <priority>2</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DNCForwardServlet</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test2</value> <value>test3</value> <value>test4</value> <value>test6</value> <value>test8</value> <value>test10</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test7</value> <value>test9</value> </component> <property name="EdgeCacheable">true</property> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DNCGrandParent.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test2</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test3</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <dependency-id> DNC3 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC3 <component id="inv3" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/DNCParent1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test3</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test2</value> </component> <property name="consume-subfragments">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <dependency-id> DNC2 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC2 <component id="inv2" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/DNCChild1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test3</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> <value>test2</value> <value>test4</value> <value>test7</value> </component> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test5</value> </component> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test6</value> </component> <property name="EdgeCacheable">true</property> <property name="do-not-consume">true</property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test10</value> </component> <property name="EdgeCacheable">true</property> <property name="do-not-consume">false</property> </cache-id> <dependency-id> DNC1 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> DNC1 <component id="inv1" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/JSTLForwardServlet</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/JSTLChild1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> <property name="do-not-consume">true</property> </cache-id> <dependency-id> JSTL1 <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> JSTL1 <component id="inv1" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/PreviewServlet</name> <property name="EdgeCacheable">true</property> <property name="consume-subfragments">true</property> <cache-id> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/PreviewChildServlet</name> <property name="EdgeCacheable">true</property> <cache-id> <priority>3</priority> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/IsUncacheable.jsp</name> <cache-id> <component id="cacheable" type="parameter"> <required>true</required> <value>true</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/Afpa.jsp</name> <property name="ExternalCache">afpa</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <!-- CacheMonitor CachePolicies Test entries --> <cache-entry> <class>servlet</class> <name>/CacheMonitorTestServletPolicy</name> <sharing-policy>shared-push</sharing-policy> <property name="EdgeCacheable">true</property> <property name="ExternalCache">CMTextCache</property> <cache-id> <component id="CMTparameter" type="parameter" /> <component id="CMTsession" type="session" /> </cache-id> <cache-id> <component id="CMTcookie" type="cookie" /> <component id="CMTattribute" type="attribute" /> </cache-id> <dependency-id> <component id="CMTparameterList" type="parameter-list" /> </dependency-id> <invalidation> <component id="CMTservletPath" type="servletpath" /> </invalidation> </cache-entry> <cache-entry> <class>command</class> <name>/CacheMonitorTestCommandPolicy</name> <sharing-policy>not-shared</sharing-policy> <property name="ApplicationName">CMTAppName</property> <property name="persist-to-disk">false</property> <property name="delay-invalidations">true</property> <cache-id> <component id="CMTmethod" type="method" /> </cache-id> <cache-id> <component id="CMTfield" type="field" /> </cache-id> <dependency-id> <component id="CMTmethod" type="method" /> </dependency-id> <invalidation> <component id="CMTmethod" type="method" /> </invalidation> </cache-entry> <cache-entry> <class>webservice</class> <name>/CacheMonitorTestWebservicePolicy</name> <sharing-policy>shared-push-pull</sharing-policy> <property name="consume-subfragments">true</property> <property name="do-not-consume">true</property> <cache-id> <component id="CMTSOAPEnvelope" type="SOAPEnvelope" /> <component id="CMTSOAPAction" type="SOAPAction" /> </cache-id> <cache-id> <component id="CMTserviceOperation" type="serviceOperation" /> <component id="CMTserviceOperationParameter" type="serviceOperationParameter" /> </cache-id> <dependency-id> <component id="CMTserviceOperation" type="serviceOperation" /> </dependency-id> <invalidation> <component id="CMTSOAPEnvelope" type="SOAPEnvelope" /> </invalidation> </cache-entry> <cache-entry> <class>portlet</class> <name>/CacheMonitorTestPortletPolicy</name> <sharing-policy>shared-pull</sharing-policy> <property name="save-attributes">false</property> <cache-id> <component id="CMTheader" type="header" /> </cache-id> <cache-id> <component id="CMTlocale" type="locale" /> <component id="CMTrequestType" type="requestType" /> </cache-id> <dependency-id> <component id="CMTrequestType" type="requestType" /> </dependency-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/RangeTimeStamp.jsp</name> <!-- valid specs, will be cached if they match --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest10</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value>9</value> <value> <range low="-20" high="-10" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest11</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value>0</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest20</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest21</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="-50" high="200" /> </value> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest22</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="20" high="30" /> </value> <not-value> <range low="0" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest23</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="0" high="30" /> </value> <not-value> <range low="20" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest24</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="0" high="10" /> </value> <value> <range low="20" high="30" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest30</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest31</value> </component> <component id="inputvalue" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest32</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> <required>false</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest33</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest34</value> </component> <component id="NoSuchParameterIsPresent" type="parameter"> <required>true</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeTest35</value> </component> <component id="inputvalue" type="parameter"> <required>false</required> <value>requiredValue</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <not-value>RangeTest36</not-value> </component> <component id="inputvalue" type="parameter"> <required>false</required> <value>notThis</value> </component> </cache-id> <!-- <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> --> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet</class> <name>/RangeAttrChild.jsp</name> <!-- valid specs, will be cached if they match --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest10</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value>9</value> <value> <range low="-20" high="-10" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest11</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value>0</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest20</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest21</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="-50" high="200" /> </value> <not-value> <range low="-20" high="-10" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest22</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="20" high="30" /> </value> <not-value> <range low="0" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest23</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="0" high="30" /> </value> <not-value> <range low="20" high="50" /> </not-value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest24</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="0" high="10" /> </value> <value> <range low="20" high="30" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest30</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest31</value> </component> <component id="RangeTestAttribute" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest32</value> </component> <component id="NO_SUCH_ATTRIBUTE" type="attribute"> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> <required>false</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>RangeAttrTest33</value> </component> <component id="NO_SUCH_ATTRIBUTE" type="attribute"> <required>true</required> <value> <range low="12" high="50" /> </value> <value> <range low="25" high="100" /> </value> </component> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <!-- ############################################################ --> <skip-cache-attribute>prettypleaseskipcaching</skip-cache-attribute> <cache-entry> <class>servlet</class> <name>/SkipCache1.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SkipCache2.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test02</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SkipCacheChild1.jsp</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/SkipCacheChild2.jsp</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet</class> <name>/CacheCookie1.jsp</name> <cache-id> <component id="test" type="parameter"> <value>test01</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/CacheCookie2.jsp</name> <property name="store-cookies"> true <exclude>cookie1</exclude> </property> <cache-id> <component id="test" type="parameter"> <value>test02</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/CacheCookie3.jsp</name> <property name="store-cookies"> false <exclude>cookie1</exclude> </property> <cache-id> <component id="test" type="parameter"> <value>test03</value> <required>true</required> </component> <timeout>35</timeout> <priority>1</priority> </cache-id> <dependency-id> test <component id="test" type="parameter"> <required>true</required> </component> </dependency-id> <invalidation> test <component id="inv" type="parameter"> <required>true</required> </component> </invalidation> </cache-entry> <cache-entry> <class>servlet</class> <name>/DoNotCacheParent.jsp</name> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> <value>test02</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/DoNotCacheChild.jsp</name> <cache-id> <component id="test" type="parameter"> <value>test01</value> <required>true</required> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <value>test02</value> <required>true</required> </component> <property name="do-not-cache">true</property> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet</class> <name>/ConsumeSubfragmentsExcludeParent.jsp</name> <!-- Note: since the child jsps don't have their own cache-entry's, they should never be cached themselves, only as part of the parent result depending on this config --> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test01</value> </component> <property name="consume-subfragments"> true <exclude>/ConsumeSubfragmentsExcludeChild1.jsp</exclude> </property> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test02</value> </component> </cache-id> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test03</value> </component> <property name="consume-subfragments">true</property> </cache-id> </cache-entry> <!-- ############################################################ --> <cache-entry> <class>servlet</class> <name>/static.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name>/static.html</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name> com.ibm.ws.webcontainer.servlet.SimpleFileServlet.class </name> <cache-id> <component id="" type="pathinfo"> <required>true</required> </component> <component id="useSFServlet" type="parameter"> <required>true</required> <value>true</value> </component> <timeout>300</timeout> </cache-id> </cache-entry> <cache-entry> <class>static</class> <name>/static2.html</name> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MultiIncludeParamRemoteServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>MultiIncludeParamRemoteServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/MultiIncludeParamRemoteServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>MultiIncludeParamServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/RemoteServlet</name> <property name="consume-subfragments">false</property> <property name="do-not-consume">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/RemoteServlet2</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/NonBlockingFragmentResponseServlet</name> <property name="consume-subfragments">true</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>NonBlockingFragmentResponseServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/BlockingFragmentResponseServlet</name> <property name="consume-subfragments">false</property> <cache-id> <timeout>0</timeout> <component id="test" type="parameter"> <required>true</required> <value>BlockingFragmentResponseServlet</value> </component> </cache-id> </cache-entry> <cache-entry> <class>servlet</class> <name>/JSTLIKEA.jsp</name> <property name="consume-subfragments">true</property> <cache-id> <component id="test" type="parameter"> <required>true</required> <value>test1</value> </component> </cache-id> </cache-entry> </cache>