package eu.etaxonomy.cdm.api.cache;
+import java.io.File;
import java.util.UUID;
-import net.sf.ehcache.config.CacheConfiguration;
-import net.sf.ehcache.config.SizeOfPolicyConfiguration;
-
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.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.taxeditor.session.ICdmEntitySession;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver;
+import net.sf.ehcache.config.CacheConfiguration;
+import net.sf.ehcache.config.DiskStoreConfiguration;
+import net.sf.ehcache.config.SizeOfPolicyConfiguration;
/**
* Class which uses CDM services to cache cdm entities
*
- * FIXME: Currently only handles terms entities. It would be
+ * FIXME: Currently only handles term entities. It would be
* interesting to have a generic method which finds the
* correct service to load / cache the entity.
*
*
* @param <T>
*/
-@Component
-public class CdmServiceCacher extends CdmCacher implements ICdmEntitySessionManagerObserver {
-
+@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 {
private ICdmEntitySessionManager cdmEntitySessionManager;
@Override
protected void setup() {
+
+ setUpCacheManager();
+
DefinedTermBase.setCacher(this);
CdmTransientEntityCacher.setDefaultCacher(this);
TermServiceRequestExecutor.setDefaultCacher(this);
cacheLoader = new CacheLoader(this);
+
+ }
+
+
+ /**
+ *
+ */
+ private void setUpCacheManager() {
+
+ EhCacheConfiguration cacheConfig = new EhCacheConfiguration();
+
+ DiskStoreConfiguration diskStoreConfiguration = new DiskStoreConfiguration();
+ File ehcacheFolder = CdmUtils.getCdmHomeSubDir("taxeditor-ehcache");
+ // FIXME use subfolder per taxeditor version to allow running multiple installations in parallel
+ // String taxEditorVersion = ..;
+ // File ehcacheFolder = new File(ehcacheFolder, taxEditorVersion);
+ diskStoreConfiguration.setPath(ehcacheFolder.getAbsolutePath());
+
+ cacheConfig.setDiskStoreConfiguration(diskStoreConfiguration);
+ addCacheManager(cacheConfig.cacheManager());
+
}
return load(term);
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.cdm.model.ICdmCacher#isCachable(eu.etaxonomy.cdm.model.common.CdmBase)
- */
@Override
public boolean isCachable(CdmBase cdmEntity) {
- if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
+ // if(cdmEntity != null && cdmEntity instanceof DefinedTermBase) {
+ if(cdmEntity != null && cdmEntity instanceof TermBase) {
return true;
}
return false;
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());
return cachedCdmEntity;
}
- /* (non-Javadoc)
- * @see eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver#changed()
- */
@Override
public void changed() {
ICdmEntitySession cdmEntitySession = cdmEntitySessionManager.getActiveSession();