package com.hantsylabs.example.spring.config;
import java.util.HashSet;
import java.util.Set;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.CachingConfigurer;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.cache.interceptor.SimpleKeyGenerator;
import org.springframework.context.annotation.AdviceMode;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.data.gemfire.CacheFactoryBean;
import org.springframework.data.gemfire.LocalRegionFactoryBean;
import org.springframework.data.gemfire.support.GemfireCacheManager;
import com.gemstone.gemfire.cache.GemFireCache;
import com.gemstone.gemfire.cache.Region;
import com.hantsylabs.example.spring.model.Conference;
@Configuration
@EnableCaching(mode = AdviceMode.ASPECTJ)
@Profile("gemfire")
public class GemfireCacheConfig extends CachingConfigurerSupport{
@Bean
CacheFactoryBean cacheFactoryBean() {
return new CacheFactoryBean();
}
@Bean
LocalRegionFactoryBean<String, Conference> localRegionFactory(final GemFireCache cache) {
return new LocalRegionFactoryBean<String, Conference>() {{
setCache(cache);
setName("conference");
}};
}
@Override
@Bean
public CacheManager cacheManager() {
GemfireCacheManager _cacheManager= new GemfireCacheManager();
try {
_cacheManager.setCache(cacheFactoryBean().getObject());
Set<Region<?,?>> regions=new HashSet<>();
regions.add(localRegionFactory(cacheFactoryBean().getObject()).getObject());
_cacheManager.setRegions(regions);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return _cacheManager;
}
@Override
@Bean
public KeyGenerator keyGenerator() {
return new SimpleKeyGenerator();
}
}