From 1075da9a960934194a9e9ec4195a56d5065bb4ee Mon Sep 17 00:00:00 2001 From: Cherian Mathew Date: Mon, 23 Feb 2015 08:51:59 +0000 Subject: [PATCH] ICachedCommonService, CachedCommonServiceImpl : moved class to service package 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 --- .gitattributes | 4 +- .../CdmApplicationRemoteConfiguration.java | 2 +- .../cdm/api/cache/CdmServiceCacher.java | 11 +++++ .../cache/CdmTransientEntityCacher.java | 2 +- .../CachedCommonServiceImpl.java | 2 +- ...thenticatedHttpInvokerRequestExecutor.java | 40 +++++++++---------- .../service/CdmServiceRequestExecutor.java | 27 +++++++++++-- .../ICachedCommonService.java | 4 +- .../AbstractPersistentCollection.java | 4 +- .../proxy/AbstractLazyInitializer.java | 2 +- .../cdm/httpInvokerServiceClients.xml | 2 +- .../cdm/remotingApplicationContext.xml | 2 +- 12 files changed, 66 insertions(+), 36 deletions(-) rename eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/{remoting/cache => service}/CachedCommonServiceImpl.java (99%) rename eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/{remoting/cache => service}/ICachedCommonService.java (89%) diff --git a/.gitattributes b/.gitattributes index 01821c8a0..a9452e702 100644 --- a/.gitattributes +++ b/.gitattributes @@ -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 diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java index fbbb8e5af..20fcb506b 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/cdm/api/application/CdmApplicationRemoteConfiguration.java @@ -21,7 +21,7 @@ import org.springframework.transaction.TransactionStatus; import eu.etaxonomy.cdm.api.conversation.ConversationHolder; import eu.etaxonomy.cdm.api.conversation.ConversationHolderMock; import eu.etaxonomy.cdm.ext.geo.IEditGeoService; -import eu.etaxonomy.taxeditor.remoting.cache.ICachedCommonService; +import eu.etaxonomy.taxeditor.service.ICachedCommonService; import eu.etaxonomy.taxeditor.session.ICdmEntitySessionManager; 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 05cc819de..d3d6aca86 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 @@ -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; + } + } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java index 7899e338a..321b0cc11 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CdmTransientEntityCacher.java @@ -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; diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CachedCommonServiceImpl.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java 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 acadb3126..4f2dd8799 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/CachedCommonServiceImpl.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CachedCommonServiceImpl.java @@ -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; diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java index aefce6ce6..eae2c2840 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmAuthenticatedHttpInvokerRequestExecutor.java @@ -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 diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java index 218d94dd8..685d51cdb 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/CdmServiceRequestExecutor.java @@ -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; + } } diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ICachedCommonService.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java 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 4b06c66a6..36f6663b0 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/remoting/cache/ICachedCommonService.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/eu/etaxonomy/taxeditor/service/ICachedCommonService.java @@ -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 diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java index 47ab7b713..5d81225f4 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/collection/internal/AbstractPersistentCollection.java @@ -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} diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java index 108bbec5c..ecb9959cb 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/java/org/hibernate/proxy/AbstractLazyInitializer.java @@ -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 diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml index b18ca91c2..50d9de005 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/httpInvokerServiceClients.xml @@ -304,7 +304,7 @@ + class="eu.etaxonomy.taxeditor.service.CdmServiceRequestExecutor" /> diff --git a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml index 72d191a56..e423b8bcf 100644 --- a/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml +++ b/eu.etaxonomy.taxeditor.cdmlib/src/main/resources/eu/etaxonomy/cdm/remotingApplicationContext.xml @@ -27,7 +27,7 @@ expression="eu\.etaxonomy\.cdm\.api\.cache\.CdmTermCacher" /> - +