How to integrate Terracota clustering with JCache Provider

221 views
Skip to first unread message

Alexandre Alberti Buendia

unread,
Dec 20, 2017, 12:01:27 PM12/20/17
to ehcache-users
  1. What version of Ehcache you are currently using:  -> 3.4
  2. Paste the configuration for the Cache/CacheManager you have an issue with;
  3. Add any name and version of other library or framework you use Ehcache with (e.g. Hibernate);
  4. Providing JDK and OS versions maybe useful as well.

I'm using ehcache 3.4.0 and I'm very lost at the point to "transform" cacheManager from org.ehcache.CacheManager to a org.springframework.cache.CacheManager valid One.

This code is currently working (as http://www.ehcache.org/documentation/3.4/clustered-cache.html suggests):

@Bean(name = "cacheManager")
public CacheManager cacheManager() throws URISyntaxException {
CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder().with(cluster(URI.create(props.readCacheLocation())).autoCreate()).withCache("listAllCache", newCacheConfigurationBuilder(String.class, List.class, heap(100)).withExpiry(timeToLiveExpiration(of(60, TimeUnit.SECONDS))));
PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true);
return cacheManager; 
}

But I'm so lost when it turns to use a JCacheCacheManager and @EnableCaching/@Cacheable Annotations. I tried something like:

@Bean(name = "cacheManager")
public org.springframework.cache.CacheManager cacheManager() throws URISyntaxException {
ServerSideConfigurationBuilder serverSideConfigurationBuilder = cluster(URI.create(props.readCacheLocation())).autoCreate();
CachingProvider cachingProvider = Caching.getCachingProvider();
EhcacheCachingProvider ehcacheProvider = (EhcacheCachingProvider) cachingProvider;

DefaultConfiguration configuration = new DefaultConfiguration(ehcacheProvider.getDefaultClassLoader(), serverSideConfigurationBuilder.build());

javax.cache.CacheManager cacheManager = ehcacheProvider.getCacheManager(ehcacheProvider.getDefaultURI(), configuration);

MutableConfiguration<String, List> configuration2 = new MutableConfiguration<String, List>().setTypes(String.class, List.class).setStoreByValue(false)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_MINUTE));
cacheManager.createCache("listAllCache", configuration2);

return new JCacheCacheManager(cacheManager);
}

but when using @EnableCaching it starts using a MalformedParametrizedTypeException that I can't understand why.

methon in Service class:
@Service
public class CountryManager {

public static final String KEY = "countryAllCache";
......
@Override
@Cacheable(value = "listAllCache", key = "#root.target.KEY")
public List<CountryRes> findAll(User user) {
return findAllTemplate(user);
}
......
}

Any help would be very nice.

Thanks in advance, Alex.

Alexandre Alberti Buendia

unread,
Dec 20, 2017, 12:03:04 PM12/20/17
to ehcache-users
Jdk is 1.8 and OS is Windows 7.

Using JpaRepository.

El dimecres, 20 desembre de 2017 18:01:27 UTC+1, Alexandre Alberti Buendia va escriure:

Henri Tremblay

unread,
Dec 20, 2017, 2:40:58 PM12/20/17
to ehcach...@googlegroups.com
Hi,

You have a full working example here:

Here is an extract:

@Bean
@Override
public org.springframework.cache.CacheManager cacheManager() {
cacheManager = createClusteredCacheManager();
return new JCacheCacheManager(cacheManager);
}

@PreDestroy
public void destroy() {
log.info("Close Cache Manager");
cacheManager.close();
}

private CacheManager createClusteredCacheManager() {
JHipsterProperties.Cache.Ehcache.Cluster clusterProperties = properties.getCache().getEhcache().getCluster();
URI clusterUri = clusterProperties.getUri();
boolean autoCreate = clusterProperties.isAutoCreate();
long clusteredCacheSize = clusterProperties.getSizeInMb();
Consistency consistency = clusterProperties.getConsistency();

long heapCacheSize = properties.getCache().getEhcache().getSize();
long ttl = properties.getCache().getEhcache().getTimeToLiveSeconds();

ClusteringServiceConfigurationBuilder clusteringServiceConfigurationBuilder = ClusteringServiceConfigurationBuilder.cluster(clusterUri);
ServerSideConfigurationBuilder serverSideConfigurationBuilder = (autoCreate ? clusteringServiceConfigurationBuilder.autoCreate() : clusteringServiceConfigurationBuilder.expecting())
.defaultServerResource("primary-server-resource");

org.ehcache.config.CacheConfiguration<Object, Object> cacheConfiguration = CacheConfigurationBuilder
.newCacheConfigurationBuilder(Object.class, Object.class, ResourcePoolsBuilder
.newResourcePoolsBuilder()
.heap(heapCacheSize)
.with(ClusteredResourcePoolBuilder.clusteredDedicated(clusteredCacheSize, MemoryUnit.MB)))
.withExpiry(Expirations.timeToLiveExpiration(new org.ehcache.expiry.Duration(ttl, TimeUnit.SECONDS)))
.add(new ClusteredStoreConfiguration(consistency)).build();

Map<String, org.ehcache.config.CacheConfiguration<?, ?>> caches = createCacheConfigurations(cacheConfiguration);

EhcacheCachingProvider provider = getCachingProvider();
DefaultConfiguration configuration = new DefaultConfiguration(caches, provider.getDefaultClassLoader(), serverSideConfigurationBuilder.build());
return provider.getCacheManager(provider.getDefaultURI(), configuration);
}

private Map<String, org.ehcache.config.CacheConfiguration<?, ?>> createCacheConfigurations(org.ehcache.config.CacheConfiguration<Object, Object> cacheConfiguration) {
Map<String, org.ehcache.config.CacheConfiguration<?, ?>> caches = new HashMap<>();
//...
caches.put("weatherReports", cacheConfiguration);
return caches;
}

private EhcacheCachingProvider getCachingProvider() {
return (EhcacheCachingProvider) Caching.getCachingProvider();
}

--
You received this message because you are subscribed to the Google Groups "ehcache-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ehcache-users+unsubscribe@googlegroups.com.
To post to this group, send email to ehcach...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ehcache-users/1e5e7f6e-d42e-49cf-be07-908aa365528a%40googlegroups.com.

For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages