ICachedCommonService, CachedCommonServiceImpl : moved class to service package
authorCherian Mathew <c.mathew@bgbm.org>
Mon, 23 Feb 2015 08:51:59 +0000 (08:51 +0000)
committerCherian Mathew <c.mathew@bgbm.org>
Mon, 23 Feb 2015 08:51:59 +0000 (08:51 +0000)
CdmApplicationRemoteConfiguration, AbstractPersistentCollection, AbstractLazyInitializer : refactored package of CachedCommonService
CdmServiceRequestExecutor : added code for intercepting all services and loading returned objects into current session
httpInvokerServiceClients : testing the CdmServiceRequestExecutor with taxon node service
CdmTransientEntityCacher, CdmServiceCacher : dividing cached objects correctly between session cache and default cache
remotingApplicationContext.xml : added service package to component scan

12 files changed:
.gitattributes
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServiceCacher.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CachedCommonServiceImpl.java with 99% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java [moved from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ICachedCommonService.java with 89% similarity]
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java
eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml
eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml

index 01821c8a0aa6f4330fc9132ac3dcfbfe84e24e89..a9452e702caf1a6db8e699ddd7000ea63d971d86 100644 (file)
@@ -334,7 +334,6 @@ eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/cache/CdmServic
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmEagerLoadingException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/CdmRemotingException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CacheLoader.java -text
-eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CachedCommonServiceImpl.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmClientCacheException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmEntityCacheKey.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmModelCacher.java -text
@@ -342,7 +341,6 @@ eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cach
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmRemoteCacheManager.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/EntityCacherDebugResult.java -text
-eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ICachedCommonService.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ProxyUtils.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/server/CDMServerException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmPersistentRemoteSource.java -text
@@ -351,9 +349,11 @@ eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/sour
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmRemoteSourceException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/CdmServerInfo.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/source/ICdmRemoteSource.java -text
+eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceInterceptorException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java -text
+eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/TermServiceRequestExecutor.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmClientSessionException.java -text
 eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/session/CdmEntitySession.java -text
index fbbb8e5afedce70e297aa830d0ca779ff5415a48..20fcb506b7d9f93c4b9ff49e147cd896659f5ea1 100644 (file)
@@ -21,7 +21,7 @@ import org.springframework.transaction.TransactionStatus;
 import eu.etaxonomy.cdm.api.conversation.ConversationHolder;\r
 import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock;\r
 import eu.etaxonomy.cdm.ext.geo.IEditGeoService;\r
-import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService;\r
+import eu.etaxonomy.taxeditor.service.ICachedCommonService;\r
 import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;\r
 \r
 \r
index 05cc819def681b5b6c5e1281722ce9e8b2ba9a87..d3d6aca862fdda607be3750dbc1840330bd5a41e 100644 (file)
@@ -44,5 +44,16 @@ public class CdmServiceCacher extends CdmCacher{
 
        }
 
+    /* (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) {
+            return true;
+        }
+        return false;
+    }
+
 
 }
index 7899e338a22990f571d81cbea65596b08c10b301..321b0cc11dda808936c1fc94855857e267cb5606 100644 (file)
@@ -192,7 +192,7 @@ public class CdmTransientEntityCacher implements ICdmCacher {
 
         if(cachedCdmEntity == null) {
             // ... then try the permanent cache
-            cachedCdmEntity = cdmServiceCacher.load(cdmBase.getUuid());
+            cachedCdmEntity = cdmServiceCacher.load(cdmBase);
         }
 
         return cachedCdmEntity;
similarity index 99%
rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CachedCommonServiceImpl.java
rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java
index acadb3126d766bad36009b2dbdffe9cd42d20f60..4f2dd8799cf55af2e6bbd5107290480d56db9f5a 100644 (file)
@@ -7,7 +7,7 @@
 * 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.taxeditor.remoting.cache;
+package eu.etaxonomy.taxeditor.service;
 
 import java.util.ArrayList;
 import java.util.HashMap;
index aefce6ce63a7e6de81c6d191b18f987dc6d88831..eae2c2840b32d0bc25892a088b7b0aa5ea4f33ce 100644 (file)
@@ -1,12 +1,12 @@
 // $Id$
 /**
-* 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.
-*/
+ * 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.taxeditor.service;
 
 import java.io.IOException;
@@ -25,20 +25,20 @@ import org.springframework.security.core.context.SecurityContextHolder;
  */
 public class CdmAuthenticatedHttpInvokerRequestExecutor extends CommonsHttpInvokerRequestExecutor {
 
-@Override
-protected PostMethod createPostMethod(HttpInvokerClientConfiguration config) throws IOException {
-  PostMethod postMethod = super.createPostMethod(config);
+    @Override
+    protected PostMethod createPostMethod(HttpInvokerClientConfiguration config) throws IOException {
+        PostMethod postMethod = super.createPostMethod(config);
 
-  Authentication auth =
-      SecurityContextHolder.getContext().getAuthentication();
+        Authentication auth =
+                SecurityContextHolder.getContext().getAuthentication();
 
-  if ((auth != null) && (auth.getName() != null) &&
-        (auth.getCredentials() != null)) {
-    String base64 = auth.getName() + ":" + auth.getCredentials().toString();
-    postMethod.setRequestHeader("Authorization", "Basic " +
-        new String(Base64.encodeBase64(base64.getBytes())));
-  }
+        if ((auth != null) && (auth.getName() != null) &&
+                (auth.getCredentials() != null)) {
+            String base64 = auth.getName() + ":" + auth.getCredentials().toString();
+            postMethod.setRequestHeader("Authorization", "Basic " +
+                    new String(Base64.encodeBase64(base64.getBytes())));
+        }
 
-  return postMethod;
-}
+        return postMethod;
+    }
 }
