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
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
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
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
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
}
+ /* (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;
+ }
+
}
if(cachedCdmEntity == null) {
// ... then try the permanent cache
- cachedCdmEntity = cdmServiceCacher.load(cdmBase.getUuid());
+ cachedCdmEntity = cdmServiceCacher.load(cdmBase);
}
return cachedCdmEntity;
* 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;
// $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;
*/
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
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;
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;
+ }
}
* 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
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}
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
</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
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