2016-07-25 19 views
0

Lange Rede kurzer Sinn, ich habe eine Bibliothek erstellt, die Apache JCS verwendet, um ihre eigenen Objekte zu verwalten. mitErstellen von Apache JCS-Cache-Confilicts bei Verwendung in einer Bibliothek

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

ccm.configure(props); 

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

Oben, liest es Konfiguration aus einer Datei und lädt zum Cache-Manager und alles funktioniert gut, wenn sie mit einer Testanwendung Testen Bibliothek.

Aber in meiner realen Anwendung verwende ich JCS auch, um anwendungsbezogene Objekte zu verwalten, und das ist, wo das Problem auftritt.

Wenn die Anwendung hochfährt, instanziert sie zuerst den Anwendungscache-Manager und lädt erfolgreich alle Konfigurationen und erstellt genau das, was ich beabsichtigt habe.

Aber für den Cache-Manager der Bibliothek, es verwendet meine Konfigurationen überhaupt nicht und klingt es instanziiert einige Standard-Cache-Instanz. Zum Beispiel in der Konfiguration meiner Bibliothek habe ich:

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 

Die DCHACHE Hilfs ist definiert als:

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 

Die Beweise, dass sie zeigen nicht die entsprechenden Konfigurationen verwenden, sind: Es schafft MyRegion der DiskUsagePattern mit SWAP (Ich habe auch DiskUsagePatternName versucht, macht aber keine Unterschiede).

Es verwendet LIB_DATA_DIR nicht als DisckPath. Verwendet stattdessen den, den ich bereits für die Konfiguration der Anwendung definiert habe.

Wenn ich die JCS-Codes der Anwendung kommentieren, funktioniert es gut für die JCS der Bibliothek.

Ich habe auch versucht JCS.getInstance ("cache_name"), aber es macht keine Unterschiede.

Haben Sie eine Idee?

Antwort

0

Nach ein paar Stunden in das Problem zu graben, dachte, dass JCS harte Zeit mit getrennten Konfigurationsdateien zu tun hat. Es klingt, dass JCS nur einmal konfiguriert werden kann, indem eine Konfigurationsdatei pro Java Virtual Machine verwendet wird.

Also habe ich am Ende mit einer Datei zu konfigurieren JCS. Auf diese Weise, wenn die Anwendung JCS Tannen instanziiert, lädt es auch Bibliothekskonfigurationen und später innerhalb der Bibliothek funktioniert alles gut.