Reputation: 6184
When creating a clustered Cache following the Ehcache documentation, I get a PersistentCacheManager
implementing org.ehcache.CacheManager
but not javax.cache.CacheManager
which is what I need in my Spring 6 application.
On Ehcache JSR107-Documentation I see no explicit hint regarding clustering.
How do I get a javax.cache.CacheManager
supporting clustering Capabilities?
This is the example code for configuring clustered cacheManagers linked above:
CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder =
CacheManagerBuilder.newCacheManagerBuilder()
.with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost/my-application"))
.autoCreateOnReconnect(c -> c));
PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true);
Upvotes: 0
Views: 356
Reputation: 6184
Yes it is not explicitly mentioned how to configure a clustered JCache CacheManager on JSR107 documentation, but you can find how to integrate Ehcache-Configuration with JCache Configuration there.
This is my working solution:
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.spi.CachingProvider;
import org.ehcache.clustered.client.config.ClusteringServiceConfiguration;
import org.ehcache.clustered.client.config.builders.ClusteringServiceConfigurationBuilder;
import org.ehcache.config.CacheConfiguration;
import org.ehcache.core.config.DefaultConfiguration;
import org.ehcache.config.builders.CacheConfigurationBuilder;
import org.ehcache.jsr107.EhcacheCachingProvider;
// ...
CachingProvider cachingProvider = Caching.getCachingProvider();
EhcacheCachingProvider ehcacheProvider = (EhcacheCachingProvider) cachingProvider;
ClusteringServiceConfigurationBuilder clusteringServiceConfigurationBuilder = ClusteringServiceConfigurationBuilder
.cluster(URI.create("terracotta://localhost/my-application"))
.autoCreateOnReconnect(server -> server.defaultServerResource("offheap-1"));
ClusteringServiceConfiguration clusteringServiceConfiguration = clusteringServiceConfigurationBuilder.build();
DefaultConfiguration defaultConfiguration = new DefaultConfiguration(ehcacheProvider.getDefaultClassLoader(),
clusteringServiceConfiguration);
cacheManager = ehcacheProvider.getCacheManager(cachingProvider.getDefaultURI(), defaultConfiguration);
Upvotes: 0