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());