长话短说,我已经创建了一个库,它使用Apache JCS来管理自己的对象。使用
CompositeCacheManager ccm CompositeCacheManager.getUnconfiguredInstance();
Properties props = new Properties();
props.load(fis);
ccm.configure(props);
CompositeCache<Serializable, Serializable> cache = ccm.getCache(CACHE_NAME);上面,它从一个文件中读取配置并加载到缓存管理器中,当使用测试应用程序测试库时,一切工作正常。
但在我的实际应用程序中,我也在使用JCS来管理与应用程序相关的对象,这就是问题所在。
当应用程序启动时,它首先实例化应用程序缓存管理器,然后成功加载所有配置并创建我想要的内容。
但是对于库的Cache Manager,它根本不使用我的配置,听起来它实例化了一些默认的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=UPDATEDCHACHE辅助器定义为:
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的DiskUsagePattern (我也尝试了DiskUsagePatternName,但没有做任何改变)。
它不使用LIB_DATA_DIR作为DisckPath。而是使用我已经为应用程序的配置定义的配置。
如果我注释应用程序的JCS相关代码,它对于库的JCS很有效。
我也尝试过JCS.getInstance("cache_name"),但没有什么不同。
你们有什么想法吗?
发布于 2016-07-25 23:48:47
经过几个小时的深入研究,发现JCS很难处理独立的配置文件。听起来每个java虚拟机只能使用配置文件配置一次JCS。
因此,我最终使用一个文件来配置JCS。这样,如果应用程序实例化JCS firs,它也会加载库的配置,然后在库中一切都会正常工作。
https://stackoverflow.com/questions/38570590
复制相似问题