You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2015/10/19 21:31:16 UTC

svn commit: r1709469 - in /sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl: compiler/UnitChangeMonitor.java engine/UnitLoader.java

Author: radu
Date: Mon Oct 19 19:31:16 2015
New Revision: 1709469

URL: http://svn.apache.org/viewvc?rev=1709469&view=rev
Log:
SLING-5171 - Optimise last modified information retrieval in UnitChangeMonitor

Modified:
    sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/UnitChangeMonitor.java
    sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java

Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/UnitChangeMonitor.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/UnitChangeMonitor.java?rev=1709469&r1=1709468&r2=1709469&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/UnitChangeMonitor.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/compiler/UnitChangeMonitor.java Mon Oct 19 19:31:16 2015
@@ -31,6 +31,7 @@ import org.apache.felix.scr.annotations.
 import org.apache.felix.scr.annotations.Service;
 import org.apache.sling.api.SlingConstants;
 import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
@@ -67,9 +68,6 @@ public class UnitChangeMonitor {
      * @return the script's last modified date or 0 if there's no information about the script
      */
     public long getLastModifiedDateForScript(String script) {
-        if (script == null) {
-            return 0;
-        }
         SightlyScript sightlyScript = slyScriptsMap.get(script);
         if (sightlyScript != null) {
             return sightlyScript.lastModified;
@@ -78,8 +76,11 @@ public class UnitChangeMonitor {
     }
 
     public String getScriptEncoding(String script) {
-        SightlyScript sightlyScript = slyScriptsMap.get(script);
-        return sightlyScript.encoding;
+        SightlyScript sightlyScript = getScript(script);
+        if (sightlyScript != null) {
+            return sightlyScript.encoding;
+        }
+        return sightlyEngineConfiguration.getEncoding();
     }
 
     /**
@@ -96,33 +97,6 @@ public class UnitChangeMonitor {
         return date != null ? date : 0;
     }
 
-
-    public void touchScript(String script) {
-        SightlyScript sightlyScript = slyScriptsMap.get(script);
-        if (sightlyScript != null) {
-            sightlyScript.lastModified = System.currentTimeMillis();
-        } else {
-            ResourceResolver resolver = null;
-            String encoding = null;
-            try {
-                resolver =  rrf.getAdministrativeResourceResolver(null);
-                ResourceMetadata scriptResourceMetadata = resolver.getResource(script).getResourceMetadata();
-                encoding = scriptResourceMetadata.getCharacterEncoding();
-            } catch (LoginException e) {
-                // do nothing; we'll just return the default encoding
-                LOG.warn("Cannot read character encoding value for script " + script);
-            } finally {
-                if (resolver != null) {
-                    resolver.close();
-                }
-            }
-            if (StringUtils.isEmpty(encoding)) {
-                encoding = sightlyEngineConfiguration.getEncoding();
-            }
-            slyScriptsMap.put(script, new SightlyScript(script, encoding, System.currentTimeMillis()));
-        }
-    }
-
     public void clearJavaUseObject(String className) {
         if (StringUtils.isNotEmpty(className)) {
             slyJavaUseMap.remove(className);
@@ -212,6 +186,38 @@ public class UnitChangeMonitor {
         }
     }
 
+    private SightlyScript getScript(String script) {
+        SightlyScript sightlyScript = null;
+        if (StringUtils.isNotEmpty(script)) {
+            sightlyScript = slyScriptsMap.get(script);
+            if (sightlyScript == null) {
+                ResourceResolver resolver = null;
+                try {
+                    resolver = rrf.getAdministrativeResourceResolver(null);
+                    Resource scriptResource = resolver.getResource(script);
+                    if (scriptResource == null) {
+                        return null;
+                    }
+                    ResourceMetadata scriptResourceMetadata = scriptResource.getResourceMetadata();
+                    String encoding = scriptResourceMetadata.getCharacterEncoding();
+                    if (StringUtils.isEmpty(encoding)) {
+                        encoding = sightlyEngineConfiguration.getEncoding();
+                    }
+                    sightlyScript = new SightlyScript(script, encoding, scriptResourceMetadata.getModificationTime());
+                    slyScriptsMap.put(script, sightlyScript);
+                } catch (LoginException e) {
+                    // do nothing; we'll just return the default encoding
+                    LOG.warn("Cannot read character encoding value for script " + script);
+                } finally {
+                    if (resolver != null) {
+                        resolver.close();
+                    }
+                }
+            }
+        }
+        return sightlyScript;
+    }
+
     private class SightlyScript {
         String encoding;
         String className;

Modified: sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java?rev=1709469&r1=1709468&r2=1709469&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java (original)
+++ sling/trunk/bundles/scripting/sightly/engine/src/main/java/org/apache/sling/scripting/sightly/impl/engine/UnitLoader.java Mon Oct 19 19:31:16 2015
@@ -98,7 +98,6 @@ public class UnitLoader {
         Object obj;
         String encoding;
         if (sourceIdentifier.needsUpdate()) {
-            unitChangeMonitor.touchScript(scriptResource.getPath());
             encoding = unitChangeMonitor.getScriptEncoding(scriptResource.getPath());
             String sourceCode = getSourceCodeForScript(adminResolver, sourceIdentifier, bindings, encoding);
             obj = sightlyJavaCompilerService.compileSource(sourceIdentifier, sourceCode, sourceIdentifier.getFullyQualifiedName());