[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