Author: olamy
Date: Thu Mar 27 06:02:33 2014
New Revision: 1582203

URL: http://svn.apache.org/r1582203
Log:
add a bit of caching here at least for released version

Modified:
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
    
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java?rev=1582203&r1=1582202&r2=1582203&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
 Thu Mar 27 06:02:33 2014
@@ -41,6 +41,7 @@ import org.apache.archiva.metadata.repos
 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;
+    }
 }

Modified: 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
URL: 
http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml?rev=1582203&r1=1582202&r2=1582203&view=diff
==============================================================================
--- 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
 (original)
+++ 
archiva/trunk/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/resources/META-INF/spring-context.xml
 Thu Mar 27 06:02:33 2014
@@ -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>
\ No newline at end of file


Reply via email to