Система кэширования Java (JCS) - создание регионов программным способом

Мы планируем использовать некоторый механизм кэширования в нашем приложении и выбрали систему кэширования Java (JCS) после проведения сравнительного исследования среди многих других решений для кэширования. Все в порядке, когда я использую внешнюю конфигурацию (cache.ccf) для определения областей кеша и его свойств (например, maxlife, ideltime и т. Д.).

Но требование изменилось, чтобы иметь области динамического кеша, то есть нам нужно будет определить области кеша и их свойства во время выполнения. Я не могу найти более подробную информацию или образцы относительно этой операции. Я успешно создал области кеша во время выполнения (используя подпись метода ниже).

ICompositeCacheAttributes  cattr=..
IElementAttributes attr = new ElementAttributes();
attr.setIsEternal(false);
attr.setMaxLifeSeconds( maxLife );    
defineRegion(name,  cattr,attr);

Но проблема в том, что IElmentAttributes не устанавливает кеш. Я исследовал источник JCS и обнаружил, что attr никогда не устанавливается. Это неиспользуемый аргумент !! немного странно

После еще нескольких поисков в Google я нашел ниже варианты для установки атрибутов вручную, но все еще не работал

 IElementAttributes attr = new ElementAttributes();
 attr.setIsEternal(false);
 attr.setMaxLifeSeconds( maxLife );
 jcs.setDefaultElementAttributes(attr);

Все, что я хочу, это установить maxLifeSeconds для созданных регионов.


person Satheesh Cheveri    schedule 06.10.2012    source источник


Ответы (2)


Я нашел способ решить свою проблему, нам нужно установить атрибуты, когда вы помещаете данные в кеш. Посмотрите реализацию для тех, кому интересно,

JCS jcs = JCS.getInstance("REGION");
IElementAttributes attr = new ElementAttributes();
attr.setIsEternal(false);
attr.setMaxLifeSeconds( maxLife );
jcs.put("Key",data, attr);
person Satheesh Cheveri    schedule 19.10.2012

Пример кода здесь

Properties props = new Properties();
//
// Default cache configs
//
props.put("jcs.default", "");
props.put("jcs.default.cacheattributes","org.apache.jcs.engine.CompositeCacheAttributes");
props.put("jcs.default.cacheattributes.MaxObjects","1000");
props.put("jcs.default.cacheattributes.MemoryCacheName", "org.apache.jcs.engine.memory.lru.LRUMemoryCache");
props.put("jcs.default.cacheattributes.UseMemoryShrinker", "true");
props.put("jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds", "3600");
props.put("jcs.default.cacheattributes.ShrinkerIntervalSeconds", "60");
props.put("jcs.default.cacheattributes.MaxSpoolPerRun", "500");

//
// Region cache
//
props.put("jcs.region.myregionCache", "");
props.put("jcs.region.myregionCache.cacheattributes", "org.apache.jcs.engine.CompositeCacheAttributes");
props.put("jcs.region.myregionCache.cacheattributes.MaxObjects", "1000");
props.put("jcs.region.myregionCache.cacheattributes.MemoryCacheName", "org.apache.jcs.engine.memory.lru.LRUMemoryCache");
props.put("jcs.region.myregionCache.cacheattributes.UseMemoryShrinker", "true");
props.put("jcs.region.myregionCache.cacheattributes.MaxMemoryIdleTimeSeconds", "3600");
props.put("jcs.region.myregionCache.cacheattributes.ShrinkerIntervalSeconds", "60");
props.put("jcs.region.myregionCache.cacheattributes.MaxSpoolPerRun", "500");
props.put("jcs.region.myregionCache.cacheattributes.DiskUsagePatternName", "UPDATE");
props.put("jcs.region.myregionCache.elementattributes", "org.apache.jcs.engine.ElementAttributes");
props.put("jcs.region.myregionCache.elementattributes.IsEternal", "false");

...


// Configure
CompositeCacheManager ccm = CompositeCacheManager.getUnconfiguredInstance();
ccm.configure(props);

// Access region
CompositeCache myregionCache =  ccm.getCache("myregionCache");

...
person myset    schedule 11.01.2015