You can override the default configuration of ExoCacheFactory like any other component.
The default configuration of ExoCacheFactory is:
<configuration>
<component>
<key>org.exoplatform.services.cache.ExoCacheFactory</key>
<type>org.exoplatform.services.cache.impl.jboss.ExoCacheFactoryImpl</type>
<init-params>
<value-param>
<name>cache.config.template</name>
<value>jar:/conf/portal/cache-configuration-template.xml</value>
</value-param>
<value-param>
<name>allow.shareable.cache</name>
<value>true</value>
</value-param>
</init-params>
</component>
</configuration>
| cache.config.template | The location of the default configuration template of JBoss Cache. By default the template is shipped in the jar at /conf/portal/cache-configuration-template.xml. The default template aims to be the skeleton from which we create any type of JBoss cache instance, thus it must be very generic. | 
| allow.shareable.cache | Indicates whether your JBoss
              Cache instance can by default be shared between several
              eXo Caches instances. Indeed to consume less resources, you can
              share your JBoss Cache instance to be used by several eXo
              Cache instances, each of them have its own
              cache region with its own eviction configuration. The default
              value of this parameter is false. NoteThis parameter and the field allowShareableCache in ExoCacheConfig configuration are the same in purpose, so take care that this parameter can be overriden. | 
If you need to use your own cache configuration, you can register an "external plugin", see an example below:
<configuration>
...
<external-component-plugins>
<target-component>org.exoplatform.services.cache.ExoCacheFactory</target-component>
<component-plugin>
<name>addConfig</name>
<set-method>addConfig</set-method>
<type>org.exoplatform.services.cache.impl.jboss.ExoCacheFactoryConfigPlugin</type>
<description>add Custom Configurations</description>
<init-params>
<value-param>
<name>myCustomCache</name>
<value>jar:/conf/portal/custom-cache-configuration.xml</value>
</value-param>
</init-params>
</component-plugin>
</external-component-plugins>
...
</configuration>
In this example, the method
      addConfig(ExoCacheFactoryConfigPlugin plugin) is called on
      the current implementation of ExoCacheFactory which is
      actually the JBoss Cache implementation.
In the init-params block, you can define a set of value-param blocks and for each value-param, you provide your cache name in name tag and path of your custom configuration file in value tag.
In the example, the cache name is myCustomCache and configuration file is jar:/conf/portal/custom-cache-configuration.xml.
ExoCacheFactory delegates the cache creation to
        ExoCacheCreator
        that is defined as below:
      
package org.exoplatform.services.cache.impl.jboss;
...
public interface ExoCacheCreator {
/**
* Creates an eXo cache according to the given configuration {@link
org.exoplatform.services.cache.ExoCacheConfig}
* @param config the configuration of the cache to apply
* @param cache the cache to initialize
* @exception ExoCacheInitException if an exception happens while initializing the cache
*/
public ExoCache create(ExoCacheConfig config, Cache<Serializable, Object> cache) throws
ExoCacheInitException;
/**
* Returns the type of {@link org.exoplatform.services.cache.ExoCacheConfig} expected by the creator
* @return the expected type
*/
public Class<? extends ExoCacheConfig> getExpectedConfigType();
/**
* Returns the name of the implementation expected by the creator. This is mainly used to be backward compatible
* @return the expected by the creator
*/
public String getExpectedImplementation();
}
The
        ExoCacheCreator
        allows you to define any kind
        of JBoss Cache instance that you would like to have. It has been
        designed to give you the ability to have your own type of
        configuration and to always be backward compatible.
      
To implement ExoCacheCreator, you need to implement 3
        methods which are:
      
create: this method is used to create a
            new
            ExoCache
            from the
            ExoCacheConfig
            and a JBoss Cache instance.
          
getExpectedConfigType: this method gets the subtype of ExoCacheConfig.
            It is required that the subtype is supported by the creator.
          
getExpectedImplementation: this method
            gets the implementation of
            ExoCacheConfig
            that is supported
            by the creator. This is used for backward compatibility, in other
            words, you can still configure your cache with a super class
            ExoCacheConfig.
          
You can register any cache creator that you want thanks to an "external plugin", see an example below:
<external-component-plugins>
<target-component>org.exoplatform.services.cache.ExoCacheFactory</target-component>
<component-plugin>
<name>addCreator</name>
<set-method>addCreator</set-method>
<type>org.exoplatform.services.cache.impl.jboss.ExoCacheCreatorPlugin</type>
<description>add Exo Cache Creator</description>
<init-params>
<object-param>
<name>LRU</name>
<description>The lru cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.lru.LRUExoCacheCreator">
<field name="defaultTimeToLive"><long>1500</long></field>
<field name="defaultMaxAge"><long>2000</long></field>
</object>
</object-param>
</init-params>
</component-plugin>
</external-component-plugins>
In this example, the method
        addCreator(ExoCacheCreatorPlugin plugin)
        is called on the current implementation of
        ExoCacheFactory
        which is actually the JBoss Cache implementation.
      
In the
        init-params
        block, you can define a
        set of
        object-param
        blocks and for each
        object-param, we expect any object definition of
        typeExoCacheCreator.
		It is org.exoplatform.services.cache.impl.jboss.lru.LRUExoCacheCreator in the example.
      
By default, no cache creator are defined, so you need to add them in your configuration files. The following is available cache creators:
LRU Cache Creator - Least Recently Used
...
<object-param>
<name>LRU</name>
<description>The lru cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.lru.LRUExoCacheCreator">
<field name="defaultTimeToLive"><long>${my-value}</long></field>
<field name="defaultMaxAge"><long>${my-value}</long></field>
</object>
</object-param>
...
| defaultTimeToLive | This is the default value of the field timeToLive described in the section dedicated to this cache type. This value is only used when we define a cache of this type with the old configuration. | 
| defaultMaxAge | This is the default value of the field maxAge described in the section dedicated to this cache type. This value is only used when we define a cache of this type with the old configuration. | 
FIFO Cache Creator - First In, First Out
...
<object-param>
<name>FIFO</name>
<description>The fifo cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.fifo.FIFOExoCacheCreator"></object>
</object-param>
...
MRU Cache Creator - Most Recently Used
...
<object-param>
<name>MRU</name>
<description>The mru cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.mru.MRUExoCacheCreator"></object>
</object-param>
...
LFU Cache Creator - Least Frequently Used
...
<object-param>
<name>LFU</name>
<description>The lfu cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.lfu.LFUExoCacheCreator">
<field name="defaultMinNodes"><int>${my-value}</int></field>
</object>
</object-param>
...
| defaultMinNodes | This is the default value of the field minNodes described in the section dedicated to this cache type. This value is only used when we define a cache of this type with the old configuration. | 
EA Cache Creator - Expiration Algorithm
...
<object-param>
<name>EA</name>
<description>The ea cache creator</description>
<object type="org.exoplatform.services.cache.impl.jboss.ea.EAExoCacheCreator">
<field name="defaultExpirationTimeout"><long>2000</long></field>
</object>
</object-param>
...
| defaultExpirationTimeout | This is the default value of the field ExpirationTimeout described in the section dedicated to this cache type. This value is only used when we define a cache of this type with the old configuration. |