X-Git-Url: https://dev.e-taxonomy.eu/gitweb/taxeditor.git/blobdiff_plain/506d9934625a88927b6a49822eb5b71b0c50f0b3..eba7ec9d9208343e6b51f95835e5639d6a7307cc:/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java index 88f0aab88..e01ed86a9 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java @@ -3,17 +3,18 @@ package eu.etaxonomy.cdm.api.cache; import java.io.File; import java.util.UUID; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import eu.etaxonomy.cdm.api.application.CdmApplicationState; import eu.etaxonomy.cdm.api.config.EhCacheConfiguration; -import eu.etaxonomy.cdm.common.CdmUtils; +import eu.etaxonomy.cdm.cache.CacheLoader; +import eu.etaxonomy.cdm.cache.CdmEntityCacheKey; +import eu.etaxonomy.cdm.cache.CdmTransientEntityCacher; +import eu.etaxonomy.cdm.config.ConfigFileUtil; import eu.etaxonomy.cdm.model.common.CdmBase; -import eu.etaxonomy.cdm.model.common.DefinedTermBase; -import eu.etaxonomy.cdm.model.common.TermBase; -import eu.etaxonomy.taxeditor.remoting.cache.CacheLoader; -import eu.etaxonomy.taxeditor.remoting.cache.CdmEntityCacheKey; -import eu.etaxonomy.taxeditor.remoting.cache.CdmTransientEntityCacher; +import eu.etaxonomy.cdm.model.term.DefinedTermBase; +import eu.etaxonomy.cdm.model.term.TermBase; import eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor; import eu.etaxonomy.taxeditor.session.CdmEntitySession; import eu.etaxonomy.taxeditor.session.ICdmEntitySession; @@ -31,8 +32,6 @@ import net.sf.ehcache.config.SizeOfPolicyConfiguration; * correct service to load / cache the entity. * * @author cmathew - * - * @param */ @Component //FIXME This indicates that the CdmServiceCacher is initialized as Spring Component but it seems only to be instantiated directly public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionManagerObserver { @@ -44,29 +43,38 @@ public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionMana private CacheLoader cacheLoader; + @Autowired + ConfigFileUtil configFileUtil = null; + @Override protected void setup() { setUpCacheManager(); DefinedTermBase.setCacher(this); - CdmTransientEntityCacher.setDefaultCacher(this); + CdmTransientEntityCacher.setPermanentCacher(this); TermServiceRequestExecutor.setDefaultCacher(this); cacheLoader = new CacheLoader(this); - } - - /** - * - */ private void setUpCacheManager() { EhCacheConfiguration cacheConfig = new EhCacheConfiguration(); DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration(); - File ehcacheFolder = CdmUtils.getCdmSubDir("taxeditor-ehcache"); + File ehcacheFolder = null; + if(configFileUtil != null){ + try { + ehcacheFolder = configFileUtil.getCdmHomeSubDir("taxeditor-ehcache"); + } catch (Exception e){ + logger.warn("Cannot determine CdmHomeSubDir for ./taxeditor-ehcache, will use fallback method.", e); + } + } + if(ehcacheFolder != null){ + ehcacheFolder = ConfigFileUtil.getCdmHomeSubDirFallback("taxeditor-ehcache"); + } + // FIXME use subfolder per taxeditor version to allow running multiple installations in parallel // String taxEditorVersion = ..; // File ehcacheFolder = new File(ehcacheFolder, taxEditorVersion); @@ -88,10 +96,10 @@ public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionMana sizeOfConfig.setMaxDepthExceededBehavior("abort"); return new CacheConfiguration(DEFAULT_CACHE_NAME, 0) - .eternal(true) - .statistics(true) - .sizeOfPolicy(sizeOfConfig) - .overflowToOffHeap(false); + .eternal(true) + .statistics(true) + .sizeOfPolicy(sizeOfConfig) + .overflowToOffHeap(false); } @@ -128,15 +136,15 @@ public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionMana } @Override - public CdmBase getFromCache(CdmBase cdmBase) { - CdmBase cachedCdmEntity = null; + public T getFromCache(T cdmBase) { + T cachedCdmEntity = null; // first we check in the active session cache if the // entity has been loaded there // FIXME:Remoting do we really need the cdmTransientEntityCacher // here. Is it not guarenteed that all every entity which 'isCachable' // by this cacher is cached only in this cacher ? if(!isCachable(cdmBase) && cdmTransientEntityCacher != null) { - CdmEntityCacheKey key = CdmTransientEntityCacher.generateKey(cdmBase); + CdmEntityCacheKey key = CdmTransientEntityCacher.generateKey(cdmBase); cachedCdmEntity = cdmTransientEntityCacher.getFromCache(key); } @@ -146,13 +154,9 @@ public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionMana return cachedCdmEntity; } - - /* (non-Javadoc) - * @see eu.etaxonomy.cdm.api.cache.CdmCacher#load(eu.etaxonomy.cdm.model.common.CdmBase) - */ @Override - public CdmBase load(CdmBase cdmEntity) { - CdmBase cachedCdmEntity = getFromCache(cdmEntity.getUuid()); + public T load(T cdmEntity) { + T cachedCdmEntity = (T)getFromCache(cdmEntity.getUuid()); if(isCachable(cdmEntity) && cachedCdmEntity == null) { cachedCdmEntity = cacheLoader.load(cdmEntity, false, true); @@ -160,9 +164,6 @@ public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionMana return cachedCdmEntity; } - /* (non-Javadoc) - * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver#changed() - */ @Override public void changed() { ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession();