Terracotta 10.15 | Ehcache API Developer Guide | Configuring a CacheManager Using XML | Multiple XML Configurations in one Document | Multiple Cache Manager Variants
 
Multiple Cache Manager Variants
Multiple variant configurations for a given manager can be provided by including a sequence of <variant> tags, each with a required type attribute:
<multi:configuration identity="foo-manager">
<multi:variant type="heap">
<config>
<cache alias="foo">
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<resources>
<heap unit="entries">1000</heap>
</resources>
</cache>
</config>
</multi:variant>
<multi:variant type="offheap">
<config>
<cache alias="foo">
<key-type>java.lang.String</key-type>
<value-type>java.lang.String</value-type>
<resources>
<heap unit="entries">1000</heap>
<offheap unit="MB">128</offheap>
</resources>
</cache>
</config>
</multi:variant>
</multi:configuration>
You can retrieve a specific cache configuration by choosing both a variant and an identity on retrieval.
XmlMultiConfiguration variantConfiguration = XmlMultiConfiguration
.from(getClass().getResource("/configs/docs/multi/multiple-variants.xml"))
.build();

Configuration fooConfiguration = variantConfiguration.configuration("foo-manager", "offheap");
Variant types can be used to represent any kind of differences, for example development vs production, clustered vs unclustered, red vs blue, etc.
Note:
Configurations with multiple variants must have a variant type specified when retrieved. An IllegalStateException will be thrown otherwise. Configurations without multiple variants will always return their single configuration for all requested variants.