+/**
+ * Copyright (C) 2015 EDIT
+ * European Distributed Institute of Taxonomy
+ * http://www.e-taxonomy.eu
+ *
+ * The contents of this file are subject to the Mozilla Public License Version 1.1
+ * See LICENSE.TXT at the top of this package for the full license terms.
+ */
package eu.etaxonomy.cdm.api.cache;
import java.io.File;
import java.util.UUID;
-import org.springframework.stereotype.Component;
+import org.springframework.beans.factory.annotation.Autowired;
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
import eu.etaxonomy.cdm.api.config.EhCacheConfiguration;
import eu.etaxonomy.cdm.cache.CacheLoader;
import eu.etaxonomy.cdm.cache.CdmEntityCacheKey;
import eu.etaxonomy.cdm.cache.CdmTransientEntityCacher;
-import eu.etaxonomy.cdm.common.CdmUtils;
+import eu.etaxonomy.cdm.config.ConfigFileUtil;
import eu.etaxonomy.cdm.model.common.CdmBase;
import eu.etaxonomy.cdm.model.term.DefinedTermBase;
+import eu.etaxonomy.cdm.model.term.Representation;
import eu.etaxonomy.cdm.model.term.TermBase;
-import eu.etaxonomy.taxeditor.service.TermServiceRequestExecutor;
+import eu.etaxonomy.taxeditor.service.RemoteInvocationTermCacher;
import eu.etaxonomy.taxeditor.session.CdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
*
* @author cmathew
*/
-@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 {
-
+public class CdmServiceCacher extends CdmCacherBase implements ICdmEntitySessionManagerObserver {
private ICdmEntitySessionManager cdmEntitySessionManager;
private CacheLoader cacheLoader;
+ @Autowired
+ private ConfigFileUtil configFileUtil = null;
+
@Override
protected void setup() {
DefinedTermBase.setCacher(this);
CdmTransientEntityCacher.setPermanentCacher(this);
- TermServiceRequestExecutor.setDefaultCacher(this);
+ //TermServiceRequestExecutor.setDefaultCacher(this);
+ RemoteInvocationTermCacher.setDefaultCacher(this);
cacheLoader = new CacheLoader(this);
}
EhCacheConfiguration cacheConfig = new EhCacheConfiguration();
DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
- File ehcacheFolder = CdmUtils.getCdmHomeSubDir("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);
cacheConfig.setDiskStoreConfiguration(diskStoreConfiguration);
addCacheManager(cacheConfig.cacheManager());
-
}
-
@Override
protected CacheConfiguration getDefaultCacheConfiguration() {
// For a better understanding on how to size caches, refer to
.statistics(true)
.sizeOfPolicy(sizeOfConfig)
.overflowToOffHeap(false);
-
}
@Override
@Override
public boolean isCachable(CdmBase cdmEntity) {
- // if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
- if(cdmEntity != null && cdmEntity instanceof TermBase) {
+ if(cdmEntity == null){
+ return false;
+ }else if (cdmEntity instanceof TermBase || cdmEntity instanceof Representation){
return true;
+ }else{
+ return false;
}
- return false;
}
-
public void setCdmEntitySessionManager(ICdmEntitySessionManager cdmEntitySessionManager) {
this.cdmEntitySessionManager = cdmEntitySessionManager;
if(cdmEntitySessionManager != null) {
}
}
-
public CdmTransientEntityCacher getCurrentCacher() {
ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession();
if(cdmEntitySession != null && cdmEntitySession instanceof CdmEntitySession) {
// 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'
+ // here. Is it not guaranteed that all every entity which 'isCachable'
// by this cacher is cached only in this cacher ?
if(!isCachable(cdmBase) && cdmTransientEntityCacher != null) {
CdmEntityCacheKey<T> key = CdmTransientEntityCacher.generateKey(cdmBase);
cachedCdmEntity = cdmTransientEntityCacher.getFromCache(key);
-
}
if(cachedCdmEntity == null) {
cachedCdmEntity = super.getFromCache(cdmBase);
this.cdmTransientEntityCacher = null;
}
}
-}
+}
\ No newline at end of file