diff options
author | donald.g.dunne | 2015-08-17 18:53:50 +0000 |
---|---|---|
committer | Angel Avila | 2015-09-12 01:04:04 +0000 |
commit | 19da7d754338b94caa8f72508bf4357a5082b362 (patch) | |
tree | 4239d1182031440463d97eb03509fbe1cdbeb3f6 | |
parent | 8125da1acf86aaa62432d3f0ac6228ee3b020c3d (diff) | |
download | org.eclipse.osee-19da7d754338b94caa8f72508bf4357a5082b362.tar.gz org.eclipse.osee-19da7d754338b94caa8f72508bf4357a5082b362.tar.xz org.eclipse.osee-19da7d754338b94caa8f72508bf4357a5082b362.zip |
feature[ats_ATS217738]: Convert ATS Server to evacuating cache
Change-Id: Ibfa2649c08566c1c4faabd8d1ae05735b92e780d
6 files changed, 43 insertions, 42 deletions
diff --git a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java index 3c1ca4a6341..354813e66ed 100644 --- a/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java +++ b/plugins/org.eclipse.osee.ats.core.client/src/org/eclipse/osee/ats/core/client/internal/AtsClientImpl.java @@ -231,8 +231,8 @@ public class AtsClientImpl implements IAtsClient { attributeResolverService = new AtsAttributeResolverServiceImpl(); relationResolver = new AtsRelationResolverServiceImpl(this); - workDefAdmin = new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, - attributeResolverService, teamWorkflowProvidersLazy); + workDefAdmin = new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workDefService, attributeResolverService, + teamWorkflowProvidersLazy); branchService = new AtsBranchServiceImpl(this, teamWorkflowProvidersLazy); reviewService = new AtsReviewServiceImpl(this, this); diff --git a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java index b228e273b89..2a0b6343830 100644 --- a/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java +++ b/plugins/org.eclipse.osee.ats.core.test/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImplTest.java @@ -87,8 +87,8 @@ public class AtsWorkDefinitionAdminImplTest { AtsWorkDefinitionCache cache = new AtsWorkDefinitionCache(); when(cacheProvider.get()).thenReturn(cache); - workDefAmin = new AtsWorkDefinitionAdminImpl(cacheProvider, workItemService, workDefinitionService, - attributeResolver, teamWorkflowProviders); + workDefAmin = new AtsWorkDefinitionAdminImpl(cacheProvider, workDefinitionService, attributeResolver, + teamWorkflowProviders); } @Test diff --git a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java index c0a3575c09c..2754c8e2e27 100644 --- a/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java +++ b/plugins/org.eclipse.osee.ats.core/src/org/eclipse/osee/ats/core/workdef/AtsWorkDefinitionAdminImpl.java @@ -32,7 +32,6 @@ import org.eclipse.osee.ats.api.workdef.IWorkDefinitionMatch; import org.eclipse.osee.ats.api.workflow.IAtsGoal; import org.eclipse.osee.ats.api.workflow.IAtsTask; import org.eclipse.osee.ats.api.workflow.IAtsTeamWorkflow; -import org.eclipse.osee.ats.api.workflow.IAtsWorkItemService; import org.eclipse.osee.ats.core.util.CacheProvider; import org.eclipse.osee.ats.core.workflow.ITeamWorkflowProvidersLazy; import org.eclipse.osee.ats.core.workflow.TeamWorkflowProviders; @@ -50,13 +49,11 @@ public class AtsWorkDefinitionAdminImpl implements IAtsWorkDefinitionAdmin { private final CacheProvider<AtsWorkDefinitionCache> cacheProvider; private final IAtsWorkDefinitionService workDefinitionService; - private final IAtsWorkItemService workItemService; private final IAttributeResolver attributeResolver; private final ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy; - public AtsWorkDefinitionAdminImpl(CacheProvider<AtsWorkDefinitionCache> workDefCacheProvider, IAtsWorkItemService workItemService, IAtsWorkDefinitionService workDefinitionService, IAttributeResolver attributeResolver, ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy) { + public AtsWorkDefinitionAdminImpl(CacheProvider<AtsWorkDefinitionCache> workDefCacheProvider, IAtsWorkDefinitionService workDefinitionService, IAttributeResolver attributeResolver, ITeamWorkflowProvidersLazy teamWorkflowProvidersLazy) { this.cacheProvider = workDefCacheProvider; - this.workItemService = workItemService; this.workDefinitionService = workDefinitionService; this.attributeResolver = attributeResolver; this.teamWorkflowProvidersLazy = teamWorkflowProvidersLazy; diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java index 5d1a60cdb61..2349d743dbd 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/AtsServerImpl.java @@ -207,8 +207,8 @@ public class AtsServerImpl implements IAtsServer { attributeResolverService = new AtsAttributeResolverServiceImpl(); relationResolver = new AtsRelationResolverServiceImpl(this); attributeResolverService.setOrcsApi(orcsApi); - workDefAdmin = new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workItemService, workDefService, - attributeResolverService, teamWorkflowProvidersLazy); + workDefAdmin = new AtsWorkDefinitionAdminImpl(workDefCacheProvider, workDefService, attributeResolverService, + teamWorkflowProvidersLazy); atsLogFactory = AtsCoreFactory.newLogFactory(); atsStateFactory = AtsCoreFactory.newStateFactory(getServices(), atsLogFactory); diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsArtifactConfigCache.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsArtifactConfigCache.java index 3d0cce1c098..3b6bd36aaf7 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsArtifactConfigCache.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/util/AtsArtifactConfigCache.java @@ -11,45 +11,49 @@ package org.eclipse.osee.ats.impl.internal.util; import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; import org.eclipse.osee.ats.api.IAtsConfigObject; import org.eclipse.osee.ats.api.team.IAtsConfigItemFactory; -import org.eclipse.osee.ats.core.config.AtsConfigCache; import org.eclipse.osee.ats.core.config.IAtsConfig; import org.eclipse.osee.ats.core.util.AtsUtilCore; +import org.eclipse.osee.framework.core.exception.OseeWrappedException; import org.eclipse.osee.framework.core.util.XResultData; import org.eclipse.osee.framework.jdk.core.type.OseeCoreException; import org.eclipse.osee.framework.jdk.core.type.OseeStateException; import org.eclipse.osee.orcs.OrcsApi; import org.eclipse.osee.orcs.data.ArtifactReadable; +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; /** * @author Donald G. Dunne */ public class AtsArtifactConfigCache implements IAtsConfig { - private final AtsConfigCache cache; private final IAtsConfigItemFactory configItemFactory; private final OrcsApi orcsApi; + private final Cache<Long, IAtsConfigObject> uuidCache = + CacheBuilder.newBuilder().expireAfterAccess(5, TimeUnit.MINUTES).build(); public AtsArtifactConfigCache(IAtsConfigItemFactory configItemFactory, OrcsApi orcsApi) { this.configItemFactory = configItemFactory; this.orcsApi = orcsApi; - cache = new AtsConfigCache(); } @Override public <A extends IAtsConfigObject> List<A> getByTag(String tag, Class<A> clazz) throws OseeCoreException { - return cache.getByTag(tag, clazz); + throw new UnsupportedOperationException("AtsArtifactConfigCache.getByTag not supported on server"); } @Override public <A extends IAtsConfigObject> A getSoleByTag(String tag, Class<A> clazz) throws OseeCoreException { - return cache.getSoleByTag(tag, clazz); + throw new UnsupportedOperationException("AtsArtifactConfigCache.getSoleByTag not supported on server"); } @Override public <A extends IAtsConfigObject> List<A> get(Class<A> clazz) throws OseeCoreException { - return cache.get(clazz); + throw new UnsupportedOperationException("AtsArtifactConfigCache.get not supported on server"); } @Override @@ -59,45 +63,44 @@ public class AtsArtifactConfigCache implements IAtsConfig { @Override public void invalidate(IAtsConfigObject configObject) throws OseeCoreException { - cache.invalidate(configObject); + uuidCache.invalidate(configObject.getUuid()); } @Override public final <A extends IAtsConfigObject> List<A> getById(long id, Class<A> clazz) { - return cache.getById(id, clazz); + throw new UnsupportedOperationException("AtsArtifactConfigCache.getById not supported on server"); } @SuppressWarnings("unchecked") @Override - public <A extends IAtsConfigObject> A getSoleByUuid(long uuid, Class<A> clazz) throws OseeCoreException { - A result = cache.getSoleByUuid(uuid, clazz); - if (result == null) { - ArtifactReadable artifact = - orcsApi.getQueryFactory().fromBranch(AtsUtilCore.getAtsBranch()).andUuid(uuid).getResults().getOneOrNull(); - if (artifact != null) { - result = (A) configItemFactory.getConfigObject(artifact); - if (result != null) { - cache.cache(result); + public <A extends IAtsConfigObject> A getSoleByUuid(final long uuid, Class<A> clazz) throws OseeCoreException { + IAtsConfigObject atsConfigObject = null; + try { + atsConfigObject = uuidCache.get(uuid, new Callable<IAtsConfigObject>() { + + @Override + public IAtsConfigObject call() throws Exception { + ArtifactReadable artifact = orcsApi.getQueryFactory().fromBranch(AtsUtilCore.getAtsBranch()).andUuid( + uuid).getResults().getOneOrNull(); + if (artifact == null) { + throw new OseeStateException("Artifact of %d of class %s is not found", uuid, clazz.getTypeName()); + } + IAtsConfigObject atsConfigObject = configItemFactory.getConfigObject(artifact); + if (atsConfigObject == null) { + throw new OseeStateException("Artifact of %d is not of class %s", uuid, clazz.getTypeName()); + } + return atsConfigObject; } - } + }); + } catch (Exception ex) { + throw new OseeWrappedException(ex); } - return result; + return atsConfigObject != null ? (A) atsConfigObject : null; } @Override public IAtsConfigObject getSoleByUuid(long uuid) throws OseeCoreException { - IAtsConfigObject result = cache.getSoleByUuid(uuid); - if (result == null) { - ArtifactReadable artifact = - orcsApi.getQueryFactory().fromBranch(AtsUtilCore.getAtsBranch()).andUuid(uuid).getResults().getOneOrNull(); - if (artifact != null) { - result = configItemFactory.getConfigObject(artifact); - if (result != null) { - cache.cache(result); - } - } - } - return result; + return getSoleByUuid(uuid, IAtsConfigObject.class); } } diff --git a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java index 206a11eb631..515e9508d5f 100644 --- a/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java +++ b/plugins/org.eclipse.osee.ats.impl/src/org/eclipse/osee/ats/impl/internal/workitem/WorkItem.java @@ -186,7 +186,8 @@ public class WorkItem extends AtsObject implements IAtsWorkItem { try { match = getAtsServer().getWorkDefAdmin().getWorkDefinition(this); } catch (Exception ex) { - logger.error("Error getting work definition match for artifact[%s]", artifact); + logger.error("Error getting work definition match for artifact[%s]: Exception %s", artifact, + ex.getLocalizedMessage()); } } return match; |