Caching portlet output
Portlet output can be cached at the local application server or using a remote proxy server.
Local cache settings
If fragment caching is enabled on the application server, the local cache holds the complete output of the portlet by portlet window and portlet state. If the portlet is included on a page, and the cache contains valid markup for the requested portlet state, the portlet code is not called, but cached content is returned. An action or event on the portlet invalidates all cached content for the affected portlet window.
To enable local caching, check the Enable Portlet Fragment Cache option in the WebSphere® Integrated Solutions Console. For detailed instructions see the WebSphere Application Server information center and the links at the end of this topic.
The portlet indicates how long, in seconds, its output should be cached in the portlet deployment descriptor.
- Standard portlet cache settings
-
<expiration-cache>300</expiration-cache> <cache-scope>private</cache-scope>
- IBM portlet cache settings
-
<cache> <expires>300</expires> <shared>no</shared> </cache>
A value of -1 indicates that the portlet cache never expires. A value of 0 indicates that the portlet is never cached. This is also the default setting and behavior if the portlet descriptor does not provide cache settings. Both standard and IBM portlet deployment descriptors can also specify a cache scope that indicates whether cached content is public (shared) or per user. Cache settings for standard portlets can be modified in the portal administration portlet Manage Portlets.
- Modifying the local cache at run time
- For standard portlets, the portlet window can modify the expiration
time at run time using the CacheControl object, as
follows:
The value that you set specifies seconds.renderResponse.getCacheControl().setExpirationTime(3000);
Note: You cannot widen the cache scope at run time from the setting defined in the portlet.xml file. This means that if the portlet.xml has the cache scope set to private , you cannot overwrite this scope setting to be public at run time. You can narrow the scope from a public setting in the portlet.xml to private at run time.The getLastModified() method of the IBM portlet API enables the portlet developer to inform the container when the current cache entry for the portlet should be invalidated, and therefore the portlet's content should be refreshed. The following example shows how a portlet that caches its output can change its content immediately to provide additional output. In the portlet getLastModified() method, the time stamp is set to an attribute in the portlet session.
Remote cache settings
In an environment where a remote proxy server is used for caching, standard portlets can indicate cache settings, which are used by the portal server to determine how the page is cached on a remote proxy server. For more information about how to tune your portal and how remote caching is determined for the page see WebSphere Portal the performance tuning guide. IBM portlets cannot provide individual cache preferences for the remote cache.
Standard portlets specify cache expiration and cache scope for remote caching in the deployment descriptor, in the same way as noted previously under "local cache". These cache settings can be modified in the portal administration portlet Manage Portlets.