Merge branch 'develop' into remoting-4.0
[taxeditor.git] / eu.etaxonomy.taxeditor.cdmlib / src / main / java / eu / etaxonomy / cdm / api / cache / CdmServiceCacher.java
index 8761ba3b757d0e6dc489203dc230cc3e405af9e9..288b20eb1310bbca841295655c6be1ea98bd233c 100644 (file)
@@ -5,10 +5,9 @@ import java.util.UUID;
 import net.sf.ehcache.config.CacheConfiguration;
 import net.sf.ehcache.config.SizeOfPolicyConfiguration;
 
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import eu.etaxonomy.cdm.api.service.ITermService;
+import eu.etaxonomy.cdm.api.application.CdmApplicationState;
 import eu.etaxonomy.cdm.model.common.CdmBase;
 import eu.etaxonomy.cdm.model.common.DefinedTermBase;
 import eu.etaxonomy.taxeditor.remoting.cache.CacheLoader;
@@ -34,8 +33,6 @@ import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManagerObserver;
 @Component
 public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionManagerObserver {
 
-    @Autowired
-    ITermService termService;
 
 
     private ICdmEntitySessionManager cdmEntitySessionManager;
@@ -49,6 +46,7 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
         DefinedTermBase.setCacher(this);
         CdmTransientEntityCacher.setDefaultCacher(this);
         TermServiceRequestExecutor.setDefaultCacher(this);
+
         cacheLoader = new CacheLoader(this);
     }
 
@@ -72,7 +70,7 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
 
     @Override
     protected CdmBase findByUuid(UUID uuid) {
-        CdmBase term = termService.findWithoutFlush(uuid);
+        CdmBase term = CdmApplicationState.getCurrentAppConfig().getTermService().findWithoutFlush(uuid);
         return load(term);
     }
 
@@ -108,6 +106,10 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
     public CdmBase getFromCache(CdmBase cdmBase) {
         CdmBase 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);
             cachedCdmEntity = cdmTransientEntityCacher.getFromCache(key);
@@ -127,8 +129,8 @@ public class CdmServiceCacher extends CdmCacher  implements ICdmEntitySessionMan
     public CdmBase load(CdmBase cdmEntity) {
         CdmBase cachedCdmEntity = getFromCache(cdmEntity.getUuid());
 
-        if(isCachable(cdmEntity)) {
-            cachedCdmEntity =  cacheLoader.load(cdmEntity, true, false);
+        if(isCachable(cdmEntity) && cachedCdmEntity == null) {
+            cachedCdmEntity =  cacheLoader.load(cdmEntity, false, true);
         }
         return cachedCdmEntity;
     }