com.fnklabs.draenei.orm.CacheUtils Maven / Gradle / Ivy
package com.fnklabs.draenei.orm;
import org.apache.commons.lang3.StringUtils;
import org.apache.ignite.cache.CacheAtomicityMode;
import org.apache.ignite.cache.CacheMemoryMode;
import org.apache.ignite.cache.CacheMode;
import org.apache.ignite.cache.eviction.lru.LruEvictionPolicy;
import org.apache.ignite.configuration.CacheConfiguration;
import org.jetbrains.annotations.NotNull;
/**
* Cache utils
*/
public class CacheUtils {
/**
* Return cache name for specified entity class
*
* @param clazz Entity class
*
* @return Cache name
*/
public static String getCacheName(@NotNull Class clazz) {
return StringUtils.lowerCase(clazz.getName());
}
public static CacheConfiguration getCacheConfiguration(@NotNull DataProvider dataProvider) {
if (dataProvider instanceof CacheableDataProvider) {
return ((CacheableDataProvider) dataProvider).getCacheConfiguration();
}
return CacheUtils.getDefaultCacheConfiguration(dataProvider.getEntityClass());
}
/**
* Get default cache configuration for specified entity class
*
* @param entityClass Entity class
* @param Entity class typ
*
* @return Cache Configuration for specified entity class
*/
public static CacheConfiguration getDefaultCacheConfiguration(Class entityClass) {
CacheConfiguration cacheCfg = new CacheConfiguration<>(getCacheName(entityClass));
cacheCfg.setBackups(1);
cacheCfg.setCacheMode(CacheMode.PARTITIONED);
cacheCfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
cacheCfg.setOffHeapMaxMemory(0);
cacheCfg.setReadThrough(false);
cacheCfg.setWriteThrough(false);
cacheCfg.setMemoryMode(CacheMemoryMode.ONHEAP_TIERED);
cacheCfg.setEvictionPolicy(new LruEvictionPolicy<>(10000));
return cacheCfg;
}
}