Author: radu
Date: Mon Aug 10 10:02:16 2015
New Revision: 1695008

URL: http://svn.apache.org/r1695008
Log:
SLING-4936 - Enhance the Sling Script Cache to only cache scripts from the 
search paths

* made ScriptCacheImpl#putScript to only accept scripts from the search paths

Modified:
    
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java

Modified: 
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java?rev=1695008&r1=1695007&r2=1695008&view=diff
==============================================================================
--- 
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
 (original)
+++ 
sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/impl/ScriptCacheImpl.java
 Mon Aug 10 10:02:16 2015
@@ -109,6 +109,7 @@ public class ScriptCacheImpl implements
     private ServiceRegistration eventHandlerServiceRegistration = null;
     private Set<String> extensions = new HashSet<String>();
     private String[] additionalExtensions = new String[]{};
+    private String[] searchPaths = {};
 
     // use a static policy so that we can reconfigure the watched script files 
if the search paths are changed
     @Reference(policy = ReferencePolicy.STATIC)
@@ -141,10 +142,15 @@ public class ScriptCacheImpl implements
 
     @Override
     public void putScript(CachedScript script) {
-        SoftReference<CachedScript> reference = new 
SoftReference<CachedScript>(script);
         writeLock.lock();
         try {
-            internalMap.put(script.getScriptPath(), reference);
+            for (String searchPath : searchPaths) {
+                if (script.getScriptPath().startsWith(searchPath)) {
+                    SoftReference<CachedScript> reference = new 
SoftReference<CachedScript>(script);
+                    internalMap.put(script.getScriptPath(), reference);
+                    break;
+                }
+            }
         } finally {
             writeLock.unlock();
         }
@@ -222,6 +228,17 @@ public class ScriptCacheImpl implements
             newMap.putAll(internalMap);
             internalMap = newMap;
         }
+        ResourceResolver resolver = null;
+        try {
+            resolver = rrf.getAdministrativeResourceResolver(null);
+            searchPaths = resolver.getSearchPath();
+        } catch (LoginException e) {
+            LOGGER.error("Unable to store search paths.", e);
+        } finally {
+            if (resolver != null) {
+                resolver.close();
+            }
+        }
         configureCache();
         active = true;
     }


Reply via email to