Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Information

This documents the proper way to do caching in Sakai. This will be updated as improvements are made to the Sakai caching system.

Caching in 2.5+ and trunk

Using the Sakai CacheManager is the recommended way to handle caching in Sakai 2.5+. It will be required for the kernel. This is expressed as a Spring Bean Factory with the id org.sakaiproject.memory.api.MemoryService.cacheManager

  1. Create a cache in your service (in the components.xml) like so:
    Code Block
    xml
    xml
    <bean id="org.sakaiproject.user.api.UserDirectoryService.cache"
        class="org.springframework.cache.ehcache.EhCacheFactoryBean">
      <property name="cacheManager">
        <ref bean="org.sakaiproject.memory.api.MemoryService.cacheManager"/>
      </property>
      <property name="cacheName">
        <value>org.sakaiproject.user.api.UserDirectoryService</value>
      </property>
    </bean>
    
  2. Spring inject the cache into your service like so:
    Code Block
    xml
    xml
    <bean id="org.sakaiproject.user.api.UserDirectoryService" ...
    ...
      <property name="cache">
        <ref bean="org.sakaiproject.user.api.UserDirectoryService.cache" />
      </property>
    </bean>
    
  3. Use the cache within your code:
    Code Block
    java
    java
    cache.get(key).getObjectValue();
    cache.put(new Element(key,value));
    cache.remove(key);
    
    • NOTE This cache is not cluster wide and exists on one server only. You have to handle cluster wide expiring yourself.

Caching in 2.4 or earlier

Caching in 2.4 or earlier is best done using the MemoryService