浏览代码

add a bit of caching here at least for released version

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1582203 13f79535-47bb-0310-9956-ffa450edef68
tags/archiva-2.1.0
Olivier Lamy 10 年前
父节点
当前提交
90d0b07393

+ 46
- 5
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java 查看文件

@@ -41,6 +41,7 @@ import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
import org.apache.archiva.model.ArchivaArtifact;
import org.apache.archiva.model.ArchivaRepositoryMetadata;
import org.apache.archiva.proxy.model.RepositoryProxyConnectors;
import org.apache.archiva.redback.components.cache.Cache;
import org.apache.archiva.repository.ManagedRepositoryContent;
import org.apache.archiva.repository.RepositoryContentFactory;
import org.apache.archiva.repository.RepositoryException;
@@ -103,6 +104,10 @@ public class DefaultBrowseService
@Named( value = "repositoryProxyConnectors#default" )
private RepositoryProxyConnectors connectors;

@Inject
@Named( value = "browse#versionMetadata" )
private Cache<String, ProjectVersionMetadata> versionMetadataCache;

public BrowseResult getRootGroups( String repositoryId )
throws ArchivaRestServiceException
{
@@ -333,9 +338,35 @@ public class DefaultBrowseService
{
try
{
versionMetadata =
metadataResolver.resolveProjectVersion( repositorySession, repoId, groupId, artifactId,
version );
ProjectVersionMetadata projectVersionMetadataResolved = null;
boolean useCache = !StringUtils.endsWith( version, VersionUtil.SNAPSHOT );
String cacheKey = null;
boolean cacheToUpdate = false;
// FIXME a bit maven centric!!!
// not a snapshot so get it from cache
if ( useCache )
{
cacheKey = repoId + groupId + artifactId + version;
projectVersionMetadataResolved = versionMetadataCache.get( cacheKey );
}
if ( useCache && projectVersionMetadataResolved != null )
{
versionMetadata = projectVersionMetadataResolved;
}
else
{
projectVersionMetadataResolved =
metadataResolver.resolveProjectVersion( repositorySession, repoId, groupId,
artifactId, version );
versionMetadata = projectVersionMetadataResolved;
cacheToUpdate = true;
}

if ( useCache && cacheToUpdate )
{
versionMetadataCache.put( cacheKey, projectVersionMetadataResolved );
}

}
catch ( MetadataResolutionException e )
{
@@ -479,8 +510,8 @@ public class DefaultBrowseService
{
// TODO: what about if we want to see this irrespective of version?
references.addAll(
metadataResolver.resolveProjectReferences( repositorySession, repoId, groupId, artifactId, version )
);
metadataResolver.resolveProjectReferences( repositorySession, repoId, groupId, artifactId,
version ) );
}
}
catch ( MetadataResolutionException e )
@@ -1111,4 +1142,14 @@ public class DefaultBrowseService
n + "." + subNamespaces.iterator().next() );
}
}

public Cache getVersionMetadataCache()
{
return versionMetadataCache;
}

public void setVersionMetadataCache( Cache versionMetadataCache )
{
this.versionMetadataCache = versionMetadataCache;
}
}

+ 11
- 0
archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml 查看文件

@@ -85,4 +85,15 @@
</jaxrs:outFaultInterceptors>
</jaxrs:server>

<bean name="browse#versionMetadata" class="org.apache.archiva.redback.components.cache.ehcache.EhcacheCache"
init-method="initialize">
<property name="diskPersistent" value="false"/>
<property name="eternal" value="false"/>
<property name="maxElementsInMemory" value="1000"/>
<property name="memoryEvictionPolicy" value="LRU"/>
<property name="name" value="userPermissions"/>
<property name="timeToIdleSeconds" value="300"/>
<property name="timeToLiveSeconds" value="600"/>
</bean>

</beans>

正在加载...
取消
保存