2016-07-25 28 views
0

长话短说,我创建了一个使用Apache JCS来管理自己的对象的库。使用在库中使用时创建Apache JCS缓存confilicts

CompositeCacheManager ccm CompositeCacheManager.getUnconfiguredInstance(); 
Properties props = new Properties(); 
props.load(fis); 

ccm.configure(props); 

CompositeCache<Serializable, Serializable> cache = ccm.getCache(CACHE_NAME); 

以上,它从一个文件,并装载到高速缓存管理器读取配置和测试应用程序的测试库时,一切正常。

但是在我真正的应用程序中,我也使用JCS来管理与应用程序相关的对象,这就是问题发生的地方。

当应用程序启动时,它首先实例化应用程序缓存管理器,并成功加载所有配置并创建我想要的内容。

但是对于库的缓存管理器,它根本不使用我的配置,听起来它实例化了一些默认的Cache实例。例如,在我的媒体库的配置,我有:

jcs.region.MYREGION=DCACHE 
jcs.region.MYREGION.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes 
jcs.region.MYREGION.cacheattributes.MaxObjects=1200 
jcs.region.MYREGION.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache 
jcs.region.MYREGION.cacheattributes.DiskUsagePattern=UPDATE 

的DCHACHE辅助定义为:

jcs.auxiliary.DCACHE=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory 
jcs.auxiliary.DCACHE.attributes=org.apache.commons.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes 
jcs.auxiliary.DCACHE.attributes.DiskPath=LIB_DATA_DIR 
jcs.auxiliary.DCACHE.attributes.MaxPurgatorySize=10000 
jcs.auxiliary.DCACHE.attributes.MaxKeySize=10000 
jcs.auxiliary.DCACHE.attributes.OptimizeAtRemoveCount=300000 
jcs.auxiliary.DCACHE.attributes.MaxRecycleBinSize=7500 

,显示它没有使用相关配置的审计证据是: 它创建MYREGION与SWAP DiskUsagePattern (我也试过DiskUsagePatternName但没有任何区别)。

它不使用LIB_DATA_DIR作为DisckPath。而是使用我已经为应用程序配置定义的那个。

如果我评论应用程序的JCS相关代码,它对于图书馆的JCS非常适用。

我也尝试过JCS.getInstance(“cache_name”),但它没有任何区别。

你们有什么想法吗?

回答

0

经过几个小时的深入研究,发现JCS很难处理分离的配置文件。这听起来JCS只能使用每个Java虚拟机的配置文件配置一次。

所以我结束了使用一个文件来配置JCS。通过这种方式,如果应用程序实例化JCS冷杉,它也会加载库的配置,然后在库内部一切正常。