2016-07-25 39 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冷杉,它也會加載庫的配置,然後在庫內部一切正常。