\ No newline at end of file
index 218d94dd85531cb159d8be325f7ed0b0473df27c..685d51cdb8d40c7a245df807e1009f602a5d453a 100644 (file)
@@ -3,11 +3,19 @@ package eu.etaxonomy.taxeditor.service;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.remoting.httpinvoker.HttpInvokerClientConfiguration;
 import org.springframework.remoting.support.RemoteInvocation;
 import org.springframework.remoting.support.RemoteInvocationResult;
+import org.springframework.stereotype.Component;
 
-public abstract class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor {
+import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager;
+
+@Component
+public class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvokerRequestExecutor {
+
+    @Autowired
+    private ICdmEntitySessionManager cdmEntitySessionManager;
 
        private RemoteInvocation currentRemoteInvocation;
 
@@ -24,16 +32,27 @@ public abstract class CdmServiceRequestExecutor extends CdmAuthenticatedHttpInvo
                                        java.lang.ClassNotFoundException {
                RemoteInvocationResult rir = fromCache(currentRemoteInvocation);
 
+               // if rir is not null at this point we assume that the
+               // the object has already been loaded in the cache and
+               // does not need to be reloaded
+
                if(rir == null) {
                        rir = super.doExecuteRequest(config, baos);
+                       if(rir.getValue() != null && !rir.hasException()) {
+                           rir = new RemoteInvocationResult(cdmEntitySessionManager.load(rir.getValue()));
+                       }
                        cache(currentRemoteInvocation, rir);
                }
-
                currentRemoteInvocation = null;
+
                return rir;
        }
 
-       public abstract void cache(RemoteInvocation ri, RemoteInvocationResult rir);
+       public void cache(RemoteInvocation ri, RemoteInvocationResult rir) {
+
+       }
 
-       public abstract RemoteInvocationResult fromCache(RemoteInvocation ri);
+       public RemoteInvocationResult fromCache(RemoteInvocation ri) {
+           return null;
+       }
 }
similarity index 89%
rename from eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ICachedCommonService.java
rename to eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java
index 4b06c66a624aaa32db6ce69824fff9ed97b6cb14..36f6663b01eb114b93b5742d22b6fea6c70fb51b 100644 (file)
@@ -7,12 +7,12 @@
  * 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.taxeditor.remoting.cache;
+package eu.etaxonomy.taxeditor.service;
 
 import org.hibernate.collection.spi.PersistentCollection;
 
 import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.taxeditor.remoting.cache.CachedCommonServiceImpl.CollectionField;
+import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl.CollectionField;
 
 /**
  * @author cmathew
index 47ab7b713cdacd24fc9b92159b17d7568b877cfe..5d81225f4e4c392c3cc2f29815c2b64d2ed3e6a7 100644 (file)
@@ -61,8 +61,8 @@ import org.jboss.logging.Logger;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration;
 import eu.etaxonomy.taxeditor.remoting.CdmEagerLoadingException;
-import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService;
-import eu.etaxonomy.taxeditor.remoting.cache.CachedCommonServiceImpl.CollectionField;
+import eu.etaxonomy.taxeditor.service.ICachedCommonService;
+import eu.etaxonomy.taxeditor.service.CachedCommonServiceImpl.CollectionField;
 
 /**
  * Base class implementing {@link org.hibernate.collection.spi.PersistentCollection}
index 108bbec5ce408fb5a2ebef4fe8db6eb2830cf8a6..ecb9959cbcadb7c77aa575cd82b66a723cd0f743 100644 (file)
@@ -41,7 +41,7 @@ import org.jboss.logging.Logger;
 
 import eu.etaxonomy.cdm.api.application.CdmApplicationRemoteConfiguration;
 import eu.etaxonomy.cdm.model.common.CdmBase;
-import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService;
+import eu.etaxonomy.taxeditor.service.ICachedCommonService;
 
 /**
  * Convenience base class for lazy initialization handlers.  Centralizes the basic plumbing of doing lazy
index b18ca91c284bd4457921733342c076125a66a1ac..50d9de005ddf0b89ada82f42d7efe964eab0c0bd 100644 (file)
     </property>\r
     <property name="httpInvokerRequestExecutor">\r
       <bean\r
-        class="org.springframework.security.remoting.httpinvoker.AuthenticationSimpleHttpInvokerRequestExecutor" />\r
+        class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" />\r
     </property>\r
   </bean>\r
 \r
index 72d191a56fe380f9716a54f0a3847a2b5cf5d816..e423b8bcfb886ced6a7d979216deacdae4c13791 100644 (file)
@@ -27,7 +27,7 @@
                        expression="eu\.etaxonomy\.cdm\.api\.cache\.CdmTermCacher" />\r
        </context:component-scan>\r
 \r
-       <context:component-scan base-package="eu.etaxonomy.taxeditor.remoting.cache"/>\r
+       <context:component-scan base-package="eu.etaxonomy.taxeditor.service"/>\r
 \r
        \r
        <!-- EditGeoService was moved to ext. Therefore it will not be found by \r