+

Search Tips   |   Advanced Search


Caching portlet output


Overview

Portlet output can be cached at the local appserver or using a remote proxy server.


Local cache settings

If fragment caching is enabled on the appserver, 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 administrative console for the WAS.

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, which is also the 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.

By more precise detail, IBM portlets are cached via servlet caching. When you enable fragment caching, servlet caching is also enabled, as fragment caching requires servlet caching..

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:

renderResponse.getCacheControl().setExpirationTime(3000);

Modifying the cache scope at run time is restricted.

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's getLastModified() method, the time stamp is set to an attribute in the portlet's session. Figure 1. getLastModified() example

    
public long getLastModified(PortletRequest request) {

        PortletSession session = request.getPortletSession(false);

        if(session == null) {
            return System.currentTimeMillis();
        }
        if (session != null) {
            Long lastModified = (Long) session.getAttribute(LAST_MODIFIED);
            if (lastModified != null) {
                return lastModified.longValue();
            }
        }
        return -1;
    }


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. Refer to the section about how to tune the portal for more information on how remote caching is determined for the page. 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 above under "local cache". These cache settings can be modified in the portal administration.


Related information


Parent topic:

Understand the basics