[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wink-commits
Subject:    svn commit: r827637 -
From:       bluk () apache ! org
Date:       2009-10-20 14:57:22
Message-ID: 20091020145722.AD8FD238888A () eris ! apache ! org
[Download RAW message or body]

Author: bluk
Date: Tue Oct 20 14:57:22 2009
New Revision: 827637

URL: http://svn.apache.org/viewvc?rev=827637&view=rev
Log:
Update ResourceRegistry for cache outside reader

Possible performance improvement >1%

Thanks Doug Larson.

Modified:
    incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/registry/ResourceRegistry.java


Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/registry/ResourceRegistry.java
                
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/a \
pache/wink/server/internal/registry/ResourceRegistry.java?rev=827637&r1=827636&r2=827637&view=diff
 ==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/registry/ResourceRegistry.java \
                (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/registry/ResourceRegistry.java \
Tue Oct 20 14:57:22 2009 @@ -49,7 +49,6 @@
 import org.apache.wink.common.internal.uritemplate.UriTemplateMatcher;
 import org.apache.wink.common.internal.uritemplate.UriTemplateProcessor;
 import org.apache.wink.common.internal.utils.MediaTypeUtils;
-import org.apache.wink.common.internal.utils.SimpleMap;
 import org.apache.wink.common.internal.utils.SoftConcurrentMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -60,20 +59,20 @@
  */
 public class ResourceRegistry {
 
-    private static final Logger                                   logger             \
                =
-                                                                                     \
                LoggerFactory
-                                                                                     \
.getLogger(ResourceRegistry.class); +    private static final Logger                  \
logger             = +                                                                \
LoggerFactory +                                                                       \
.getLogger(ResourceRegistry.class);  
-    private List<ResourceRecord>                                  rootResources;
+    private List<ResourceRecord>                                                   \
rootResources;  
-    private ResourceRecordFactory                                 \
resourceRecordsFactory; +    private ResourceRecordFactory                            \
resourceRecordsFactory;  
-    private Lock                                                  readersLock;
-    private Lock                                                  writersLock;
-    private final ApplicationValidator                            \
applicationValidator; +    private Lock                                               \
readersLock; +    private Lock                                                        \
writersLock; +    private final ApplicationValidator                                  \
applicationValidator;  
-    private Map<Boolean, SimpleMap<String, List<ResourceRecord>>> uriToResourceCache \
                =
-                                                                                     \
new HashMap<Boolean, SimpleMap<String, List<ResourceRecord>>>(); +    private \
HashMap<Boolean, SoftConcurrentMap<String, ArrayList<ResourceRecord>>> \
uriToResourceCache = +                                                                \
new HashMap<Boolean, SoftConcurrentMap<String, ArrayList<ResourceRecord>>>();  
     public ResourceRegistry(LifecycleManagersRegistry factoryRegistry,
                             ApplicationValidator applicationValidator) {
@@ -83,9 +82,10 @@
         ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
         readersLock = readWriteLock.readLock();
         writersLock = readWriteLock.writeLock();
-        uriToResourceCache.put(Boolean.TRUE, new SoftConcurrentMap<String, \
                List<ResourceRecord>>());
-        uriToResourceCache
-            .put(Boolean.FALSE, new SoftConcurrentMap<String, \
List<ResourceRecord>>()); +        uriToResourceCache.put(Boolean.TRUE,
+                               new SoftConcurrentMap<String, \
ArrayList<ResourceRecord>>()); +        uriToResourceCache.put(Boolean.FALSE,
+                               new SoftConcurrentMap<String, \
ArrayList<ResourceRecord>>());  }
 
     /**
@@ -255,27 +255,29 @@
      */
     public List<ResourceInstance> getMatchingRootResources(String uri,
                                                            boolean \
                isContinuedSearchPolicy) {
-        List<ResourceInstance> found = new ArrayList<ResourceInstance>();
+        ArrayList<ResourceInstance> found = new ArrayList<ResourceInstance>(1);
         uri = UriTemplateProcessor.normalizeUri(uri);
 
-        readersLock.lock();
-        try {
-            List<ResourceRecord> previousMatched = null;
-            /*
-             * the previous matches are cached so if a previous URI used is
-             * still in the cache, this will find the resources that matched
-             * skipping the expensive UriTemplateMatcher.matches()
-             */
-            previousMatched = \
                uriToResourceCache.get(isContinuedSearchPolicy).get(uri);
-            if (previousMatched != null) {
-                for (ResourceRecord record : previousMatched) {
-                    UriTemplateMatcher matcher = \
                record.getTemplateProcessor().matcher();
-                    if (matcher.matches(uri)) {
-                        found.add(new ResourceInstance(record, matcher));
-                    }
+        ArrayList<ResourceRecord> previousMatched = null;
+        /*
+         * the previous matches are cached so if a previous URI used is still in
+         * the cache, this will find the resources that matched skipping the
+         * expensive UriTemplateMatcher.matches()
+         */
+        previousMatched = uriToResourceCache.get(isContinuedSearchPolicy).get(uri);
+        if (previousMatched != null) {
+            for (ResourceRecord record : previousMatched) {
+                UriTemplateMatcher matcher = \
record.getTemplateProcessor().matcher(); +                if (matcher.matches(uri)) {
+                    found.add(new ResourceInstance(record, matcher));
                 }
-                return found;
             }
+            return found;
+        }
+
+        readersLock.lock();
+        try {
+
             previousMatched = new ArrayList<ResourceRecord>();
 
             // the list of root resource records is already sorted


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic